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).
5
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 3, or (at your option)
11any later version.
12
13GCC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GCC; see the file COPYING3.  If not see
20<http://www.gnu.org/licenses/>.  */
21
22
23/* High-level class interface.  */
24
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"
62
63/* The various kinds of conversion.  */
64
65typedef 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;
80
81/* The rank of the conversion.  Order of the enumerals matters; better
82   conversions should come earlier in the list.  */
83
84typedef 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;
94
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.  */
98
99typedef struct conversion conversion;
100struct 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;
146};
147
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)
153
154#define BAD_CONVERSION_RANK(NODE)		\
155  ((NODE)->ellipsis_p ? cr_ellipsis		\
156   : (NODE)->user_conv_p ? cr_user		\
157   : (NODE)->rank)
158
159static struct obstack conversion_obstack;
160static bool conversion_obstack_initialized;
161struct rejection_reason;
162
163static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
164static int equal_functions (tree, tree);
165static int joust (struct z_candidate *, struct z_candidate *, bool,
166		  tsubst_flags_t);
167static int compare_ics (conversion *, conversion *);
168static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
169static 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))
178static tree convert_like_real (conversion *, tree, tree, int, int, bool,
179			       bool, tsubst_flags_t);
180static void op_error (location_t, enum tree_code, enum tree_code, tree,
181		      tree, tree, bool);
182static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
183							 tsubst_flags_t);
184static void print_z_candidate (location_t, const char *, struct z_candidate *);
185static void print_z_candidates (location_t, struct z_candidate *);
186static tree build_this (tree);
187static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
188static bool any_strictly_viable (struct z_candidate *);
189static 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);
192static 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);
195static 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);
198static void add_builtin_candidates
199	(struct z_candidate **, enum tree_code, enum tree_code,
200	 tree, tree *, int, tsubst_flags_t);
201static void add_builtin_candidate
202	(struct z_candidate **, enum tree_code, enum tree_code,
203	 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
204static bool is_complete (tree);
205static void build_builtin_candidate
206	(struct z_candidate **, tree, tree, tree, tree *, tree *,
207	 int, tsubst_flags_t);
208static struct z_candidate *add_conv_candidate
209	(struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
210	 tree, tsubst_flags_t);
211static 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);
214static conversion *implicit_conversion (tree, tree, tree, bool, int,
215					tsubst_flags_t);
216static conversion *reference_binding (tree, tree, tree, bool, int,
217				      tsubst_flags_t);
218static conversion *build_conv (conversion_kind, tree, conversion *);
219static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
220static conversion *next_conversion (conversion *);
221static bool is_subseq (conversion *, conversion *);
222static conversion *maybe_handle_ref_bind (conversion **);
223static void maybe_handle_implicit_object (conversion **);
224static struct z_candidate *add_candidate
225	(struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
226	 conversion **, tree, tree, int, struct rejection_reason *, int);
227static tree source_type (conversion *);
228static void add_warning (struct z_candidate *, struct z_candidate *);
229static bool reference_compatible_p (tree, tree);
230static conversion *direct_reference_binding (tree, conversion *);
231static bool promoted_arithmetic_type_p (tree);
232static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
233static char *name_as_c_string (tree, tree, bool *);
234static tree prep_operand (tree);
235static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
236			    bool, tree, tree, int, struct z_candidate **,
237			    tsubst_flags_t);
238static conversion *merge_conversion_sequences (conversion *, conversion *);
239static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
240
241/* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
242   NAME can take many forms...  */
243
244bool
245check_dtor_name (tree basetype, tree name)
246{
247  /* Just accept something we've already complained about.  */
248  if (name == error_mark_node)
249    return true;
250
251  if (TREE_CODE (name) == TYPE_DECL)
252    name = TREE_TYPE (name);
253  else if (TYPE_P (name))
254    /* OK */;
255  else if (identifier_p (name))
256    {
257      if ((MAYBE_CLASS_TYPE_P (basetype)
258	   && name == constructor_name (basetype))
259	  || (TREE_CODE (basetype) == ENUMERAL_TYPE
260	      && name == TYPE_IDENTIFIER (basetype)))
261	return true;
262      else
263	name = get_type_value (name);
264    }
265  else
266    {
267      /* In the case of:
268
269	 template <class T> struct S { ~S(); };
270	 int i;
271	 i.~S();
272
273	 NAME will be a class template.  */
274      gcc_assert (DECL_CLASS_TEMPLATE_P (name));
275      return false;
276    }
277
278  if (!name || name == error_mark_node)
279    return false;
280  return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
281}
282
283/* We want the address of a function or method.  We avoid creating a
284   pointer-to-member function.  */
285
286tree
287build_addr_func (tree function, tsubst_flags_t complain)
288{
289  tree type = TREE_TYPE (function);
290
291  /* We have to do these by hand to avoid real pointer to member
292     functions.  */
293  if (TREE_CODE (type) == METHOD_TYPE)
294    {
295      if (TREE_CODE (function) == OFFSET_REF)
296	{
297	  tree object = build_address (TREE_OPERAND (function, 0));
298	  return get_member_function_from_ptrfunc (&object,
299						   TREE_OPERAND (function, 1),
300						   complain);
301	}
302      function = build_address (function);
303    }
304  else
305    function = decay_conversion (function, complain);
306
307  return function;
308}
309
310/* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
311   POINTER_TYPE to those.  Note, pointer to member function types
312   (TYPE_PTRMEMFUNC_P) must be handled by our callers.  There are
313   two variants.  build_call_a is the primitive taking an array of
314   arguments, while build_call_n is a wrapper that handles varargs.  */
315
316tree
317build_call_n (tree function, int n, ...)
318{
319  if (n == 0)
320    return build_call_a (function, 0, NULL);
321  else
322    {
323      tree *argarray = XALLOCAVEC (tree, n);
324      va_list ap;
325      int i;
326
327      va_start (ap, n);
328      for (i = 0; i < n; i++)
329	argarray[i] = va_arg (ap, tree);
330      va_end (ap);
331      return build_call_a (function, n, argarray);
332    }
333}
334
335/* Update various flags in cfun and the call itself based on what is being
336   called.  Split out of build_call_a so that bot_manip can use it too.  */
337
338void
339set_flags_from_callee (tree call)
340{
341  bool nothrow;
342  tree decl = get_callee_fndecl (call);
343
344  /* We check both the decl and the type; a function may be known not to
345     throw without being declared throw().  */
346  nothrow = decl && TREE_NOTHROW (decl);
347  if (CALL_EXPR_FN (call))
348    nothrow |= TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call))));
349  else if (internal_fn_flags (CALL_EXPR_IFN (call)) & ECF_NOTHROW)
350    nothrow = true;
351
352  if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
353    cp_function_chain->can_throw = 1;
354
355  if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
356    current_function_returns_abnormally = 1;
357
358  TREE_NOTHROW (call) = nothrow;
359}
360
361tree
362build_call_a (tree function, int n, tree *argarray)
363{
364  tree decl;
365  tree result_type;
366  tree fntype;
367  int i;
368
369  function = build_addr_func (function, tf_warning_or_error);
370
371  gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
372  fntype = TREE_TYPE (TREE_TYPE (function));
373  gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
374	      || TREE_CODE (fntype) == METHOD_TYPE);
375  result_type = TREE_TYPE (fntype);
376  /* An rvalue has no cv-qualifiers.  */
377  if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
378    result_type = cv_unqualified (result_type);
379
380  function = build_call_array_loc (input_location,
381				   result_type, function, n, argarray);
382  set_flags_from_callee (function);
383
384  decl = get_callee_fndecl (function);
385
386  if (decl && !TREE_USED (decl))
387    {
388      /* We invoke build_call directly for several library
389	 functions.  These may have been declared normally if
390	 we're building libgcc, so we can't just check
391	 DECL_ARTIFICIAL.  */
392      gcc_assert (DECL_ARTIFICIAL (decl)
393		  || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
394			       "__", 2));
395      mark_used (decl);
396    }
397
398  require_complete_eh_spec_types (fntype, decl);
399
400  TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
401
402  /* Don't pass empty class objects by value.  This is useful
403     for tags in STL, which are used to control overload resolution.
404     We don't need to handle other cases of copying empty classes.  */
405  if (! decl || ! DECL_BUILT_IN (decl))
406    for (i = 0; i < n; i++)
407      {
408	tree arg = CALL_EXPR_ARG (function, i);
409	if (is_empty_class (TREE_TYPE (arg))
410	    && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
411	  {
412	    tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
413	    arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
414	    CALL_EXPR_ARG (function, i) = arg;
415	  }
416      }
417
418  return function;
419}
420
421/* Build something of the form ptr->method (args)
422   or object.method (args).  This can also build
423   calls to constructors, and find friends.
424
425   Member functions always take their class variable
426   as a pointer.
427
428   INSTANCE is a class instance.
429
430   NAME is the name of the method desired, usually an IDENTIFIER_NODE.
431
432   PARMS help to figure out what that NAME really refers to.
433
434   BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
435   down to the real instance type to use for access checking.  We need this
436   information to get protected accesses correct.
437
438   FLAGS is the logical disjunction of zero or more LOOKUP_
439   flags.  See cp-tree.h for more info.
440
441   If this is all OK, calls build_function_call with the resolved
442   member function.
443
444   This function must also handle being called to perform
445   initialization, promotion/coercion of arguments, and
446   instantiation of default parameters.
447
448   Note that NAME may refer to an instance variable name.  If
449   `operator()()' is defined for the type of that field, then we return
450   that result.  */
451
452/* New overloading code.  */
453
454typedef struct z_candidate z_candidate;
455
456typedef struct candidate_warning candidate_warning;
457struct candidate_warning {
458  z_candidate *loser;
459  candidate_warning *next;
460};
461
462/* Information for providing diagnostics about why overloading failed.  */
463
464enum rejection_reason_code {
465  rr_none,
466  rr_arity,
467  rr_explicit_conversion,
468  rr_template_conversion,
469  rr_arg_conversion,
470  rr_bad_arg_conversion,
471  rr_template_unification,
472  rr_invalid_copy
473};
474
475struct conversion_info {
476  /* The index of the argument, 0-based.  */
477  int n_arg;
478  /* The actual argument or its type.  */
479  tree from;
480  /* The type of the parameter.  */
481  tree to_type;
482};
483
484struct rejection_reason {
485  enum rejection_reason_code code;
486  union {
487    /* Information about an arity mismatch.  */
488    struct {
489      /* The expected number of arguments.  */
490      int expected;
491      /* The actual number of arguments in the call.  */
492      int actual;
493      /* Whether the call was a varargs call.  */
494      bool call_varargs_p;
495    } arity;
496    /* Information about an argument conversion mismatch.  */
497    struct conversion_info conversion;
498    /* Same, but for bad argument conversions.  */
499    struct conversion_info bad_conversion;
500    /* Information about template unification failures.  These are the
501       parameters passed to fn_type_unification.  */
502    struct {
503      tree tmpl;
504      tree explicit_targs;
505      int num_targs;
506      const tree *args;
507      unsigned int nargs;
508      tree return_type;
509      unification_kind_t strict;
510      int flags;
511    } template_unification;
512    /* Information about template instantiation failures.  These are the
513       parameters passed to instantiate_template.  */
514    struct {
515      tree tmpl;
516      tree targs;
517    } template_instantiation;
518  } u;
519};
520
521struct z_candidate {
522  /* The FUNCTION_DECL that will be called if this candidate is
523     selected by overload resolution.  */
524  tree fn;
525  /* If not NULL_TREE, the first argument to use when calling this
526     function.  */
527  tree first_arg;
528  /* The rest of the arguments to use when calling this function.  If
529     there are no further arguments this may be NULL or it may be an
530     empty vector.  */
531  const vec<tree, va_gc> *args;
532  /* The implicit conversion sequences for each of the arguments to
533     FN.  */
534  conversion **convs;
535  /* The number of implicit conversion sequences.  */
536  size_t num_convs;
537  /* If FN is a user-defined conversion, the standard conversion
538     sequence from the type returned by FN to the desired destination
539     type.  */
540  conversion *second_conv;
541  struct rejection_reason *reason;
542  /* If FN is a member function, the binfo indicating the path used to
543     qualify the name of FN at the call site.  This path is used to
544     determine whether or not FN is accessible if it is selected by
545     overload resolution.  The DECL_CONTEXT of FN will always be a
546     (possibly improper) base of this binfo.  */
547  tree access_path;
548  /* If FN is a non-static member function, the binfo indicating the
549     subobject to which the `this' pointer should be converted if FN
550     is selected by overload resolution.  The type pointed to by
551     the `this' pointer must correspond to the most derived class
552     indicated by the CONVERSION_PATH.  */
553  tree conversion_path;
554  tree template_decl;
555  tree explicit_targs;
556  candidate_warning *warnings;
557  z_candidate *next;
558  int viable;
559
560  /* The flags active in add_candidate.  */
561  int flags;
562};
563
564/* Returns true iff T is a null pointer constant in the sense of
565   [conv.ptr].  */
566
567bool
568null_ptr_cst_p (tree t)
569{
570  /* [conv.ptr]
571
572     A null pointer constant is an integral constant expression
573     (_expr.const_) rvalue of integer type that evaluates to zero or
574     an rvalue of type std::nullptr_t. */
575  if (NULLPTR_TYPE_P (TREE_TYPE (t)))
576    return true;
577  if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
578    {
579      /* Core issue 903 says only literal 0 is a null pointer constant.  */
580      if (cxx_dialect < cxx11)
581	t = fold_non_dependent_expr (t);
582      STRIP_NOPS (t);
583      if (integer_zerop (t) && !TREE_OVERFLOW (t))
584	return true;
585    }
586  return false;
587}
588
589/* Returns true iff T is a null member pointer value (4.11).  */
590
591bool
592null_member_pointer_value_p (tree t)
593{
594  tree type = TREE_TYPE (t);
595  if (!type)
596    return false;
597  else if (TYPE_PTRMEMFUNC_P (type))
598    return (TREE_CODE (t) == CONSTRUCTOR
599	    && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
600  else if (TYPE_PTRDATAMEM_P (type))
601    return integer_all_onesp (t);
602  else
603    return false;
604}
605
606/* Returns nonzero if PARMLIST consists of only default parms,
607   ellipsis, and/or undeduced parameter packs.  */
608
609bool
610sufficient_parms_p (const_tree parmlist)
611{
612  for (; parmlist && parmlist != void_list_node;
613       parmlist = TREE_CHAIN (parmlist))
614    if (!TREE_PURPOSE (parmlist)
615	&& !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
616      return false;
617  return true;
618}
619
620/* Allocate N bytes of memory from the conversion obstack.  The memory
621   is zeroed before being returned.  */
622
623static void *
624conversion_obstack_alloc (size_t n)
625{
626  void *p;
627  if (!conversion_obstack_initialized)
628    {
629      gcc_obstack_init (&conversion_obstack);
630      conversion_obstack_initialized = true;
631    }
632  p = obstack_alloc (&conversion_obstack, n);
633  memset (p, 0, n);
634  return p;
635}
636
637/* Allocate rejection reasons.  */
638
639static struct rejection_reason *
640alloc_rejection (enum rejection_reason_code code)
641{
642  struct rejection_reason *p;
643  p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
644  p->code = code;
645  return p;
646}
647
648static struct rejection_reason *
649arity_rejection (tree first_arg, int expected, int actual)
650{
651  struct rejection_reason *r = alloc_rejection (rr_arity);
652  int adjust = first_arg != NULL_TREE;
653  r->u.arity.expected = expected - adjust;
654  r->u.arity.actual = actual - adjust;
655  return r;
656}
657
658static struct rejection_reason *
659arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
660{
661  struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
662  int adjust = first_arg != NULL_TREE;
663  r->u.conversion.n_arg = n_arg - adjust;
664  r->u.conversion.from = from;
665  r->u.conversion.to_type = to;
666  return r;
667}
668
669static struct rejection_reason *
670bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
671{
672  struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
673  int adjust = first_arg != NULL_TREE;
674  r->u.bad_conversion.n_arg = n_arg - adjust;
675  r->u.bad_conversion.from = from;
676  r->u.bad_conversion.to_type = to;
677  return r;
678}
679
680static struct rejection_reason *
681explicit_conversion_rejection (tree from, tree to)
682{
683  struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
684  r->u.conversion.n_arg = 0;
685  r->u.conversion.from = from;
686  r->u.conversion.to_type = to;
687  return r;
688}
689
690static struct rejection_reason *
691template_conversion_rejection (tree from, tree to)
692{
693  struct rejection_reason *r = alloc_rejection (rr_template_conversion);
694  r->u.conversion.n_arg = 0;
695  r->u.conversion.from = from;
696  r->u.conversion.to_type = to;
697  return r;
698}
699
700static struct rejection_reason *
701template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
702				const tree *args, unsigned int nargs,
703				tree return_type, unification_kind_t strict,
704				int flags)
705{
706  size_t args_n_bytes = sizeof (*args) * nargs;
707  tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
708  struct rejection_reason *r = alloc_rejection (rr_template_unification);
709  r->u.template_unification.tmpl = tmpl;
710  r->u.template_unification.explicit_targs = explicit_targs;
711  r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
712  /* Copy args to our own storage.  */
713  memcpy (args1, args, args_n_bytes);
714  r->u.template_unification.args = args1;
715  r->u.template_unification.nargs = nargs;
716  r->u.template_unification.return_type = return_type;
717  r->u.template_unification.strict = strict;
718  r->u.template_unification.flags = flags;
719  return r;
720}
721
722static struct rejection_reason *
723template_unification_error_rejection (void)
724{
725  return alloc_rejection (rr_template_unification);
726}
727
728static struct rejection_reason *
729invalid_copy_with_fn_template_rejection (void)
730{
731  struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
732  return r;
733}
734
735/* Dynamically allocate a conversion.  */
736
737static conversion *
738alloc_conversion (conversion_kind kind)
739{
740  conversion *c;
741  c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
742  c->kind = kind;
743  return c;
744}
745
746#ifdef ENABLE_CHECKING
747
748/* Make sure that all memory on the conversion obstack has been
749   freed.  */
750
751void
752validate_conversion_obstack (void)
753{
754  if (conversion_obstack_initialized)
755    gcc_assert ((obstack_next_free (&conversion_obstack)
756		 == obstack_base (&conversion_obstack)));
757}
758
759#endif /* ENABLE_CHECKING */
760
761/* Dynamically allocate an array of N conversions.  */
762
763static conversion **
764alloc_conversions (size_t n)
765{
766  return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
767}
768
769static conversion *
770build_conv (conversion_kind code, tree type, conversion *from)
771{
772  conversion *t;
773  conversion_rank rank = CONVERSION_RANK (from);
774
775  /* Note that the caller is responsible for filling in t->cand for
776     user-defined conversions.  */
777  t = alloc_conversion (code);
778  t->type = type;
779  t->u.next = from;
780
781  switch (code)
782    {
783    case ck_ptr:
784    case ck_pmem:
785    case ck_base:
786    case ck_std:
787      if (rank < cr_std)
788	rank = cr_std;
789      break;
790
791    case ck_qual:
792      if (rank < cr_exact)
793	rank = cr_exact;
794      break;
795
796    default:
797      break;
798    }
799  t->rank = rank;
800  t->user_conv_p = (code == ck_user || from->user_conv_p);
801  t->bad_p = from->bad_p;
802  t->base_p = false;
803  return t;
804}
805
806/* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
807   specialization of std::initializer_list<T>, if such a conversion is
808   possible.  */
809
810static conversion *
811build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
812{
813  tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
814  unsigned len = CONSTRUCTOR_NELTS (ctor);
815  conversion **subconvs = alloc_conversions (len);
816  conversion *t;
817  unsigned i;
818  tree val;
819
820  /* Within a list-initialization we can have more user-defined
821     conversions.  */
822  flags &= ~LOOKUP_NO_CONVERSION;
823  /* But no narrowing conversions.  */
824  flags |= LOOKUP_NO_NARROWING;
825
826  /* Can't make an array of these types.  */
827  if (TREE_CODE (elttype) == REFERENCE_TYPE
828      || TREE_CODE (elttype) == FUNCTION_TYPE
829      || VOID_TYPE_P (elttype))
830    return NULL;
831
832  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
833    {
834      conversion *sub
835	= implicit_conversion (elttype, TREE_TYPE (val), val,
836			       false, flags, complain);
837      if (sub == NULL)
838	return NULL;
839
840      subconvs[i] = sub;
841    }
842
843  t = alloc_conversion (ck_list);
844  t->type = type;
845  t->u.list = subconvs;
846  t->rank = cr_exact;
847
848  for (i = 0; i < len; ++i)
849    {
850      conversion *sub = subconvs[i];
851      if (sub->rank > t->rank)
852	t->rank = sub->rank;
853      if (sub->user_conv_p)
854	t->user_conv_p = true;
855      if (sub->bad_p)
856	t->bad_p = true;
857    }
858
859  return t;
860}
861
862/* Return the next conversion of the conversion chain (if applicable),
863   or NULL otherwise.  Please use this function instead of directly
864   accessing fields of struct conversion.  */
865
866static conversion *
867next_conversion (conversion *conv)
868{
869  if (conv == NULL
870      || conv->kind == ck_identity
871      || conv->kind == ck_ambig
872      || conv->kind == ck_list)
873    return NULL;
874  return conv->u.next;
875}
876
877/* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
878   is a valid aggregate initializer for array type ATYPE.  */
879
880static bool
881can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
882{
883  unsigned i;
884  tree elttype = TREE_TYPE (atype);
885  for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
886    {
887      tree val = CONSTRUCTOR_ELT (ctor, i)->value;
888      bool ok;
889      if (TREE_CODE (elttype) == ARRAY_TYPE
890	  && TREE_CODE (val) == CONSTRUCTOR)
891	ok = can_convert_array (elttype, val, flags, complain);
892      else
893	ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
894			      complain);
895      if (!ok)
896	return false;
897    }
898  return true;
899}
900
901/* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
902   aggregate class, if such a conversion is possible.  */
903
904static conversion *
905build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
906{
907  unsigned HOST_WIDE_INT i = 0;
908  conversion *c;
909  tree field = next_initializable_field (TYPE_FIELDS (type));
910  tree empty_ctor = NULL_TREE;
911
912  /* We already called reshape_init in implicit_conversion.  */
913
914  /* The conversions within the init-list aren't affected by the enclosing
915     context; they're always simple copy-initialization.  */
916  flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
917
918  for (; field; field = next_initializable_field (DECL_CHAIN (field)))
919    {
920      tree ftype = TREE_TYPE (field);
921      tree val;
922      bool ok;
923
924      if (i < CONSTRUCTOR_NELTS (ctor))
925	val = CONSTRUCTOR_ELT (ctor, i)->value;
926      else if (DECL_INITIAL (field))
927	val = get_nsdmi (field, /*ctor*/false);
928      else if (TREE_CODE (ftype) == REFERENCE_TYPE)
929	/* Value-initialization of reference is ill-formed.  */
930	return NULL;
931      else
932	{
933	  if (empty_ctor == NULL_TREE)
934	    empty_ctor = build_constructor (init_list_type_node, NULL);
935	  val = empty_ctor;
936	}
937      ++i;
938
939      if (TREE_CODE (ftype) == ARRAY_TYPE
940	  && TREE_CODE (val) == CONSTRUCTOR)
941	ok = can_convert_array (ftype, val, flags, complain);
942      else
943	ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
944			      complain);
945
946      if (!ok)
947	return NULL;
948
949      if (TREE_CODE (type) == UNION_TYPE)
950	break;
951    }
952
953  if (i < CONSTRUCTOR_NELTS (ctor))
954    return NULL;
955
956  c = alloc_conversion (ck_aggr);
957  c->type = type;
958  c->rank = cr_exact;
959  c->user_conv_p = true;
960  c->check_narrowing = true;
961  c->u.next = NULL;
962  return c;
963}
964
965/* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
966   array type, if such a conversion is possible.  */
967
968static conversion *
969build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
970{
971  conversion *c;
972  unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
973  tree elttype = TREE_TYPE (type);
974  unsigned i;
975  tree val;
976  bool bad = false;
977  bool user = false;
978  enum conversion_rank rank = cr_exact;
979
980  /* We might need to propagate the size from the element to the array.  */
981  complete_type (type);
982
983  if (TYPE_DOMAIN (type)
984      && !variably_modified_type_p (TYPE_DOMAIN (type), NULL_TREE))
985    {
986      unsigned HOST_WIDE_INT alen = tree_to_uhwi (array_type_nelts_top (type));
987      if (alen < len)
988	return NULL;
989    }
990
991  flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
992
993  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
994    {
995      conversion *sub
996	= implicit_conversion (elttype, TREE_TYPE (val), val,
997			       false, flags, complain);
998      if (sub == NULL)
999	return NULL;
1000
1001      if (sub->rank > rank)
1002	rank = sub->rank;
1003      if (sub->user_conv_p)
1004	user = true;
1005      if (sub->bad_p)
1006	bad = true;
1007    }
1008
1009  c = alloc_conversion (ck_aggr);
1010  c->type = type;
1011  c->rank = rank;
1012  c->user_conv_p = user;
1013  c->bad_p = bad;
1014  c->u.next = NULL;
1015  return c;
1016}
1017
1018/* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
1019   complex type, if such a conversion is possible.  */
1020
1021static conversion *
1022build_complex_conv (tree type, tree ctor, int flags,
1023		    tsubst_flags_t complain)
1024{
1025  conversion *c;
1026  unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
1027  tree elttype = TREE_TYPE (type);
1028  unsigned i;
1029  tree val;
1030  bool bad = false;
1031  bool user = false;
1032  enum conversion_rank rank = cr_exact;
1033
1034  if (len != 2)
1035    return NULL;
1036
1037  flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
1038
1039  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
1040    {
1041      conversion *sub
1042	= implicit_conversion (elttype, TREE_TYPE (val), val,
1043			       false, flags, complain);
1044      if (sub == NULL)
1045	return NULL;
1046
1047      if (sub->rank > rank)
1048	rank = sub->rank;
1049      if (sub->user_conv_p)
1050	user = true;
1051      if (sub->bad_p)
1052	bad = true;
1053    }
1054
1055  c = alloc_conversion (ck_aggr);
1056  c->type = type;
1057  c->rank = rank;
1058  c->user_conv_p = user;
1059  c->bad_p = bad;
1060  c->u.next = NULL;
1061  return c;
1062}
1063
1064/* Build a representation of the identity conversion from EXPR to
1065   itself.  The TYPE should match the type of EXPR, if EXPR is non-NULL.  */
1066
1067static conversion *
1068build_identity_conv (tree type, tree expr)
1069{
1070  conversion *c;
1071
1072  c = alloc_conversion (ck_identity);
1073  c->type = type;
1074  c->u.expr = expr;
1075
1076  return c;
1077}
1078
1079/* Converting from EXPR to TYPE was ambiguous in the sense that there
1080   were multiple user-defined conversions to accomplish the job.
1081   Build a conversion that indicates that ambiguity.  */
1082
1083static conversion *
1084build_ambiguous_conv (tree type, tree expr)
1085{
1086  conversion *c;
1087
1088  c = alloc_conversion (ck_ambig);
1089  c->type = type;
1090  c->u.expr = expr;
1091
1092  return c;
1093}
1094
1095tree
1096strip_top_quals (tree t)
1097{
1098  if (TREE_CODE (t) == ARRAY_TYPE)
1099    return t;
1100  return cp_build_qualified_type (t, 0);
1101}
1102
1103/* Returns the standard conversion path (see [conv]) from type FROM to type
1104   TO, if any.  For proper handling of null pointer constants, you must
1105   also pass the expression EXPR to convert from.  If C_CAST_P is true,
1106   this conversion is coming from a C-style cast.  */
1107
1108static conversion *
1109standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1110		     int flags, tsubst_flags_t complain)
1111{
1112  enum tree_code fcode, tcode;
1113  conversion *conv;
1114  bool fromref = false;
1115  tree qualified_to;
1116
1117  to = non_reference (to);
1118  if (TREE_CODE (from) == REFERENCE_TYPE)
1119    {
1120      fromref = true;
1121      from = TREE_TYPE (from);
1122    }
1123  qualified_to = to;
1124  to = strip_top_quals (to);
1125  from = strip_top_quals (from);
1126
1127  if (expr && type_unknown_p (expr))
1128    {
1129      if (TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1130	{
1131	  tsubst_flags_t tflags = tf_conv;
1132	  expr = instantiate_type (to, expr, tflags);
1133	  if (expr == error_mark_node)
1134	    return NULL;
1135	  from = TREE_TYPE (expr);
1136	}
1137      else if (TREE_CODE (to) == BOOLEAN_TYPE)
1138	{
1139	  /* Necessary for eg, TEMPLATE_ID_EXPRs (c++/50961).  */
1140	  expr = resolve_nondeduced_context (expr, complain);
1141	  from = TREE_TYPE (expr);
1142	}
1143    }
1144
1145  fcode = TREE_CODE (from);
1146  tcode = TREE_CODE (to);
1147
1148  conv = build_identity_conv (from, expr);
1149  if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1150    {
1151      from = type_decays_to (from);
1152      fcode = TREE_CODE (from);
1153      conv = build_conv (ck_lvalue, from, conv);
1154    }
1155  else if (fromref || (expr && lvalue_p (expr)))
1156    {
1157      if (expr)
1158	{
1159	  tree bitfield_type;
1160	  bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1161	  if (bitfield_type)
1162	    {
1163	      from = strip_top_quals (bitfield_type);
1164	      fcode = TREE_CODE (from);
1165	    }
1166	}
1167      conv = build_conv (ck_rvalue, from, conv);
1168      if (flags & LOOKUP_PREFER_RVALUE)
1169	conv->rvaluedness_matches_p = true;
1170    }
1171
1172   /* Allow conversion between `__complex__' data types.  */
1173  if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1174    {
1175      /* The standard conversion sequence to convert FROM to TO is
1176	 the standard conversion sequence to perform componentwise
1177	 conversion.  */
1178      conversion *part_conv = standard_conversion
1179	(TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags,
1180	 complain);
1181
1182      if (part_conv)
1183	{
1184	  conv = build_conv (part_conv->kind, to, conv);
1185	  conv->rank = part_conv->rank;
1186	}
1187      else
1188	conv = NULL;
1189
1190      return conv;
1191    }
1192
1193  if (same_type_p (from, to))
1194    {
1195      if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1196	conv->type = qualified_to;
1197      return conv;
1198    }
1199
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))
1211    {
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;
1216    }
1217  else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1218    {
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;
1223    }
1224  else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1225	   || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1226    {
1227      tree to_pointee;
1228      tree from_pointee;
1229
1230      if (tcode == POINTER_TYPE
1231	  && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1232							TREE_TYPE (to)))
1233	;
1234      else if (VOID_TYPE_P (TREE_TYPE (to))
1235	       && !TYPE_PTRDATAMEM_P (from)
1236	       && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1237	{
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);
1244	}
1245      else if (TYPE_PTRDATAMEM_P (from))
1246	{
1247	  tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1248	  tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1249
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))))
1254	    {
1255	      from = build_ptrmem_type (tbase,
1256					TYPE_PTRMEM_POINTED_TO_TYPE (from));
1257	      conv = build_conv (ck_pmem, from, conv);
1258	    }
1259	  else if (!same_type_p (fbase, tbase))
1260	    return NULL;
1261	}
1262      else if (CLASS_TYPE_P (TREE_TYPE (from))
1263	       && CLASS_TYPE_P (TREE_TYPE (to))
1264	       /* [conv.ptr]
1265
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)))
1276	{
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;
1283	}
1284
1285      if (tcode == POINTER_TYPE)
1286	{
1287	  to_pointee = TREE_TYPE (to);
1288	  from_pointee = TREE_TYPE (from);
1289	}
1290      else
1291	{
1292	  to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1293	  from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1294	}
1295
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))
1314	{
1315	  conv = build_conv (ck_ptr, to, conv);
1316	  conv->bad_p = true;
1317	}
1318      else
1319	return NULL;
1320
1321      from = to;
1322    }
1323  else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1324    {
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);
1329
1330      if (!DERIVED_FROM_P (fbase, tbase)
1331	  || !same_type_p (static_fn_type (fromfn),
1332			   static_fn_type (tofn)))
1333	return NULL;
1334
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;
1342    }
1343  else if (tcode == BOOLEAN_TYPE)
1344    {
1345      /* [conv.bool]
1346
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))
1356	{
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;
1367	}
1368
1369      return NULL;
1370    }
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))
1375    {
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);
1381
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;
1386    }
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))
1392    {
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);
1401    }
1402  else
1403    return NULL;
1404
1405  if (flags & LOOKUP_NO_NARROWING)
1406    conv->check_narrowing = true;
1407
1408  return conv;
1409}
1410
1411/* Returns nonzero if T1 is reference-related to T2.  */
1412
1413bool
1414reference_related_p (tree t1, tree t2)
1415{
1416  if (t1 == error_mark_node || t2 == error_mark_node)
1417    return false;
1418
1419  t1 = TYPE_MAIN_VARIANT (t1);
1420  t2 = TYPE_MAIN_VARIANT (t2);
1421
1422  /* [dcl.init.ref]
1423
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)));
1430}
1431
1432/* Returns nonzero if T1 is reference-compatible with T2.  */
1433
1434static bool
1435reference_compatible_p (tree t1, tree t2)
1436{
1437  /* [dcl.init.ref]
1438
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));
1444}
1445
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.  */
1449
1450static conversion *
1451direct_reference_binding (tree type, conversion *conv)
1452{
1453  tree t;
1454
1455  gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1456  gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1457
1458  t = TREE_TYPE (type);
1459
1460  /* [over.ics.rank]
1461
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.
1468
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))
1477    {
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;
1484    }
1485  return build_conv (ck_ref_bind, type, conv);
1486}
1487
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.  */
1494
1495static conversion *
1496reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1497		   tsubst_flags_t complain)
1498{
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;
1507
1508  if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1509    {
1510      expr = instantiate_type (to, expr, tf_none);
1511      if (expr == error_mark_node)
1512	return NULL;
1513      from = TREE_TYPE (expr);
1514    }
1515
1516  if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1517    {
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)
1523	{
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))
1529	    {
1530	      expr = elt;
1531	      from = etype;
1532	      goto skip;
1533	    }
1534	}
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:;
1542    }
1543
1544  if (TREE_CODE (from) == REFERENCE_TYPE)
1545    {
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;
1552    }
1553  else if (expr)
1554    {
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;
1559    }
1560  else
1561    gl_kind = clk_none;
1562  is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1563
1564  tfrom = from;
1565  if ((gl_kind & clk_bitfield) != 0)
1566    tfrom = unlowered_expr_type (expr);
1567
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);
1578
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))))
1589    {
1590      /* [dcl.init.ref]
1591
1592	 If the initializer expression
1593
1594	 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1595	    is reference-compatible with "cv2 T2,"
1596
1597	 the reference is bound directly to the initializer expression
1598	 lvalue.
1599
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.  */
1605
1606      conv = build_identity_conv (tfrom, expr);
1607      conv = direct_reference_binding (rto, conv);
1608
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);
1620
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.)
1628
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;
1635
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;
1642
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;
1649
1650      if (!compatible_p)
1651	conv->bad_p = true;
1652
1653      return conv;
1654    }
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))
1661    {
1662      /* [dcl.init.ref]
1663
1664	 If the initializer expression
1665
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_).
1672
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;
1679    }
1680
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;
1685
1686  /* [over.ics.rank]
1687
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.  */
1696
1697  /* [dcl.init.ref]
1698
1699     Otherwise, the reference shall be an lvalue reference to a
1700     non-volatile const type, or the reference shall be an rvalue
1701     reference.
1702
1703     We try below to treat this as a bad conversion to improve diagnostics,
1704     but if TO is an incomplete class, we need to reject this conversion
1705     now to avoid unnecessary instantiation.  */
1706  if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto)
1707      && !COMPLETE_TYPE_P (to))
1708    return NULL;
1709
1710  /* We're generating a temporary now, but don't bind any more in the
1711     conversion (specifically, don't slice the temporary returned by a
1712     conversion operator).  */
1713  flags |= LOOKUP_NO_TEMP_BIND;
1714
1715  /* Core issue 899: When [copy-]initializing a temporary to be bound
1716     to the first parameter of a copy constructor (12.8) called with
1717     a single argument in the context of direct-initialization,
1718     explicit conversion functions are also considered.
1719
1720     So don't set LOOKUP_ONLYCONVERTING in that case.  */
1721  if (!(flags & LOOKUP_COPY_PARM))
1722    flags |= LOOKUP_ONLYCONVERTING;
1723
1724  if (!conv)
1725    conv = implicit_conversion (to, from, expr, c_cast_p,
1726				flags, complain);
1727  if (!conv)
1728    return NULL;
1729
1730  if (conv->user_conv_p)
1731    {
1732      /* If initializing the temporary used a conversion function,
1733	 recalculate the second conversion sequence.  */
1734      for (conversion *t = conv; t; t = next_conversion (t))
1735	if (t->kind == ck_user
1736	    && DECL_CONV_FN_P (t->cand->fn))
1737	  {
1738	    tree ftype = TREE_TYPE (TREE_TYPE (t->cand->fn));
1739	    int sflags = (flags|LOOKUP_NO_CONVERSION)&~LOOKUP_NO_TEMP_BIND;
1740	    conversion *new_second
1741	      = reference_binding (rto, ftype, NULL_TREE, c_cast_p,
1742				   sflags, complain);
1743	    if (!new_second)
1744	      return NULL;
1745	    return merge_conversion_sequences (t, new_second);
1746	  }
1747    }
1748
1749  conv = build_conv (ck_ref_bind, rto, conv);
1750  /* This reference binding, unlike those above, requires the
1751     creation of a temporary.  */
1752  conv->need_temporary_p = true;
1753  conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1754
1755  /* [dcl.init.ref]
1756
1757     Otherwise, the reference shall be an lvalue reference to a
1758     non-volatile const type, or the reference shall be an rvalue
1759     reference.  */
1760  if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1761    conv->bad_p = true;
1762
1763  /* [dcl.init.ref]
1764
1765     Otherwise, a temporary of type "cv1 T1" is created and
1766     initialized from the initializer expression using the rules for a
1767     non-reference copy initialization.  If T1 is reference-related to
1768     T2, cv1 must be the same cv-qualification as, or greater
1769     cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1770  if (related_p && !at_least_as_qualified_p (to, from))
1771    conv->bad_p = true;
1772
1773  return conv;
1774}
1775
1776/* Returns the implicit conversion sequence (see [over.ics]) from type
1777   FROM to type TO.  The optional expression EXPR may affect the
1778   conversion.  FLAGS are the usual overloading flags.  If C_CAST_P is
1779   true, this conversion is coming from a C-style cast.  */
1780
1781static conversion *
1782implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1783		     int flags, tsubst_flags_t complain)
1784{
1785  conversion *conv;
1786
1787  if (from == error_mark_node || to == error_mark_node
1788      || expr == error_mark_node)
1789    return NULL;
1790
1791  /* Other flags only apply to the primary function in overload
1792     resolution, or after we've chosen one.  */
1793  flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1794	    |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1795	    |LOOKUP_NO_NARROWING|LOOKUP_PROTECT|LOOKUP_NO_NON_INTEGRAL);
1796
1797  /* FIXME: actually we don't want warnings either, but we can't just
1798     have 'complain &= ~(tf_warning|tf_error)' because it would cause
1799     the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1800     We really ought not to issue that warning until we've committed
1801     to that conversion.  */
1802  complain &= ~tf_error;
1803
1804  /* Call reshape_init early to remove redundant braces.  */
1805  if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr)
1806      && CLASS_TYPE_P (to)
1807      && COMPLETE_TYPE_P (complete_type (to))
1808      && !CLASSTYPE_NON_AGGREGATE (to))
1809    {
1810      expr = reshape_init (to, expr, complain);
1811      if (expr == error_mark_node)
1812	return NULL;
1813      from = TREE_TYPE (expr);
1814    }
1815
1816  if (TREE_CODE (to) == REFERENCE_TYPE)
1817    conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1818  else
1819    conv = standard_conversion (to, from, expr, c_cast_p, flags, complain);
1820
1821  if (conv)
1822    return conv;
1823
1824  if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1825    {
1826      if (is_std_init_list (to))
1827	return build_list_conv (to, expr, flags, complain);
1828
1829      /* As an extension, allow list-initialization of _Complex.  */
1830      if (TREE_CODE (to) == COMPLEX_TYPE)
1831	{
1832	  conv = build_complex_conv (to, expr, flags, complain);
1833	  if (conv)
1834	    return conv;
1835	}
1836
1837      /* Allow conversion from an initializer-list with one element to a
1838	 scalar type.  */
1839      if (SCALAR_TYPE_P (to))
1840	{
1841	  int nelts = CONSTRUCTOR_NELTS (expr);
1842	  tree elt;
1843
1844	  if (nelts == 0)
1845	    elt = build_value_init (to, tf_none);
1846	  else if (nelts == 1)
1847	    elt = CONSTRUCTOR_ELT (expr, 0)->value;
1848	  else
1849	    elt = error_mark_node;
1850
1851	  conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1852				      c_cast_p, flags, complain);
1853	  if (conv)
1854	    {
1855	      conv->check_narrowing = true;
1856	      if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1857		/* Too many levels of braces, i.e. '{{1}}'.  */
1858		conv->bad_p = true;
1859	      return conv;
1860	    }
1861	}
1862      else if (TREE_CODE (to) == ARRAY_TYPE)
1863	return build_array_conv (to, expr, flags, complain);
1864    }
1865
1866  if (expr != NULL_TREE
1867      && (MAYBE_CLASS_TYPE_P (from)
1868	  || MAYBE_CLASS_TYPE_P (to))
1869      && (flags & LOOKUP_NO_CONVERSION) == 0)
1870    {
1871      struct z_candidate *cand;
1872
1873      if (CLASS_TYPE_P (to)
1874	  && BRACE_ENCLOSED_INITIALIZER_P (expr)
1875	  && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1876	return build_aggr_conv (to, expr, flags, complain);
1877
1878      cand = build_user_type_conversion_1 (to, expr, flags, complain);
1879      if (cand)
1880	conv = cand->second_conv;
1881
1882      /* We used to try to bind a reference to a temporary here, but that
1883	 is now handled after the recursive call to this function at the end
1884	 of reference_binding.  */
1885      return conv;
1886    }
1887
1888  return NULL;
1889}
1890
1891/* Add a new entry to the list of candidates.  Used by the add_*_candidate
1892   functions.  ARGS will not be changed until a single candidate is
1893   selected.  */
1894
1895static struct z_candidate *
1896add_candidate (struct z_candidate **candidates,
1897	       tree fn, tree first_arg, const vec<tree, va_gc> *args,
1898	       size_t num_convs, conversion **convs,
1899	       tree access_path, tree conversion_path,
1900	       int viable, struct rejection_reason *reason,
1901	       int flags)
1902{
1903  struct z_candidate *cand = (struct z_candidate *)
1904    conversion_obstack_alloc (sizeof (struct z_candidate));
1905
1906  cand->fn = fn;
1907  cand->first_arg = first_arg;
1908  cand->args = args;
1909  cand->convs = convs;
1910  cand->num_convs = num_convs;
1911  cand->access_path = access_path;
1912  cand->conversion_path = conversion_path;
1913  cand->viable = viable;
1914  cand->reason = reason;
1915  cand->next = *candidates;
1916  cand->flags = flags;
1917  *candidates = cand;
1918
1919  return cand;
1920}
1921
1922/* Return the number of remaining arguments in the parameter list
1923   beginning with ARG.  */
1924
1925int
1926remaining_arguments (tree arg)
1927{
1928  int n;
1929
1930  for (n = 0; arg != NULL_TREE && arg != void_list_node;
1931       arg = TREE_CHAIN (arg))
1932    n++;
1933
1934  return n;
1935}
1936
1937/* Create an overload candidate for the function or method FN called
1938   with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1939   FLAGS is passed on to implicit_conversion.
1940
1941   This does not change ARGS.
1942
1943   CTYPE, if non-NULL, is the type we want to pretend this function
1944   comes from for purposes of overload resolution.  */
1945
1946static struct z_candidate *
1947add_function_candidate (struct z_candidate **candidates,
1948			tree fn, tree ctype, tree first_arg,
1949			const vec<tree, va_gc> *args, tree access_path,
1950			tree conversion_path, int flags,
1951			tsubst_flags_t complain)
1952{
1953  tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1954  int i, len;
1955  conversion **convs;
1956  tree parmnode;
1957  tree orig_first_arg = first_arg;
1958  int skip;
1959  int viable = 1;
1960  struct rejection_reason *reason = NULL;
1961
1962  /* At this point we should not see any functions which haven't been
1963     explicitly declared, except for friend functions which will have
1964     been found using argument dependent lookup.  */
1965  gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1966
1967  /* The `this', `in_chrg' and VTT arguments to constructors are not
1968     considered in overload resolution.  */
1969  if (DECL_CONSTRUCTOR_P (fn))
1970    {
1971      parmlist = skip_artificial_parms_for (fn, parmlist);
1972      skip = num_artificial_parms_for (fn);
1973      if (skip > 0 && first_arg != NULL_TREE)
1974	{
1975	  --skip;
1976	  first_arg = NULL_TREE;
1977	}
1978    }
1979  else
1980    skip = 0;
1981
1982  len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1983  convs = alloc_conversions (len);
1984
1985  /* 13.3.2 - Viable functions [over.match.viable]
1986     First, to be a viable function, a candidate function shall have enough
1987     parameters to agree in number with the arguments in the list.
1988
1989     We need to check this first; otherwise, checking the ICSes might cause
1990     us to produce an ill-formed template instantiation.  */
1991
1992  parmnode = parmlist;
1993  for (i = 0; i < len; ++i)
1994    {
1995      if (parmnode == NULL_TREE || parmnode == void_list_node)
1996	break;
1997      parmnode = TREE_CHAIN (parmnode);
1998    }
1999
2000  if ((i < len && parmnode)
2001      || !sufficient_parms_p (parmnode))
2002    {
2003      int remaining = remaining_arguments (parmnode);
2004      viable = 0;
2005      reason = arity_rejection (first_arg, i + remaining, len);
2006    }
2007  /* When looking for a function from a subobject from an implicit
2008     copy/move constructor/operator=, don't consider anything that takes (a
2009     reference to) an unrelated type.  See c++/44909 and core 1092.  */
2010  else if (parmlist && (flags & LOOKUP_DEFAULTED))
2011    {
2012      if (DECL_CONSTRUCTOR_P (fn))
2013	i = 1;
2014      else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
2015	       && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
2016	i = 2;
2017      else
2018	i = 0;
2019      if (i && len == i)
2020	{
2021	  parmnode = chain_index (i-1, parmlist);
2022	  if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
2023				    ctype))
2024	    viable = 0;
2025	}
2026
2027      /* This only applies at the top level.  */
2028      flags &= ~LOOKUP_DEFAULTED;
2029    }
2030
2031  if (! viable)
2032    goto out;
2033
2034  /* Second, for F to be a viable function, there shall exist for each
2035     argument an implicit conversion sequence that converts that argument
2036     to the corresponding parameter of F.  */
2037
2038  parmnode = parmlist;
2039
2040  for (i = 0; i < len; ++i)
2041    {
2042      tree argtype, to_type;
2043      tree arg;
2044      conversion *t;
2045      int is_this;
2046
2047      if (parmnode == void_list_node)
2048	break;
2049
2050      if (i == 0 && first_arg != NULL_TREE)
2051	arg = first_arg;
2052      else
2053	arg = CONST_CAST_TREE (
2054		(*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
2055      argtype = lvalue_type (arg);
2056
2057      is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2058		 && ! DECL_CONSTRUCTOR_P (fn));
2059
2060      if (parmnode)
2061	{
2062	  tree parmtype = TREE_VALUE (parmnode);
2063	  int lflags = flags;
2064
2065	  parmnode = TREE_CHAIN (parmnode);
2066
2067	  /* The type of the implicit object parameter ('this') for
2068	     overload resolution is not always the same as for the
2069	     function itself; conversion functions are considered to
2070	     be members of the class being converted, and functions
2071	     introduced by a using-declaration are considered to be
2072	     members of the class that uses them.
2073
2074	     Since build_over_call ignores the ICS for the `this'
2075	     parameter, we can just change the parm type.  */
2076	  if (ctype && is_this)
2077	    {
2078	      parmtype = cp_build_qualified_type
2079		(ctype, cp_type_quals (TREE_TYPE (parmtype)));
2080	      if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn)))
2081		{
2082		  /* If the function has a ref-qualifier, the implicit
2083		     object parameter has reference type.  */
2084		  bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
2085		  parmtype = cp_build_reference_type (parmtype, rv);
2086		  /* The special handling of 'this' conversions in compare_ics
2087		     does not apply if there is a ref-qualifier.  */
2088		  is_this = false;
2089		}
2090	      else
2091		{
2092		  parmtype = build_pointer_type (parmtype);
2093		  arg = build_this (arg);
2094		  argtype = lvalue_type (arg);
2095		}
2096	    }
2097
2098	  /* Core issue 899: When [copy-]initializing a temporary to be bound
2099	     to the first parameter of a copy constructor (12.8) called with
2100	     a single argument in the context of direct-initialization,
2101	     explicit conversion functions are also considered.
2102
2103	     So set LOOKUP_COPY_PARM to let reference_binding know that
2104	     it's being called in that context.  We generalize the above
2105	     to handle move constructors and template constructors as well;
2106	     the standardese should soon be updated similarly.  */
2107	  if (ctype && i == 0 && (len-skip == 1)
2108	      && DECL_CONSTRUCTOR_P (fn)
2109	      && parmtype != error_mark_node
2110	      && (same_type_ignoring_top_level_qualifiers_p
2111		  (non_reference (parmtype), ctype)))
2112	    {
2113	      if (!(flags & LOOKUP_ONLYCONVERTING))
2114		lflags |= LOOKUP_COPY_PARM;
2115	      /* We allow user-defined conversions within init-lists, but
2116		 don't list-initialize the copy parm, as that would mean
2117		 using two levels of braces for the same type.  */
2118	      if ((flags & LOOKUP_LIST_INIT_CTOR)
2119		  && BRACE_ENCLOSED_INITIALIZER_P (arg))
2120		lflags |= LOOKUP_NO_CONVERSION;
2121	    }
2122	  else
2123	    lflags |= LOOKUP_ONLYCONVERTING;
2124
2125	  t = implicit_conversion (parmtype, argtype, arg,
2126				   /*c_cast_p=*/false, lflags, complain);
2127	  to_type = parmtype;
2128	}
2129      else
2130	{
2131	  t = build_identity_conv (argtype, arg);
2132	  t->ellipsis_p = true;
2133	  to_type = argtype;
2134	}
2135
2136      if (t && is_this)
2137	t->this_p = true;
2138
2139      convs[i] = t;
2140      if (! t)
2141	{
2142	  viable = 0;
2143	  reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2144	  break;
2145	}
2146
2147      if (t->bad_p)
2148	{
2149	  viable = -1;
2150	  reason = bad_arg_conversion_rejection (first_arg, i, arg, to_type);
2151	}
2152    }
2153
2154 out:
2155  return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2156			access_path, conversion_path, viable, reason, flags);
2157}
2158
2159/* Create an overload candidate for the conversion function FN which will
2160   be invoked for expression OBJ, producing a pointer-to-function which
2161   will in turn be called with the argument list FIRST_ARG/ARGLIST,
2162   and add it to CANDIDATES.  This does not change ARGLIST.  FLAGS is
2163   passed on to implicit_conversion.
2164
2165   Actually, we don't really care about FN; we care about the type it
2166   converts to.  There may be multiple conversion functions that will
2167   convert to that type, and we rely on build_user_type_conversion_1 to
2168   choose the best one; so when we create our candidate, we record the type
2169   instead of the function.  */
2170
2171static struct z_candidate *
2172add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2173		    tree first_arg, const vec<tree, va_gc> *arglist,
2174		    tree access_path, tree conversion_path,
2175		    tsubst_flags_t complain)
2176{
2177  tree totype = TREE_TYPE (TREE_TYPE (fn));
2178  int i, len, viable, flags;
2179  tree parmlist, parmnode;
2180  conversion **convs;
2181  struct rejection_reason *reason;
2182
2183  for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2184    parmlist = TREE_TYPE (parmlist);
2185  parmlist = TYPE_ARG_TYPES (parmlist);
2186
2187  len = vec_safe_length (arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2188  convs = alloc_conversions (len);
2189  parmnode = parmlist;
2190  viable = 1;
2191  flags = LOOKUP_IMPLICIT;
2192  reason = NULL;
2193
2194  /* Don't bother looking up the same type twice.  */
2195  if (*candidates && (*candidates)->fn == totype)
2196    return NULL;
2197
2198  for (i = 0; i < len; ++i)
2199    {
2200      tree arg, argtype, convert_type = NULL_TREE;
2201      conversion *t;
2202
2203      if (i == 0)
2204	arg = obj;
2205      else if (i == 1 && first_arg != NULL_TREE)
2206	arg = first_arg;
2207      else
2208	arg = (*arglist)[i - (first_arg != NULL_TREE ? 1 : 0) - 1];
2209      argtype = lvalue_type (arg);
2210
2211      if (i == 0)
2212	{
2213	  t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2214				   flags, complain);
2215	  convert_type = totype;
2216	}
2217      else if (parmnode == void_list_node)
2218	break;
2219      else if (parmnode)
2220	{
2221	  t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2222				   /*c_cast_p=*/false, flags, complain);
2223	  convert_type = TREE_VALUE (parmnode);
2224	}
2225      else
2226	{
2227	  t = build_identity_conv (argtype, arg);
2228	  t->ellipsis_p = true;
2229	  convert_type = argtype;
2230	}
2231
2232      convs[i] = t;
2233      if (! t)
2234	break;
2235
2236      if (t->bad_p)
2237	{
2238	  viable = -1;
2239	  reason = bad_arg_conversion_rejection (NULL_TREE, i, arg, convert_type);
2240	}
2241
2242      if (i == 0)
2243	continue;
2244
2245      if (parmnode)
2246	parmnode = TREE_CHAIN (parmnode);
2247    }
2248
2249  if (i < len
2250      || ! sufficient_parms_p (parmnode))
2251    {
2252      int remaining = remaining_arguments (parmnode);
2253      viable = 0;
2254      reason = arity_rejection (NULL_TREE, i + remaining, len);
2255    }
2256
2257  return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2258			access_path, conversion_path, viable, reason, flags);
2259}
2260
2261static void
2262build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2263			 tree type1, tree type2, tree *args, tree *argtypes,
2264			 int flags, tsubst_flags_t complain)
2265{
2266  conversion *t;
2267  conversion **convs;
2268  size_t num_convs;
2269  int viable = 1, i;
2270  tree types[2];
2271  struct rejection_reason *reason = NULL;
2272
2273  types[0] = type1;
2274  types[1] = type2;
2275
2276  num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
2277  convs = alloc_conversions (num_convs);
2278
2279  /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2280     conversion ops are allowed.  We handle that here by just checking for
2281     boolean_type_node because other operators don't ask for it.  COND_EXPR
2282     also does contextual conversion to bool for the first operand, but we
2283     handle that in build_conditional_expr, and type1 here is operand 2.  */
2284  if (type1 != boolean_type_node)
2285    flags |= LOOKUP_ONLYCONVERTING;
2286
2287  for (i = 0; i < 2; ++i)
2288    {
2289      if (! args[i])
2290	break;
2291
2292      t = implicit_conversion (types[i], argtypes[i], args[i],
2293			       /*c_cast_p=*/false, flags, complain);
2294      if (! t)
2295	{
2296	  viable = 0;
2297	  /* We need something for printing the candidate.  */
2298	  t = build_identity_conv (types[i], NULL_TREE);
2299	  reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2300					     types[i]);
2301	}
2302      else if (t->bad_p)
2303	{
2304	  viable = 0;
2305	  reason = bad_arg_conversion_rejection (NULL_TREE, i, args[i],
2306						 types[i]);
2307	}
2308      convs[i] = t;
2309    }
2310
2311  /* For COND_EXPR we rearranged the arguments; undo that now.  */
2312  if (args[2])
2313    {
2314      convs[2] = convs[1];
2315      convs[1] = convs[0];
2316      t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2317			       /*c_cast_p=*/false, flags,
2318			       complain);
2319      if (t)
2320	convs[0] = t;
2321      else
2322	{
2323	  viable = 0;
2324	  reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2325					     boolean_type_node);
2326	}
2327    }
2328
2329  add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2330		 num_convs, convs,
2331		 /*access_path=*/NULL_TREE,
2332		 /*conversion_path=*/NULL_TREE,
2333		 viable, reason, flags);
2334}
2335
2336static bool
2337is_complete (tree t)
2338{
2339  return COMPLETE_TYPE_P (complete_type (t));
2340}
2341
2342/* Returns nonzero if TYPE is a promoted arithmetic type.  */
2343
2344static bool
2345promoted_arithmetic_type_p (tree type)
2346{
2347  /* [over.built]
2348
2349     In this section, the term promoted integral type is used to refer
2350     to those integral types which are preserved by integral promotion
2351     (including e.g.  int and long but excluding e.g.  char).
2352     Similarly, the term promoted arithmetic type refers to promoted
2353     integral types plus floating types.  */
2354  return ((CP_INTEGRAL_TYPE_P (type)
2355	   && same_type_p (type_promotes_to (type), type))
2356	  || TREE_CODE (type) == REAL_TYPE);
2357}
2358
2359/* Create any builtin operator overload candidates for the operator in
2360   question given the converted operand types TYPE1 and TYPE2.  The other
2361   args are passed through from add_builtin_candidates to
2362   build_builtin_candidate.
2363
2364   TYPE1 and TYPE2 may not be permissible, and we must filter them.
2365   If CODE is requires candidates operands of the same type of the kind
2366   of which TYPE1 and TYPE2 are, we add both candidates
2367   CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
2368
2369static void
2370add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2371		       enum tree_code code2, tree fnname, tree type1,
2372		       tree type2, tree *args, tree *argtypes, int flags,
2373		       tsubst_flags_t complain)
2374{
2375  switch (code)
2376    {
2377    case POSTINCREMENT_EXPR:
2378    case POSTDECREMENT_EXPR:
2379      args[1] = integer_zero_node;
2380      type2 = integer_type_node;
2381      break;
2382    default:
2383      break;
2384    }
2385
2386  switch (code)
2387    {
2388
2389/* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2390     and  VQ  is  either  volatile or empty, there exist candidate operator
2391     functions of the form
2392	     VQ T&   operator++(VQ T&);
2393	     T       operator++(VQ T&, int);
2394   5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2395     type  other than bool, and VQ is either volatile or empty, there exist
2396     candidate operator functions of the form
2397	     VQ T&   operator--(VQ T&);
2398	     T       operator--(VQ T&, int);
2399   6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
2400     complete  object type, and VQ is either volatile or empty, there exist
2401     candidate operator functions of the form
2402	     T*VQ&   operator++(T*VQ&);
2403	     T*VQ&   operator--(T*VQ&);
2404	     T*      operator++(T*VQ&, int);
2405	     T*      operator--(T*VQ&, int);  */
2406
2407    case POSTDECREMENT_EXPR:
2408    case PREDECREMENT_EXPR:
2409      if (TREE_CODE (type1) == BOOLEAN_TYPE)
2410	return;
2411    case POSTINCREMENT_EXPR:
2412    case PREINCREMENT_EXPR:
2413      if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2414	{
2415	  type1 = build_reference_type (type1);
2416	  break;
2417	}
2418      return;
2419
2420/* 7 For every cv-qualified or cv-unqualified object type T, there
2421     exist candidate operator functions of the form
2422
2423	     T&      operator*(T*);
2424
2425   8 For every function type T, there exist candidate operator functions of
2426     the form
2427	     T&      operator*(T*);  */
2428
2429    case INDIRECT_REF:
2430      if (TYPE_PTR_P (type1)
2431	  && (TYPE_PTROB_P (type1)
2432	      || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2433	break;
2434      return;
2435
2436/* 9 For every type T, there exist candidate operator functions of the form
2437	     T*      operator+(T*);
2438
2439   10For  every  promoted arithmetic type T, there exist candidate operator
2440     functions of the form
2441	     T       operator+(T);
2442	     T       operator-(T);  */
2443
2444    case UNARY_PLUS_EXPR: /* unary + */
2445      if (TYPE_PTR_P (type1))
2446	break;
2447    case NEGATE_EXPR:
2448      if (ARITHMETIC_TYPE_P (type1))
2449	break;
2450      return;
2451
2452/* 11For every promoted integral type T,  there  exist  candidate  operator
2453     functions of the form
2454	     T       operator~(T);  */
2455
2456    case BIT_NOT_EXPR:
2457      if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2458	break;
2459      return;
2460
2461/* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2462     is the same type as C2 or is a derived class of C2, T  is  a  complete
2463     object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2464     there exist candidate operator functions of the form
2465	     CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2466     where CV12 is the union of CV1 and CV2.  */
2467
2468    case MEMBER_REF:
2469      if (TYPE_PTR_P (type1) && TYPE_PTRMEM_P (type2))
2470	{
2471	  tree c1 = TREE_TYPE (type1);
2472	  tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2473
2474	  if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2475	      && (TYPE_PTRMEMFUNC_P (type2)
2476		  || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2477	    break;
2478	}
2479      return;
2480
2481/* 13For every pair of promoted arithmetic types L and R, there exist  can-
2482     didate operator functions of the form
2483	     LR      operator*(L, R);
2484	     LR      operator/(L, R);
2485	     LR      operator+(L, R);
2486	     LR      operator-(L, R);
2487	     bool    operator<(L, R);
2488	     bool    operator>(L, R);
2489	     bool    operator<=(L, R);
2490	     bool    operator>=(L, R);
2491	     bool    operator==(L, R);
2492	     bool    operator!=(L, R);
2493     where  LR  is  the  result of the usual arithmetic conversions between
2494     types L and R.
2495
2496   14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
2497     unqualified  complete  object  type and I is a promoted integral type,
2498     there exist candidate operator functions of the form
2499	     T*      operator+(T*, I);
2500	     T&      operator[](T*, I);
2501	     T*      operator-(T*, I);
2502	     T*      operator+(I, T*);
2503	     T&      operator[](I, T*);
2504
2505   15For every T, where T is a pointer to complete object type, there exist
2506     candidate operator functions of the form112)
2507	     ptrdiff_t operator-(T, T);
2508
2509   16For every pointer or enumeration type T, there exist candidate operator
2510     functions of the form
2511	     bool    operator<(T, T);
2512	     bool    operator>(T, T);
2513	     bool    operator<=(T, T);
2514	     bool    operator>=(T, T);
2515	     bool    operator==(T, T);
2516	     bool    operator!=(T, T);
2517
2518   17For every pointer to member type T,  there  exist  candidate  operator
2519     functions of the form
2520	     bool    operator==(T, T);
2521	     bool    operator!=(T, T);  */
2522
2523    case MINUS_EXPR:
2524      if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2525	break;
2526      if (TYPE_PTROB_P (type1)
2527	  && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2528	{
2529	  type2 = ptrdiff_type_node;
2530	  break;
2531	}
2532    case MULT_EXPR:
2533    case TRUNC_DIV_EXPR:
2534      if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2535	break;
2536      return;
2537
2538    case EQ_EXPR:
2539    case NE_EXPR:
2540      if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2541	  || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2542	break;
2543      if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2544	{
2545	  type2 = type1;
2546	  break;
2547	}
2548      if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2549	{
2550	  type1 = type2;
2551	  break;
2552	}
2553      /* Fall through.  */
2554    case LT_EXPR:
2555    case GT_EXPR:
2556    case LE_EXPR:
2557    case GE_EXPR:
2558    case MAX_EXPR:
2559    case MIN_EXPR:
2560      if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2561	break;
2562      if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2563	break;
2564      if (TREE_CODE (type1) == ENUMERAL_TYPE
2565	  && TREE_CODE (type2) == ENUMERAL_TYPE)
2566	break;
2567      if (TYPE_PTR_P (type1)
2568	  && null_ptr_cst_p (args[1]))
2569	{
2570	  type2 = type1;
2571	  break;
2572	}
2573      if (null_ptr_cst_p (args[0])
2574	  && TYPE_PTR_P (type2))
2575	{
2576	  type1 = type2;
2577	  break;
2578	}
2579      return;
2580
2581    case PLUS_EXPR:
2582      if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2583	break;
2584    case ARRAY_REF:
2585      if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2586	{
2587	  type1 = ptrdiff_type_node;
2588	  break;
2589	}
2590      if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2591	{
2592	  type2 = ptrdiff_type_node;
2593	  break;
2594	}
2595      return;
2596
2597/* 18For  every pair of promoted integral types L and R, there exist candi-
2598     date operator functions of the form
2599	     LR      operator%(L, R);
2600	     LR      operator&(L, R);
2601	     LR      operator^(L, R);
2602	     LR      operator|(L, R);
2603	     L       operator<<(L, R);
2604	     L       operator>>(L, R);
2605     where LR is the result of the  usual  arithmetic  conversions  between
2606     types L and R.  */
2607
2608    case TRUNC_MOD_EXPR:
2609    case BIT_AND_EXPR:
2610    case BIT_IOR_EXPR:
2611    case BIT_XOR_EXPR:
2612    case LSHIFT_EXPR:
2613    case RSHIFT_EXPR:
2614      if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2615	break;
2616      return;
2617
2618/* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
2619     type, VQ is either volatile or empty, and R is a  promoted  arithmetic
2620     type, there exist candidate operator functions of the form
2621	     VQ L&   operator=(VQ L&, R);
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
2627   20For  every  pair T, VQ), where T is any type and VQ is either volatile
2628     or empty, there exist candidate operator functions of the form
2629	     T*VQ&   operator=(T*VQ&, T*);
2630
2631   21For every pair T, VQ), where T is a pointer to member type and  VQ  is
2632     either  volatile or empty, there exist candidate operator functions of
2633     the form
2634	     VQ T&   operator=(VQ T&, T);
2635
2636   22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
2637     unqualified  complete object type, VQ is either volatile or empty, and
2638     I is a promoted integral type, there exist  candidate  operator  func-
2639     tions of the form
2640	     T*VQ&   operator+=(T*VQ&, I);
2641	     T*VQ&   operator-=(T*VQ&, I);
2642
2643   23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
2644     type, VQ is either volatile or empty, and R  is  a  promoted  integral
2645     type, there exist candidate operator functions of the form
2646
2647	     VQ L&   operator%=(VQ L&, R);
2648	     VQ L&   operator<<=(VQ L&, R);
2649	     VQ L&   operator>>=(VQ L&, R);
2650	     VQ L&   operator&=(VQ L&, R);
2651	     VQ L&   operator^=(VQ L&, R);
2652	     VQ L&   operator|=(VQ L&, R);  */
2653
2654    case MODIFY_EXPR:
2655      switch (code2)
2656	{
2657	case PLUS_EXPR:
2658	case MINUS_EXPR:
2659	  if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2660	    {
2661	      type2 = ptrdiff_type_node;
2662	      break;
2663	    }
2664	case MULT_EXPR:
2665	case TRUNC_DIV_EXPR:
2666	  if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2667	    break;
2668	  return;
2669
2670	case TRUNC_MOD_EXPR:
2671	case BIT_AND_EXPR:
2672	case BIT_IOR_EXPR:
2673	case BIT_XOR_EXPR:
2674	case LSHIFT_EXPR:
2675	case RSHIFT_EXPR:
2676	  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2677	    break;
2678	  return;
2679
2680	case NOP_EXPR:
2681	  if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2682	    break;
2683	  if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2684	      || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2685	      || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2686	      || ((TYPE_PTRMEMFUNC_P (type1)
2687		   || TYPE_PTR_P (type1))
2688		  && null_ptr_cst_p (args[1])))
2689	    {
2690	      type2 = type1;
2691	      break;
2692	    }
2693	  return;
2694
2695	default:
2696	  gcc_unreachable ();
2697	}
2698      type1 = build_reference_type (type1);
2699      break;
2700
2701    case COND_EXPR:
2702      /* [over.built]
2703
2704	 For every pair of promoted arithmetic types L and R, there
2705	 exist candidate operator functions of the form
2706
2707	 LR operator?(bool, L, R);
2708
2709	 where LR is the result of the usual arithmetic conversions
2710	 between types L and R.
2711
2712	 For every type T, where T is a pointer or pointer-to-member
2713	 type, there exist candidate operator functions of the form T
2714	 operator?(bool, T, T);  */
2715
2716      if (promoted_arithmetic_type_p (type1)
2717	  && promoted_arithmetic_type_p (type2))
2718	/* That's OK.  */
2719	break;
2720
2721      /* Otherwise, the types should be pointers.  */
2722      if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2723	return;
2724
2725      /* We don't check that the two types are the same; the logic
2726	 below will actually create two candidates; one in which both
2727	 parameter types are TYPE1, and one in which both parameter
2728	 types are TYPE2.  */
2729      break;
2730
2731    case REALPART_EXPR:
2732    case IMAGPART_EXPR:
2733      if (ARITHMETIC_TYPE_P (type1))
2734	break;
2735      return;
2736
2737    default:
2738      gcc_unreachable ();
2739    }
2740
2741  /* Make sure we don't create builtin candidates with dependent types.  */
2742  bool u1 = uses_template_parms (type1);
2743  bool u2 = type2 ? uses_template_parms (type2) : false;
2744  if (u1 || u2)
2745    {
2746      /* Try to recover if one of the types is non-dependent.  But if
2747	 there's only one type, there's nothing we can do.  */
2748      if (!type2)
2749	return;
2750      /* And we lose if both are dependent.  */
2751      if (u1 && u2)
2752	return;
2753      /* Or if they have different forms.  */
2754      if (TREE_CODE (type1) != TREE_CODE (type2))
2755	return;
2756
2757      if (u1 && !u2)
2758	type1 = type2;
2759      else if (u2 && !u1)
2760	type2 = type1;
2761    }
2762
2763  /* If we're dealing with two pointer types or two enumeral types,
2764     we need candidates for both of them.  */
2765  if (type2 && !same_type_p (type1, type2)
2766      && TREE_CODE (type1) == TREE_CODE (type2)
2767      && (TREE_CODE (type1) == REFERENCE_TYPE
2768	  || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2769	  || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2770	  || TYPE_PTRMEMFUNC_P (type1)
2771	  || MAYBE_CLASS_TYPE_P (type1)
2772	  || TREE_CODE (type1) == ENUMERAL_TYPE))
2773    {
2774      if (TYPE_PTR_OR_PTRMEM_P (type1))
2775	{
2776	  tree cptype = composite_pointer_type (type1, type2,
2777						error_mark_node,
2778						error_mark_node,
2779						CPO_CONVERSION,
2780						tf_none);
2781	  if (cptype != error_mark_node)
2782	    {
2783	      build_builtin_candidate
2784		(candidates, fnname, cptype, cptype, args, argtypes,
2785		 flags, complain);
2786	      return;
2787	    }
2788	}
2789
2790      build_builtin_candidate
2791	(candidates, fnname, type1, type1, args, argtypes, flags, complain);
2792      build_builtin_candidate
2793	(candidates, fnname, type2, type2, args, argtypes, flags, complain);
2794      return;
2795    }
2796
2797  build_builtin_candidate
2798    (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2799}
2800
2801tree
2802type_decays_to (tree type)
2803{
2804  if (TREE_CODE (type) == ARRAY_TYPE)
2805    return build_pointer_type (TREE_TYPE (type));
2806  if (TREE_CODE (type) == FUNCTION_TYPE)
2807    return build_pointer_type (type);
2808  return type;
2809}
2810
2811/* There are three conditions of builtin candidates:
2812
2813   1) bool-taking candidates.  These are the same regardless of the input.
2814   2) pointer-pair taking candidates.  These are generated for each type
2815      one of the input types converts to.
2816   3) arithmetic candidates.  According to the standard, we should generate
2817      all of these, but I'm trying not to...
2818
2819   Here we generate a superset of the possible candidates for this particular
2820   case.  That is a subset of the full set the standard defines, plus some
2821   other cases which the standard disallows. add_builtin_candidate will
2822   filter out the invalid set.  */
2823
2824static void
2825add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2826			enum tree_code code2, tree fnname, tree *args,
2827			int flags, tsubst_flags_t complain)
2828{
2829  int ref1, i;
2830  int enum_p = 0;
2831  tree type, argtypes[3], t;
2832  /* TYPES[i] is the set of possible builtin-operator parameter types
2833     we will consider for the Ith argument.  */
2834  vec<tree, va_gc> *types[2];
2835  unsigned ix;
2836
2837  for (i = 0; i < 3; ++i)
2838    {
2839      if (args[i])
2840	argtypes[i] = unlowered_expr_type (args[i]);
2841      else
2842	argtypes[i] = NULL_TREE;
2843    }
2844
2845  switch (code)
2846    {
2847/* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2848     and  VQ  is  either  volatile or empty, there exist candidate operator
2849     functions of the form
2850		 VQ T&   operator++(VQ T&);  */
2851
2852    case POSTINCREMENT_EXPR:
2853    case PREINCREMENT_EXPR:
2854    case POSTDECREMENT_EXPR:
2855    case PREDECREMENT_EXPR:
2856    case MODIFY_EXPR:
2857      ref1 = 1;
2858      break;
2859
2860/* 24There also exist candidate operator functions of the form
2861	     bool    operator!(bool);
2862	     bool    operator&&(bool, bool);
2863	     bool    operator||(bool, bool);  */
2864
2865    case TRUTH_NOT_EXPR:
2866      build_builtin_candidate
2867	(candidates, fnname, boolean_type_node,
2868	 NULL_TREE, args, argtypes, flags, complain);
2869      return;
2870
2871    case TRUTH_ORIF_EXPR:
2872    case TRUTH_ANDIF_EXPR:
2873      build_builtin_candidate
2874	(candidates, fnname, boolean_type_node,
2875	 boolean_type_node, args, argtypes, flags, complain);
2876      return;
2877
2878    case ADDR_EXPR:
2879    case COMPOUND_EXPR:
2880    case COMPONENT_REF:
2881      return;
2882
2883    case COND_EXPR:
2884    case EQ_EXPR:
2885    case NE_EXPR:
2886    case LT_EXPR:
2887    case LE_EXPR:
2888    case GT_EXPR:
2889    case GE_EXPR:
2890      enum_p = 1;
2891      /* Fall through.  */
2892
2893    default:
2894      ref1 = 0;
2895    }
2896
2897  types[0] = make_tree_vector ();
2898  types[1] = make_tree_vector ();
2899
2900  for (i = 0; i < 2; ++i)
2901    {
2902      if (! args[i])
2903	;
2904      else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2905	{
2906	  tree convs;
2907
2908	  if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2909	    return;
2910
2911	  convs = lookup_conversions (argtypes[i]);
2912
2913	  if (code == COND_EXPR)
2914	    {
2915	      if (real_lvalue_p (args[i]))
2916		vec_safe_push (types[i], build_reference_type (argtypes[i]));
2917
2918	      vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2919	    }
2920
2921	  else if (! convs)
2922	    return;
2923
2924	  for (; convs; convs = TREE_CHAIN (convs))
2925	    {
2926	      type = TREE_TYPE (convs);
2927
2928	      if (i == 0 && ref1
2929		  && (TREE_CODE (type) != REFERENCE_TYPE
2930		      || CP_TYPE_CONST_P (TREE_TYPE (type))))
2931		continue;
2932
2933	      if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2934		vec_safe_push (types[i], type);
2935
2936	      type = non_reference (type);
2937	      if (i != 0 || ! ref1)
2938		{
2939		  type = cv_unqualified (type_decays_to (type));
2940		  if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2941		    vec_safe_push (types[i], type);
2942		  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2943		    type = type_promotes_to (type);
2944		}
2945
2946	      if (! vec_member (type, types[i]))
2947		vec_safe_push (types[i], type);
2948	    }
2949	}
2950      else
2951	{
2952	  if (code == COND_EXPR && real_lvalue_p (args[i]))
2953	    vec_safe_push (types[i], build_reference_type (argtypes[i]));
2954	  type = non_reference (argtypes[i]);
2955	  if (i != 0 || ! ref1)
2956	    {
2957	      type = cv_unqualified (type_decays_to (type));
2958	      if (enum_p && UNSCOPED_ENUM_P (type))
2959		vec_safe_push (types[i], type);
2960	      if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2961		type = type_promotes_to (type);
2962	    }
2963	  vec_safe_push (types[i], type);
2964	}
2965    }
2966
2967  /* Run through the possible parameter types of both arguments,
2968     creating candidates with those parameter types.  */
2969  FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2970    {
2971      unsigned jx;
2972      tree u;
2973
2974      if (!types[1]->is_empty ())
2975	FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2976	  add_builtin_candidate
2977	    (candidates, code, code2, fnname, t,
2978	     u, args, argtypes, flags, complain);
2979      else
2980	add_builtin_candidate
2981	  (candidates, code, code2, fnname, t,
2982	   NULL_TREE, args, argtypes, flags, complain);
2983    }
2984
2985  release_tree_vector (types[0]);
2986  release_tree_vector (types[1]);
2987}
2988
2989
2990/* If TMPL can be successfully instantiated as indicated by
2991   EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2992
2993   TMPL is the template.  EXPLICIT_TARGS are any explicit template
2994   arguments.  ARGLIST is the arguments provided at the call-site.
2995   This does not change ARGLIST.  The RETURN_TYPE is the desired type
2996   for conversion operators.  If OBJ is NULL_TREE, FLAGS and CTYPE are
2997   as for add_function_candidate.  If an OBJ is supplied, FLAGS and
2998   CTYPE are ignored, and OBJ is as for add_conv_candidate.  */
2999
3000static struct z_candidate*
3001add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
3002			     tree ctype, tree explicit_targs, tree first_arg,
3003			     const vec<tree, va_gc> *arglist, tree return_type,
3004			     tree access_path, tree conversion_path,
3005			     int flags, tree obj, unification_kind_t strict,
3006			     tsubst_flags_t complain)
3007{
3008  int ntparms = DECL_NTPARMS (tmpl);
3009  tree targs = make_tree_vec (ntparms);
3010  unsigned int len = vec_safe_length (arglist);
3011  unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
3012  unsigned int skip_without_in_chrg = 0;
3013  tree first_arg_without_in_chrg = first_arg;
3014  tree *args_without_in_chrg;
3015  unsigned int nargs_without_in_chrg;
3016  unsigned int ia, ix;
3017  tree arg;
3018  struct z_candidate *cand;
3019  tree fn;
3020  struct rejection_reason *reason = NULL;
3021  int errs;
3022
3023  /* We don't do deduction on the in-charge parameter, the VTT
3024     parameter or 'this'.  */
3025  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
3026    {
3027      if (first_arg_without_in_chrg != NULL_TREE)
3028	first_arg_without_in_chrg = NULL_TREE;
3029      else
3030	++skip_without_in_chrg;
3031    }
3032
3033  if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
3034       || DECL_BASE_CONSTRUCTOR_P (tmpl))
3035      && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
3036    {
3037      if (first_arg_without_in_chrg != NULL_TREE)
3038	first_arg_without_in_chrg = NULL_TREE;
3039      else
3040	++skip_without_in_chrg;
3041    }
3042
3043  if (len < skip_without_in_chrg)
3044    return NULL;
3045
3046  nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
3047			   + (len - skip_without_in_chrg));
3048  args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
3049  ia = 0;
3050  if (first_arg_without_in_chrg != NULL_TREE)
3051    {
3052      args_without_in_chrg[ia] = first_arg_without_in_chrg;
3053      ++ia;
3054    }
3055  for (ix = skip_without_in_chrg;
3056       vec_safe_iterate (arglist, ix, &arg);
3057       ++ix)
3058    {
3059      args_without_in_chrg[ia] = arg;
3060      ++ia;
3061    }
3062  gcc_assert (ia == nargs_without_in_chrg);
3063
3064  errs = errorcount+sorrycount;
3065  fn = fn_type_unification (tmpl, explicit_targs, targs,
3066			    args_without_in_chrg,
3067			    nargs_without_in_chrg,
3068			    return_type, strict, flags, false,
3069			    complain & tf_decltype);
3070
3071  if (fn == error_mark_node)
3072    {
3073      /* Don't repeat unification later if it already resulted in errors.  */
3074      if (errorcount+sorrycount == errs)
3075	reason = template_unification_rejection (tmpl, explicit_targs,
3076						 targs, args_without_in_chrg,
3077						 nargs_without_in_chrg,
3078						 return_type, strict, flags);
3079      else
3080	reason = template_unification_error_rejection ();
3081      goto fail;
3082    }
3083
3084  /* In [class.copy]:
3085
3086       A member function template is never instantiated to perform the
3087       copy of a class object to an object of its class type.
3088
3089     It's a little unclear what this means; the standard explicitly
3090     does allow a template to be used to copy a class.  For example,
3091     in:
3092
3093       struct A {
3094	 A(A&);
3095	 template <class T> A(const T&);
3096       };
3097       const A f ();
3098       void g () { A a (f ()); }
3099
3100     the member template will be used to make the copy.  The section
3101     quoted above appears in the paragraph that forbids constructors
3102     whose only parameter is (a possibly cv-qualified variant of) the
3103     class type, and a logical interpretation is that the intent was
3104     to forbid the instantiation of member templates which would then
3105     have that form.  */
3106  if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
3107    {
3108      tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
3109      if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
3110				    ctype))
3111	{
3112	  reason = invalid_copy_with_fn_template_rejection ();
3113	  goto fail;
3114	}
3115    }
3116
3117  if (obj != NULL_TREE)
3118    /* Aha, this is a conversion function.  */
3119    cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
3120			       access_path, conversion_path, complain);
3121  else
3122    cand = add_function_candidate (candidates, fn, ctype,
3123				   first_arg, arglist, access_path,
3124				   conversion_path, flags, complain);
3125  if (DECL_TI_TEMPLATE (fn) != tmpl)
3126    /* This situation can occur if a member template of a template
3127       class is specialized.  Then, instantiate_template might return
3128       an instantiation of the specialization, in which case the
3129       DECL_TI_TEMPLATE field will point at the original
3130       specialization.  For example:
3131
3132	 template <class T> struct S { template <class U> void f(U);
3133				       template <> void f(int) {}; };
3134	 S<double> sd;
3135	 sd.f(3);
3136
3137       Here, TMPL will be template <class U> S<double>::f(U).
3138       And, instantiate template will give us the specialization
3139       template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
3140       for this will point at template <class T> template <> S<T>::f(int),
3141       so that we can find the definition.  For the purposes of
3142       overload resolution, however, we want the original TMPL.  */
3143    cand->template_decl = build_template_info (tmpl, targs);
3144  else
3145    cand->template_decl = DECL_TEMPLATE_INFO (fn);
3146  cand->explicit_targs = explicit_targs;
3147
3148  return cand;
3149 fail:
3150  return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3151			access_path, conversion_path, 0, reason, flags);
3152}
3153
3154
3155static struct z_candidate *
3156add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3157			tree explicit_targs, tree first_arg,
3158			const vec<tree, va_gc> *arglist, tree return_type,
3159			tree access_path, tree conversion_path, int flags,
3160			unification_kind_t strict, tsubst_flags_t complain)
3161{
3162  return
3163    add_template_candidate_real (candidates, tmpl, ctype,
3164				 explicit_targs, first_arg, arglist,
3165				 return_type, access_path, conversion_path,
3166				 flags, NULL_TREE, strict, complain);
3167}
3168
3169
3170static struct z_candidate *
3171add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3172			     tree obj, tree first_arg,
3173			     const vec<tree, va_gc> *arglist,
3174			     tree return_type, tree access_path,
3175			     tree conversion_path, tsubst_flags_t complain)
3176{
3177  return
3178    add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3179				 first_arg, arglist, return_type, access_path,
3180				 conversion_path, 0, obj, DEDUCE_CONV,
3181				 complain);
3182}
3183
3184/* The CANDS are the set of candidates that were considered for
3185   overload resolution.  Return the set of viable candidates, or CANDS
3186   if none are viable.  If any of the candidates were viable, set
3187   *ANY_VIABLE_P to true.  STRICT_P is true if a candidate should be
3188   considered viable only if it is strictly viable.  */
3189
3190static struct z_candidate*
3191splice_viable (struct z_candidate *cands,
3192	       bool strict_p,
3193	       bool *any_viable_p)
3194{
3195  struct z_candidate *viable;
3196  struct z_candidate **last_viable;
3197  struct z_candidate **cand;
3198  bool found_strictly_viable = false;
3199
3200  /* Be strict inside templates, since build_over_call won't actually
3201     do the conversions to get pedwarns.  */
3202  if (processing_template_decl)
3203    strict_p = true;
3204
3205  viable = NULL;
3206  last_viable = &viable;
3207  *any_viable_p = false;
3208
3209  cand = &cands;
3210  while (*cand)
3211    {
3212      struct z_candidate *c = *cand;
3213      if (!strict_p
3214	  && (c->viable == 1 || TREE_CODE (c->fn) == TEMPLATE_DECL))
3215	{
3216	  /* Be strict in the presence of a viable candidate.  Also if
3217	     there are template candidates, so that we get deduction errors
3218	     for them instead of silently preferring a bad conversion.  */
3219	  strict_p = true;
3220	  if (viable && !found_strictly_viable)
3221	    {
3222	      /* Put any spliced near matches back onto the main list so
3223		 that we see them if there is no strict match.  */
3224	      *any_viable_p = false;
3225	      *last_viable = cands;
3226	      cands = viable;
3227	      viable = NULL;
3228	      last_viable = &viable;
3229	    }
3230	}
3231
3232      if (strict_p ? c->viable == 1 : c->viable)
3233	{
3234	  *last_viable = c;
3235	  *cand = c->next;
3236	  c->next = NULL;
3237	  last_viable = &c->next;
3238	  *any_viable_p = true;
3239	  if (c->viable == 1)
3240	    found_strictly_viable = true;
3241	}
3242      else
3243	cand = &c->next;
3244    }
3245
3246  return viable ? viable : cands;
3247}
3248
3249static bool
3250any_strictly_viable (struct z_candidate *cands)
3251{
3252  for (; cands; cands = cands->next)
3253    if (cands->viable == 1)
3254      return true;
3255  return false;
3256}
3257
3258/* OBJ is being used in an expression like "OBJ.f (...)".  In other
3259   words, it is about to become the "this" pointer for a member
3260   function call.  Take the address of the object.  */
3261
3262static tree
3263build_this (tree obj)
3264{
3265  /* In a template, we are only concerned about the type of the
3266     expression, so we can take a shortcut.  */
3267  if (processing_template_decl)
3268    return build_address (obj);
3269
3270  return cp_build_addr_expr (obj, tf_warning_or_error);
3271}
3272
3273/* Returns true iff functions are equivalent. Equivalent functions are
3274   not '==' only if one is a function-local extern function or if
3275   both are extern "C".  */
3276
3277static inline int
3278equal_functions (tree fn1, tree fn2)
3279{
3280  if (TREE_CODE (fn1) != TREE_CODE (fn2))
3281    return 0;
3282  if (TREE_CODE (fn1) == TEMPLATE_DECL)
3283    return fn1 == fn2;
3284  if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3285      || DECL_EXTERN_C_FUNCTION_P (fn1))
3286    return decls_match (fn1, fn2);
3287  return fn1 == fn2;
3288}
3289
3290/* Print information about a candidate being rejected due to INFO.  */
3291
3292static void
3293print_conversion_rejection (location_t loc, struct conversion_info *info)
3294{
3295  tree from = info->from;
3296  if (!TYPE_P (from))
3297    from = lvalue_type (from);
3298  if (info->n_arg == -1)
3299    {
3300      /* Conversion of implicit `this' argument failed.  */
3301      if (!TYPE_P (info->from))
3302	/* A bad conversion for 'this' must be discarding cv-quals.  */
3303	inform (loc, "  passing %qT as %<this%> "
3304		"argument discards qualifiers",
3305		from);
3306      else
3307	inform (loc, "  no known conversion for implicit "
3308		"%<this%> parameter from %qT to %qT",
3309		from, info->to_type);
3310    }
3311  else if (!TYPE_P (info->from))
3312    {
3313      if (info->n_arg >= 0)
3314	inform (loc, "  conversion of argument %d would be ill-formed:",
3315		info->n_arg + 1);
3316      perform_implicit_conversion (info->to_type, info->from,
3317				   tf_warning_or_error);
3318    }
3319  else if (info->n_arg == -2)
3320    /* Conversion of conversion function return value failed.  */
3321    inform (loc, "  no known conversion from %qT to %qT",
3322	    from, info->to_type);
3323  else
3324    inform (loc, "  no known conversion for argument %d from %qT to %qT",
3325	    info->n_arg + 1, from, info->to_type);
3326}
3327
3328/* Print information about a candidate with WANT parameters and we found
3329   HAVE.  */
3330
3331static void
3332print_arity_information (location_t loc, unsigned int have, unsigned int want)
3333{
3334  inform_n (loc, want,
3335	    "  candidate expects %d argument, %d provided",
3336	    "  candidate expects %d arguments, %d provided",
3337	    want, have);
3338}
3339
3340/* Print information about one overload candidate CANDIDATE.  MSGSTR
3341   is the text to print before the candidate itself.
3342
3343   NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3344   to have been run through gettext by the caller.  This wart makes
3345   life simpler in print_z_candidates and for the translators.  */
3346
3347static void
3348print_z_candidate (location_t loc, const char *msgstr,
3349		   struct z_candidate *candidate)
3350{
3351  const char *msg = (msgstr == NULL
3352		     ? ""
3353		     : ACONCAT ((msgstr, " ", NULL)));
3354  location_t cloc = location_of (candidate->fn);
3355
3356  if (identifier_p (candidate->fn))
3357    {
3358      cloc = loc;
3359      if (candidate->num_convs == 3)
3360	inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3361		candidate->convs[0]->type,
3362		candidate->convs[1]->type,
3363		candidate->convs[2]->type);
3364      else if (candidate->num_convs == 2)
3365	inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3366		candidate->convs[0]->type,
3367		candidate->convs[1]->type);
3368      else
3369	inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3370		candidate->convs[0]->type);
3371    }
3372  else if (TYPE_P (candidate->fn))
3373    inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3374  else if (candidate->viable == -1)
3375    inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3376  else if (DECL_DELETED_FN (candidate->fn))
3377    inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3378  else
3379    inform (cloc, "%s%#D", msg, candidate->fn);
3380  /* Give the user some information about why this candidate failed.  */
3381  if (candidate->reason != NULL)
3382    {
3383      struct rejection_reason *r = candidate->reason;
3384
3385      switch (r->code)
3386	{
3387	case rr_arity:
3388	  print_arity_information (cloc, r->u.arity.actual,
3389				   r->u.arity.expected);
3390	  break;
3391	case rr_arg_conversion:
3392	  print_conversion_rejection (cloc, &r->u.conversion);
3393	  break;
3394	case rr_bad_arg_conversion:
3395	  print_conversion_rejection (cloc, &r->u.bad_conversion);
3396	  break;
3397	case rr_explicit_conversion:
3398	  inform (cloc, "  return type %qT of explicit conversion function "
3399		  "cannot be converted to %qT with a qualification "
3400		  "conversion", r->u.conversion.from,
3401		  r->u.conversion.to_type);
3402	  break;
3403	case rr_template_conversion:
3404	  inform (cloc, "  conversion from return type %qT of template "
3405		  "conversion function specialization to %qT is not an "
3406		  "exact match", r->u.conversion.from,
3407		  r->u.conversion.to_type);
3408	  break;
3409	case rr_template_unification:
3410	  /* We use template_unification_error_rejection if unification caused
3411	     actual non-SFINAE errors, in which case we don't need to repeat
3412	     them here.  */
3413	  if (r->u.template_unification.tmpl == NULL_TREE)
3414	    {
3415	      inform (cloc, "  substitution of deduced template arguments "
3416		      "resulted in errors seen above");
3417	      break;
3418	    }
3419	  /* Re-run template unification with diagnostics.  */
3420	  inform (cloc, "  template argument deduction/substitution failed:");
3421	  fn_type_unification (r->u.template_unification.tmpl,
3422			       r->u.template_unification.explicit_targs,
3423			       (make_tree_vec
3424				(r->u.template_unification.num_targs)),
3425			       r->u.template_unification.args,
3426			       r->u.template_unification.nargs,
3427			       r->u.template_unification.return_type,
3428			       r->u.template_unification.strict,
3429			       r->u.template_unification.flags,
3430			       true, false);
3431	  break;
3432	case rr_invalid_copy:
3433	  inform (cloc,
3434		  "  a constructor taking a single argument of its own "
3435		  "class type is invalid");
3436	  break;
3437	case rr_none:
3438	default:
3439	  /* This candidate didn't have any issues or we failed to
3440	     handle a particular code.  Either way...  */
3441	  gcc_unreachable ();
3442	}
3443    }
3444}
3445
3446static void
3447print_z_candidates (location_t loc, struct z_candidate *candidates)
3448{
3449  struct z_candidate *cand1;
3450  struct z_candidate **cand2;
3451  int n_candidates;
3452
3453  if (!candidates)
3454    return;
3455
3456  /* Remove non-viable deleted candidates.  */
3457  cand1 = candidates;
3458  for (cand2 = &cand1; *cand2; )
3459    {
3460      if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3461	  && !(*cand2)->viable
3462	  && DECL_DELETED_FN ((*cand2)->fn))
3463	*cand2 = (*cand2)->next;
3464      else
3465	cand2 = &(*cand2)->next;
3466    }
3467  /* ...if there are any non-deleted ones.  */
3468  if (cand1)
3469    candidates = cand1;
3470
3471  /* There may be duplicates in the set of candidates.  We put off
3472     checking this condition as long as possible, since we have no way
3473     to eliminate duplicates from a set of functions in less than n^2
3474     time.  Now we are about to emit an error message, so it is more
3475     permissible to go slowly.  */
3476  for (cand1 = candidates; cand1; cand1 = cand1->next)
3477    {
3478      tree fn = cand1->fn;
3479      /* Skip builtin candidates and conversion functions.  */
3480      if (!DECL_P (fn))
3481	continue;
3482      cand2 = &cand1->next;
3483      while (*cand2)
3484	{
3485	  if (DECL_P ((*cand2)->fn)
3486	      && equal_functions (fn, (*cand2)->fn))
3487	    *cand2 = (*cand2)->next;
3488	  else
3489	    cand2 = &(*cand2)->next;
3490	}
3491    }
3492
3493  for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3494    n_candidates++;
3495
3496  for (; candidates; candidates = candidates->next)
3497    print_z_candidate (loc, "candidate:", candidates);
3498}
3499
3500/* USER_SEQ is a user-defined conversion sequence, beginning with a
3501   USER_CONV.  STD_SEQ is the standard conversion sequence applied to
3502   the result of the conversion function to convert it to the final
3503   desired type.  Merge the two sequences into a single sequence,
3504   and return the merged sequence.  */
3505
3506static conversion *
3507merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3508{
3509  conversion **t;
3510  bool bad = user_seq->bad_p;
3511
3512  gcc_assert (user_seq->kind == ck_user);
3513
3514  /* Find the end of the second conversion sequence.  */
3515  for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3516    {
3517      /* The entire sequence is a user-conversion sequence.  */
3518      (*t)->user_conv_p = true;
3519      if (bad)
3520	(*t)->bad_p = true;
3521    }
3522
3523  /* Replace the identity conversion with the user conversion
3524     sequence.  */
3525  *t = user_seq;
3526
3527  return std_seq;
3528}
3529
3530/* Handle overload resolution for initializing an object of class type from
3531   an initializer list.  First we look for a suitable constructor that
3532   takes a std::initializer_list; if we don't find one, we then look for a
3533   non-list constructor.
3534
3535   Parameters are as for add_candidates, except that the arguments are in
3536   the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3537   the RETURN_TYPE parameter is replaced by TOTYPE, the desired type.  */
3538
3539static void
3540add_list_candidates (tree fns, tree first_arg,
3541		     tree init_list, tree totype,
3542		     tree explicit_targs, bool template_only,
3543		     tree conversion_path, tree access_path,
3544		     int flags,
3545		     struct z_candidate **candidates,
3546		     tsubst_flags_t complain)
3547{
3548  vec<tree, va_gc> *args;
3549
3550  gcc_assert (*candidates == NULL);
3551
3552  /* We're looking for a ctor for list-initialization.  */
3553  flags |= LOOKUP_LIST_INIT_CTOR;
3554  /* And we don't allow narrowing conversions.  We also use this flag to
3555     avoid the copy constructor call for copy-list-initialization.  */
3556  flags |= LOOKUP_NO_NARROWING;
3557
3558  /* Always use the default constructor if the list is empty (DR 990).  */
3559  if (CONSTRUCTOR_NELTS (init_list) == 0
3560      && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3561    ;
3562  /* If the class has a list ctor, try passing the list as a single
3563     argument first, but only consider list ctors.  */
3564  else if (TYPE_HAS_LIST_CTOR (totype))
3565    {
3566      flags |= LOOKUP_LIST_ONLY;
3567      args = make_tree_vector_single (init_list);
3568      add_candidates (fns, first_arg, args, NULL_TREE,
3569		      explicit_targs, template_only, conversion_path,
3570		      access_path, flags, candidates, complain);
3571      if (any_strictly_viable (*candidates))
3572	return;
3573    }
3574
3575  args = ctor_to_vec (init_list);
3576
3577  /* We aren't looking for list-ctors anymore.  */
3578  flags &= ~LOOKUP_LIST_ONLY;
3579  /* We allow more user-defined conversions within an init-list.  */
3580  flags &= ~LOOKUP_NO_CONVERSION;
3581
3582  add_candidates (fns, first_arg, args, NULL_TREE,
3583		  explicit_targs, template_only, conversion_path,
3584		  access_path, flags, candidates, complain);
3585}
3586
3587/* Returns the best overload candidate to perform the requested
3588   conversion.  This function is used for three the overloading situations
3589   described in [over.match.copy], [over.match.conv], and [over.match.ref].
3590   If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3591   per [dcl.init.ref], so we ignore temporary bindings.  */
3592
3593static struct z_candidate *
3594build_user_type_conversion_1 (tree totype, tree expr, int flags,
3595			      tsubst_flags_t complain)
3596{
3597  struct z_candidate *candidates, *cand;
3598  tree fromtype;
3599  tree ctors = NULL_TREE;
3600  tree conv_fns = NULL_TREE;
3601  conversion *conv = NULL;
3602  tree first_arg = NULL_TREE;
3603  vec<tree, va_gc> *args = NULL;
3604  bool any_viable_p;
3605  int convflags;
3606
3607  if (!expr)
3608    return NULL;
3609
3610  fromtype = TREE_TYPE (expr);
3611
3612  /* We represent conversion within a hierarchy using RVALUE_CONV and
3613     BASE_CONV, as specified by [over.best.ics]; these become plain
3614     constructor calls, as specified in [dcl.init].  */
3615  gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3616	      || !DERIVED_FROM_P (totype, fromtype));
3617
3618  if (MAYBE_CLASS_TYPE_P (totype))
3619    /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3620       creating a garbage BASELINK; constructors can't be inherited.  */
3621    ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3622
3623  if (MAYBE_CLASS_TYPE_P (fromtype))
3624    {
3625      tree to_nonref = non_reference (totype);
3626      if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3627	  (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3628	   && DERIVED_FROM_P (to_nonref, fromtype)))
3629	{
3630	  /* [class.conv.fct] A conversion function is never used to
3631	     convert a (possibly cv-qualified) object to the (possibly
3632	     cv-qualified) same object type (or a reference to it), to a
3633	     (possibly cv-qualified) base class of that type (or a
3634	     reference to it)...  */
3635	}
3636      else
3637	conv_fns = lookup_conversions (fromtype);
3638    }
3639
3640  candidates = 0;
3641  flags |= LOOKUP_NO_CONVERSION;
3642  if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3643    flags |= LOOKUP_NO_NARROWING;
3644
3645  /* It's OK to bind a temporary for converting constructor arguments, but
3646     not in converting the return value of a conversion operator.  */
3647  convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION
3648	       | (flags & LOOKUP_NO_NARROWING));
3649  flags &= ~LOOKUP_NO_TEMP_BIND;
3650
3651  if (ctors)
3652    {
3653      int ctorflags = flags;
3654
3655      first_arg = build_dummy_object (totype);
3656
3657      /* We should never try to call the abstract or base constructor
3658	 from here.  */
3659      gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3660		  && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3661
3662      if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3663	{
3664	  /* List-initialization.  */
3665	  add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3666			       false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3667			       ctorflags, &candidates, complain);
3668	}
3669      else
3670	{
3671	  args = make_tree_vector_single (expr);
3672	  add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3673			  TYPE_BINFO (totype), TYPE_BINFO (totype),
3674			  ctorflags, &candidates, complain);
3675	}
3676
3677      for (cand = candidates; cand; cand = cand->next)
3678	{
3679	  cand->second_conv = build_identity_conv (totype, NULL_TREE);
3680
3681	  /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3682	     set, then this is copy-initialization.  In that case, "The
3683	     result of the call is then used to direct-initialize the
3684	     object that is the destination of the copy-initialization."
3685	     [dcl.init]
3686
3687	     We represent this in the conversion sequence with an
3688	     rvalue conversion, which means a constructor call.  */
3689	  if (TREE_CODE (totype) != REFERENCE_TYPE
3690	      && !(convflags & LOOKUP_NO_TEMP_BIND))
3691	    cand->second_conv
3692	      = build_conv (ck_rvalue, totype, cand->second_conv);
3693	}
3694    }
3695
3696  if (conv_fns)
3697    first_arg = expr;
3698
3699  for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3700    {
3701      tree conversion_path = TREE_PURPOSE (conv_fns);
3702      struct z_candidate *old_candidates;
3703
3704      /* If we are called to convert to a reference type, we are trying to
3705	 find a direct binding, so don't even consider temporaries.  If
3706	 we don't find a direct binding, the caller will try again to
3707	 look for a temporary binding.  */
3708      if (TREE_CODE (totype) == REFERENCE_TYPE)
3709	convflags |= LOOKUP_NO_TEMP_BIND;
3710
3711      old_candidates = candidates;
3712      add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3713		      NULL_TREE, false,
3714		      conversion_path, TYPE_BINFO (fromtype),
3715		      flags, &candidates, complain);
3716
3717      for (cand = candidates; cand != old_candidates; cand = cand->next)
3718	{
3719	  tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3720	  conversion *ics
3721	    = implicit_conversion (totype,
3722				   rettype,
3723				   0,
3724				   /*c_cast_p=*/false, convflags,
3725				   complain);
3726
3727	  /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3728	     copy-initialization.  In that case, "The result of the
3729	     call is then used to direct-initialize the object that is
3730	     the destination of the copy-initialization."  [dcl.init]
3731
3732	     We represent this in the conversion sequence with an
3733	     rvalue conversion, which means a constructor call.  But
3734	     don't add a second rvalue conversion if there's already
3735	     one there.  Which there really shouldn't be, but it's
3736	     harmless since we'd add it here anyway. */
3737	  if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3738	      && !(convflags & LOOKUP_NO_TEMP_BIND))
3739	    ics = build_conv (ck_rvalue, totype, ics);
3740
3741	  cand->second_conv = ics;
3742
3743	  if (!ics)
3744	    {
3745	      cand->viable = 0;
3746	      cand->reason = arg_conversion_rejection (NULL_TREE, -2,
3747						       rettype, totype);
3748	    }
3749	  else if (DECL_NONCONVERTING_P (cand->fn)
3750		   && ics->rank > cr_exact)
3751	    {
3752	      /* 13.3.1.5: For direct-initialization, those explicit
3753		 conversion functions that are not hidden within S and
3754		 yield type T or a type that can be converted to type T
3755		 with a qualification conversion (4.4) are also candidate
3756		 functions.  */
3757	      /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3758		 I've raised this issue with the committee. --jason 9/2011 */
3759	      cand->viable = -1;
3760	      cand->reason = explicit_conversion_rejection (rettype, totype);
3761	    }
3762	  else if (cand->viable == 1 && ics->bad_p)
3763	    {
3764	      cand->viable = -1;
3765	      cand->reason
3766		= bad_arg_conversion_rejection (NULL_TREE, -2,
3767						rettype, totype);
3768	    }
3769	  else if (primary_template_instantiation_p (cand->fn)
3770		   && ics->rank > cr_exact)
3771	    {
3772	      /* 13.3.3.1.2: If the user-defined conversion is specified by
3773		 a specialization of a conversion function template, the
3774		 second standard conversion sequence shall have exact match
3775		 rank.  */
3776	      cand->viable = -1;
3777	      cand->reason = template_conversion_rejection (rettype, totype);
3778	    }
3779	}
3780    }
3781
3782  candidates = splice_viable (candidates, false, &any_viable_p);
3783  if (!any_viable_p)
3784    {
3785      if (args)
3786	release_tree_vector (args);
3787      return NULL;
3788    }
3789
3790  cand = tourney (candidates, complain);
3791  if (cand == 0)
3792    {
3793      if (complain & tf_error)
3794	{
3795	  error ("conversion from %qT to %qT is ambiguous",
3796		 fromtype, totype);
3797	  print_z_candidates (location_of (expr), candidates);
3798	}
3799
3800      cand = candidates;	/* any one will do */
3801      cand->second_conv = build_ambiguous_conv (totype, expr);
3802      cand->second_conv->user_conv_p = true;
3803      if (!any_strictly_viable (candidates))
3804	cand->second_conv->bad_p = true;
3805      /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3806	 ambiguous conversion is no worse than another user-defined
3807	 conversion.  */
3808
3809      return cand;
3810    }
3811
3812  tree convtype;
3813  if (!DECL_CONSTRUCTOR_P (cand->fn))
3814    convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
3815  else if (cand->second_conv->kind == ck_rvalue)
3816    /* DR 5: [in the first step of copy-initialization]...if the function
3817       is a constructor, the call initializes a temporary of the
3818       cv-unqualified version of the destination type. */
3819    convtype = cv_unqualified (totype);
3820  else
3821    convtype = totype;
3822  /* Build the user conversion sequence.  */
3823  conv = build_conv
3824    (ck_user,
3825     convtype,
3826     build_identity_conv (TREE_TYPE (expr), expr));
3827  conv->cand = cand;
3828  if (cand->viable == -1)
3829    conv->bad_p = true;
3830
3831  /* Remember that this was a list-initialization.  */
3832  if (flags & LOOKUP_NO_NARROWING)
3833    conv->check_narrowing = true;
3834
3835  /* Combine it with the second conversion sequence.  */
3836  cand->second_conv = merge_conversion_sequences (conv,
3837						  cand->second_conv);
3838
3839  return cand;
3840}
3841
3842/* Wrapper for above. */
3843
3844tree
3845build_user_type_conversion (tree totype, tree expr, int flags,
3846			    tsubst_flags_t complain)
3847{
3848  struct z_candidate *cand;
3849  tree ret;
3850
3851  bool subtime = timevar_cond_start (TV_OVERLOAD);
3852  cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3853
3854  if (cand)
3855    {
3856      if (cand->second_conv->kind == ck_ambig)
3857	ret = error_mark_node;
3858      else
3859        {
3860          expr = convert_like (cand->second_conv, expr, complain);
3861          ret = convert_from_reference (expr);
3862        }
3863    }
3864  else
3865    ret = NULL_TREE;
3866
3867  timevar_cond_stop (TV_OVERLOAD, subtime);
3868  return ret;
3869}
3870
3871/* Subroutine of convert_nontype_argument.
3872
3873   EXPR is an argument for a template non-type parameter of integral or
3874   enumeration type.  Do any necessary conversions (that are permitted for
3875   non-type arguments) to convert it to the parameter type.
3876
3877   If conversion is successful, returns the converted expression;
3878   otherwise, returns error_mark_node.  */
3879
3880tree
3881build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3882{
3883  conversion *conv;
3884  void *p;
3885  tree t;
3886  location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
3887
3888  if (error_operand_p (expr))
3889    return error_mark_node;
3890
3891  gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3892
3893  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3894  p = conversion_obstack_alloc (0);
3895
3896  conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3897			      /*c_cast_p=*/false,
3898			      LOOKUP_IMPLICIT, complain);
3899
3900  /* for a non-type template-parameter of integral or
3901     enumeration type, integral promotions (4.5) and integral
3902     conversions (4.7) are applied.  */
3903  /* It should be sufficient to check the outermost conversion step, since
3904     there are no qualification conversions to integer type.  */
3905  if (conv)
3906    switch (conv->kind)
3907      {
3908	/* A conversion function is OK.  If it isn't constexpr, we'll
3909	   complain later that the argument isn't constant.  */
3910      case ck_user:
3911	/* The lvalue-to-rvalue conversion is OK.  */
3912      case ck_rvalue:
3913      case ck_identity:
3914	break;
3915
3916      case ck_std:
3917	t = next_conversion (conv)->type;
3918	if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3919	  break;
3920
3921	if (complain & tf_error)
3922	  error_at (loc, "conversion from %qT to %qT not considered for "
3923		    "non-type template argument", t, type);
3924	/* and fall through.  */
3925
3926      default:
3927	conv = NULL;
3928	break;
3929      }
3930
3931  if (conv)
3932    expr = convert_like (conv, expr, complain);
3933  else
3934    expr = error_mark_node;
3935
3936  /* Free all the conversions we allocated.  */
3937  obstack_free (&conversion_obstack, p);
3938
3939  return expr;
3940}
3941
3942/* Do any initial processing on the arguments to a function call.  */
3943
3944static vec<tree, va_gc> *
3945resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3946{
3947  unsigned int ix;
3948  tree arg;
3949
3950  FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
3951    {
3952      if (error_operand_p (arg))
3953	return NULL;
3954      else if (VOID_TYPE_P (TREE_TYPE (arg)))
3955	{
3956	  if (complain & tf_error)
3957	    error ("invalid use of void expression");
3958	  return NULL;
3959	}
3960      else if (invalid_nonstatic_memfn_p (arg, complain))
3961	return NULL;
3962    }
3963  return args;
3964}
3965
3966/* Perform overload resolution on FN, which is called with the ARGS.
3967
3968   Return the candidate function selected by overload resolution, or
3969   NULL if the event that overload resolution failed.  In the case
3970   that overload resolution fails, *CANDIDATES will be the set of
3971   candidates considered, and ANY_VIABLE_P will be set to true or
3972   false to indicate whether or not any of the candidates were
3973   viable.
3974
3975   The ARGS should already have gone through RESOLVE_ARGS before this
3976   function is called.  */
3977
3978static struct z_candidate *
3979perform_overload_resolution (tree fn,
3980			     const vec<tree, va_gc> *args,
3981			     struct z_candidate **candidates,
3982			     bool *any_viable_p, tsubst_flags_t complain)
3983{
3984  struct z_candidate *cand;
3985  tree explicit_targs;
3986  int template_only;
3987
3988  bool subtime = timevar_cond_start (TV_OVERLOAD);
3989
3990  explicit_targs = NULL_TREE;
3991  template_only = 0;
3992
3993  *candidates = NULL;
3994  *any_viable_p = true;
3995
3996  /* Check FN.  */
3997  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3998	      || TREE_CODE (fn) == TEMPLATE_DECL
3999	      || TREE_CODE (fn) == OVERLOAD
4000	      || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
4001
4002  if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4003    {
4004      explicit_targs = TREE_OPERAND (fn, 1);
4005      fn = TREE_OPERAND (fn, 0);
4006      template_only = 1;
4007    }
4008
4009  /* Add the various candidate functions.  */
4010  add_candidates (fn, NULL_TREE, args, NULL_TREE,
4011		  explicit_targs, template_only,
4012		  /*conversion_path=*/NULL_TREE,
4013		  /*access_path=*/NULL_TREE,
4014		  LOOKUP_NORMAL,
4015		  candidates, complain);
4016
4017  *candidates = splice_viable (*candidates, false, any_viable_p);
4018  if (*any_viable_p)
4019    cand = tourney (*candidates, complain);
4020  else
4021    cand = NULL;
4022
4023  timevar_cond_stop (TV_OVERLOAD, subtime);
4024  return cand;
4025}
4026
4027/* Print an error message about being unable to build a call to FN with
4028   ARGS.  ANY_VIABLE_P indicates whether any candidate functions could
4029   be located; CANDIDATES is a possibly empty list of such
4030   functions.  */
4031
4032static void
4033print_error_for_call_failure (tree fn, vec<tree, va_gc> *args,
4034			      struct z_candidate *candidates)
4035{
4036  tree name = DECL_NAME (OVL_CURRENT (fn));
4037  location_t loc = location_of (name);
4038
4039  if (!any_strictly_viable (candidates))
4040    error_at (loc, "no matching function for call to %<%D(%A)%>",
4041	      name, build_tree_list_vec (args));
4042  else
4043    error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
4044	      name, build_tree_list_vec (args));
4045  if (candidates)
4046    print_z_candidates (loc, candidates);
4047}
4048
4049/* Return an expression for a call to FN (a namespace-scope function,
4050   or a static member function) with the ARGS.  This may change
4051   ARGS.  */
4052
4053tree
4054build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
4055			 tsubst_flags_t complain)
4056{
4057  struct z_candidate *candidates, *cand;
4058  bool any_viable_p;
4059  void *p;
4060  tree result;
4061
4062  if (args != NULL && *args != NULL)
4063    {
4064      *args = resolve_args (*args, complain);
4065      if (*args == NULL)
4066	return error_mark_node;
4067    }
4068
4069  if (flag_tm)
4070    tm_malloc_replacement (fn);
4071
4072  /* If this function was found without using argument dependent
4073     lookup, then we want to ignore any undeclared friend
4074     functions.  */
4075  if (!koenig_p)
4076    {
4077      tree orig_fn = fn;
4078
4079      fn = remove_hidden_names (fn);
4080      if (!fn)
4081	{
4082	  if (complain & tf_error)
4083	    print_error_for_call_failure (orig_fn, *args, NULL);
4084	  return error_mark_node;
4085	}
4086    }
4087
4088  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4089  p = conversion_obstack_alloc (0);
4090
4091  cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
4092				      complain);
4093
4094  if (!cand)
4095    {
4096      if (complain & tf_error)
4097	{
4098	  if (!any_viable_p && candidates && ! candidates->next
4099	      && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
4100	    return cp_build_function_call_vec (candidates->fn, args, complain);
4101	  if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4102	    fn = TREE_OPERAND (fn, 0);
4103	  print_error_for_call_failure (fn, *args, candidates);
4104	}
4105      result = error_mark_node;
4106    }
4107  else
4108    {
4109      int flags = LOOKUP_NORMAL;
4110      /* If fn is template_id_expr, the call has explicit template arguments
4111         (e.g. func<int>(5)), communicate this info to build_over_call
4112         through flags so that later we can use it to decide whether to warn
4113         about peculiar null pointer conversion.  */
4114      if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4115        flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
4116      result = build_over_call (cand, flags, complain);
4117    }
4118
4119  /* Free all the conversions we allocated.  */
4120  obstack_free (&conversion_obstack, p);
4121
4122  return result;
4123}
4124
4125/* Build a call to a global operator new.  FNNAME is the name of the
4126   operator (either "operator new" or "operator new[]") and ARGS are
4127   the arguments provided.  This may change ARGS.  *SIZE points to the
4128   total number of bytes required by the allocation, and is updated if
4129   that is changed here.  *COOKIE_SIZE is non-NULL if a cookie should
4130   be used.  If this function determines that no cookie should be
4131   used, after all, *COOKIE_SIZE is set to NULL_TREE.  If SIZE_CHECK
4132   is not NULL_TREE, it is evaluated before calculating the final
4133   array size, and if it fails, the array size is replaced with
4134   (size_t)-1 (usually triggering a std::bad_alloc exception).  If FN
4135   is non-NULL, it will be set, upon return, to the allocation
4136   function called.  */
4137
4138tree
4139build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
4140			 tree *size, tree *cookie_size, tree size_check,
4141			 tree *fn, tsubst_flags_t complain)
4142{
4143  tree original_size = *size;
4144  tree fns;
4145  struct z_candidate *candidates;
4146  struct z_candidate *cand;
4147  bool any_viable_p;
4148
4149  if (fn)
4150    *fn = NULL_TREE;
4151  /* Set to (size_t)-1 if the size check fails.  */
4152  if (size_check != NULL_TREE)
4153    {
4154      tree errval = TYPE_MAX_VALUE (sizetype);
4155      if (cxx_dialect >= cxx11 && flag_exceptions)
4156	errval = throw_bad_array_new_length ();
4157      *size = fold_build3 (COND_EXPR, sizetype, size_check,
4158			   original_size, errval);
4159    }
4160  vec_safe_insert (*args, 0, *size);
4161  *args = resolve_args (*args, complain);
4162  if (*args == NULL)
4163    return error_mark_node;
4164
4165  /* Based on:
4166
4167       [expr.new]
4168
4169       If this lookup fails to find the name, or if the allocated type
4170       is not a class type, the allocation function's name is looked
4171       up in the global scope.
4172
4173     we disregard block-scope declarations of "operator new".  */
4174  fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
4175
4176  /* Figure out what function is being called.  */
4177  cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
4178				      complain);
4179
4180  /* If no suitable function could be found, issue an error message
4181     and give up.  */
4182  if (!cand)
4183    {
4184      if (complain & tf_error)
4185	print_error_for_call_failure (fns, *args, candidates);
4186      return error_mark_node;
4187    }
4188
4189   /* If a cookie is required, add some extra space.  Whether
4190      or not a cookie is required cannot be determined until
4191      after we know which function was called.  */
4192   if (*cookie_size)
4193     {
4194       bool use_cookie = true;
4195       tree arg_types;
4196
4197       arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4198       /* Skip the size_t parameter.  */
4199       arg_types = TREE_CHAIN (arg_types);
4200       /* Check the remaining parameters (if any).  */
4201       if (arg_types
4202	   && TREE_CHAIN (arg_types) == void_list_node
4203	   && same_type_p (TREE_VALUE (arg_types),
4204			   ptr_type_node))
4205	 use_cookie = false;
4206       /* If we need a cookie, adjust the number of bytes allocated.  */
4207       if (use_cookie)
4208	 {
4209	   /* Update the total size.  */
4210	   *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4211	   /* Set to (size_t)-1 if the size check fails.  */
4212	   gcc_assert (size_check != NULL_TREE);
4213	   *size = fold_build3 (COND_EXPR, sizetype, size_check,
4214				*size, TYPE_MAX_VALUE (sizetype));
4215	   /* Update the argument list to reflect the adjusted size.  */
4216	   (**args)[0] = *size;
4217	 }
4218       else
4219	 *cookie_size = NULL_TREE;
4220     }
4221
4222   /* Tell our caller which function we decided to call.  */
4223   if (fn)
4224     *fn = cand->fn;
4225
4226   /* Build the CALL_EXPR.  */
4227   return build_over_call (cand, LOOKUP_NORMAL, complain);
4228}
4229
4230/* Build a new call to operator().  This may change ARGS.  */
4231
4232static tree
4233build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4234{
4235  struct z_candidate *candidates = 0, *cand;
4236  tree fns, convs, first_mem_arg = NULL_TREE;
4237  tree type = TREE_TYPE (obj);
4238  bool any_viable_p;
4239  tree result = NULL_TREE;
4240  void *p;
4241
4242  if (error_operand_p (obj))
4243    return error_mark_node;
4244
4245  obj = prep_operand (obj);
4246
4247  if (TYPE_PTRMEMFUNC_P (type))
4248    {
4249      if (complain & tf_error)
4250        /* It's no good looking for an overloaded operator() on a
4251           pointer-to-member-function.  */
4252        error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4253      return error_mark_node;
4254    }
4255
4256  if (TYPE_BINFO (type))
4257    {
4258      fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4259      if (fns == error_mark_node)
4260	return error_mark_node;
4261    }
4262  else
4263    fns = NULL_TREE;
4264
4265  if (args != NULL && *args != NULL)
4266    {
4267      *args = resolve_args (*args, complain);
4268      if (*args == NULL)
4269	return error_mark_node;
4270    }
4271
4272  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4273  p = conversion_obstack_alloc (0);
4274
4275  if (fns)
4276    {
4277      first_mem_arg = obj;
4278
4279      add_candidates (BASELINK_FUNCTIONS (fns),
4280		      first_mem_arg, *args, NULL_TREE,
4281		      NULL_TREE, false,
4282		      BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4283		      LOOKUP_NORMAL, &candidates, complain);
4284    }
4285
4286  convs = lookup_conversions (type);
4287
4288  for (; convs; convs = TREE_CHAIN (convs))
4289    {
4290      tree fns = TREE_VALUE (convs);
4291      tree totype = TREE_TYPE (convs);
4292
4293      if (TYPE_PTRFN_P (totype)
4294	  || TYPE_REFFN_P (totype)
4295	  || (TREE_CODE (totype) == REFERENCE_TYPE
4296	      && TYPE_PTRFN_P (TREE_TYPE (totype))))
4297	for (; fns; fns = OVL_NEXT (fns))
4298	  {
4299	    tree fn = OVL_CURRENT (fns);
4300
4301	    if (DECL_NONCONVERTING_P (fn))
4302	      continue;
4303
4304	    if (TREE_CODE (fn) == TEMPLATE_DECL)
4305	      add_template_conv_candidate
4306		(&candidates, fn, obj, NULL_TREE, *args, totype,
4307		 /*access_path=*/NULL_TREE,
4308		 /*conversion_path=*/NULL_TREE, complain);
4309	    else
4310	      add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4311				  *args, /*conversion_path=*/NULL_TREE,
4312				  /*access_path=*/NULL_TREE, complain);
4313	  }
4314    }
4315
4316  /* Be strict here because if we choose a bad conversion candidate, the
4317     errors we get won't mention the call context.  */
4318  candidates = splice_viable (candidates, true, &any_viable_p);
4319  if (!any_viable_p)
4320    {
4321      if (complain & tf_error)
4322        {
4323          error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4324		 build_tree_list_vec (*args));
4325          print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4326        }
4327      result = error_mark_node;
4328    }
4329  else
4330    {
4331      cand = tourney (candidates, complain);
4332      if (cand == 0)
4333	{
4334          if (complain & tf_error)
4335            {
4336              error ("call of %<(%T) (%A)%> is ambiguous",
4337                     TREE_TYPE (obj), build_tree_list_vec (*args));
4338              print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4339            }
4340	  result = error_mark_node;
4341	}
4342      /* Since cand->fn will be a type, not a function, for a conversion
4343	 function, we must be careful not to unconditionally look at
4344	 DECL_NAME here.  */
4345      else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4346	       && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4347	result = build_over_call (cand, LOOKUP_NORMAL, complain);
4348      else
4349	{
4350	  obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4351					   complain);
4352	  obj = convert_from_reference (obj);
4353	  result = cp_build_function_call_vec (obj, args, complain);
4354	}
4355    }
4356
4357  /* Free all the conversions we allocated.  */
4358  obstack_free (&conversion_obstack, p);
4359
4360  return result;
4361}
4362
4363/* Wrapper for above.  */
4364
4365tree
4366build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4367{
4368  tree ret;
4369  bool subtime = timevar_cond_start (TV_OVERLOAD);
4370  ret = build_op_call_1 (obj, args, complain);
4371  timevar_cond_stop (TV_OVERLOAD, subtime);
4372  return ret;
4373}
4374
4375/* Called by op_error to prepare format strings suitable for the error
4376   function.  It concatenates a prefix (controlled by MATCH), ERRMSG,
4377   and a suffix (controlled by NTYPES).  */
4378
4379static const char *
4380op_error_string (const char *errmsg, int ntypes, bool match)
4381{
4382  const char *msg;
4383
4384  const char *msgp = concat (match ? G_("ambiguous overload for ")
4385			           : G_("no match for "), errmsg, NULL);
4386
4387  if (ntypes == 3)
4388    msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4389  else if (ntypes == 2)
4390    msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4391  else
4392    msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4393
4394  return msg;
4395}
4396
4397static void
4398op_error (location_t loc, enum tree_code code, enum tree_code code2,
4399	  tree arg1, tree arg2, tree arg3, bool match)
4400{
4401  const char *opname;
4402
4403  if (code == MODIFY_EXPR)
4404    opname = assignment_operator_name_info[code2].name;
4405  else
4406    opname = operator_name_info[code].name;
4407
4408  switch (code)
4409    {
4410    case COND_EXPR:
4411      if (flag_diagnostics_show_caret)
4412	error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4413					3, match),
4414		  TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4415      else
4416	error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4417					   "in %<%E ? %E : %E%>"), 3, match),
4418		  arg1, arg2, arg3,
4419		  TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4420      break;
4421
4422    case POSTINCREMENT_EXPR:
4423    case POSTDECREMENT_EXPR:
4424      if (flag_diagnostics_show_caret)
4425	error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4426		  opname, TREE_TYPE (arg1));
4427      else
4428	error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4429					1, match),
4430		  opname, arg1, opname, TREE_TYPE (arg1));
4431      break;
4432
4433    case ARRAY_REF:
4434      if (flag_diagnostics_show_caret)
4435	error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4436		  TREE_TYPE (arg1), TREE_TYPE (arg2));
4437      else
4438	error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4439					2, match),
4440		  arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4441      break;
4442
4443    case REALPART_EXPR:
4444    case IMAGPART_EXPR:
4445      if (flag_diagnostics_show_caret)
4446	error_at (loc, op_error_string (G_("%qs"), 1, match),
4447		  opname, TREE_TYPE (arg1));
4448      else
4449	error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4450		  opname, opname, arg1, TREE_TYPE (arg1));
4451      break;
4452
4453    default:
4454      if (arg2)
4455	if (flag_diagnostics_show_caret)
4456	  error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4457		    opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4458	else
4459	  error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4460					  2, match),
4461		    opname, arg1, opname, arg2,
4462		    TREE_TYPE (arg1), TREE_TYPE (arg2));
4463      else
4464	if (flag_diagnostics_show_caret)
4465	  error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4466		    opname, TREE_TYPE (arg1));
4467	else
4468	  error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4469					  1, match),
4470		    opname, opname, arg1, TREE_TYPE (arg1));
4471      break;
4472    }
4473}
4474
4475/* Return the implicit conversion sequence that could be used to
4476   convert E1 to E2 in [expr.cond].  */
4477
4478static conversion *
4479conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4480{
4481  tree t1 = non_reference (TREE_TYPE (e1));
4482  tree t2 = non_reference (TREE_TYPE (e2));
4483  conversion *conv;
4484  bool good_base;
4485
4486  /* [expr.cond]
4487
4488     If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4489     implicitly converted (clause _conv_) to the type "lvalue reference to
4490     T2", subject to the constraint that in the conversion the
4491     reference must bind directly (_dcl.init.ref_) to an lvalue.
4492
4493     If E2 is an xvalue: E1 can be converted to match E2 if E1 can be
4494     implicitly converted to the type "rvalue reference to T2", subject to
4495     the constraint that the reference must bind directly.  */
4496  if (lvalue_or_rvalue_with_address_p (e2))
4497    {
4498      tree rtype = cp_build_reference_type (t2, !real_lvalue_p (e2));
4499      conv = implicit_conversion (rtype,
4500				  t1,
4501				  e1,
4502				  /*c_cast_p=*/false,
4503				  LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4504				  |LOOKUP_ONLYCONVERTING,
4505				  complain);
4506      if (conv && !conv->bad_p)
4507	return conv;
4508    }
4509
4510  /* If E2 is a prvalue or if neither of the conversions above can be done
4511     and at least one of the operands has (possibly cv-qualified) class
4512     type: */
4513  if (!CLASS_TYPE_P (t1) && !CLASS_TYPE_P (t2))
4514    return NULL;
4515
4516  /* [expr.cond]
4517
4518     If E1 and E2 have class type, and the underlying class types are
4519     the same or one is a base class of the other: E1 can be converted
4520     to match E2 if the class of T2 is the same type as, or a base
4521     class of, the class of T1, and the cv-qualification of T2 is the
4522     same cv-qualification as, or a greater cv-qualification than, the
4523     cv-qualification of T1.  If the conversion is applied, E1 is
4524     changed to an rvalue of type T2 that still refers to the original
4525     source class object (or the appropriate subobject thereof).  */
4526  if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4527      && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4528    {
4529      if (good_base && at_least_as_qualified_p (t2, t1))
4530	{
4531	  conv = build_identity_conv (t1, e1);
4532	  if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4533			    TYPE_MAIN_VARIANT (t2)))
4534	    conv = build_conv (ck_base, t2, conv);
4535	  else
4536	    conv = build_conv (ck_rvalue, t2, conv);
4537	  return conv;
4538	}
4539      else
4540	return NULL;
4541    }
4542  else
4543    /* [expr.cond]
4544
4545       Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4546       converted to the type that expression E2 would have if E2 were
4547       converted to an rvalue (or the type it has, if E2 is an rvalue).  */
4548    return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4549				LOOKUP_IMPLICIT, complain);
4550}
4551
4552/* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
4553   arguments to the conditional expression.  */
4554
4555static tree
4556build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
4557                          tsubst_flags_t complain)
4558{
4559  tree arg2_type;
4560  tree arg3_type;
4561  tree result = NULL_TREE;
4562  tree result_type = NULL_TREE;
4563  bool lvalue_p = true;
4564  struct z_candidate *candidates = 0;
4565  struct z_candidate *cand;
4566  void *p;
4567  tree orig_arg2, orig_arg3;
4568
4569  /* As a G++ extension, the second argument to the conditional can be
4570     omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
4571     c'.)  If the second operand is omitted, make sure it is
4572     calculated only once.  */
4573  if (!arg2)
4574    {
4575      if (complain & tf_error)
4576	pedwarn (loc, OPT_Wpedantic,
4577		 "ISO C++ forbids omitting the middle term of a ?: expression");
4578
4579      /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
4580      if (real_lvalue_p (arg1))
4581	arg2 = arg1 = stabilize_reference (arg1);
4582      else
4583	arg2 = arg1 = save_expr (arg1);
4584    }
4585
4586  /* If something has already gone wrong, just pass that fact up the
4587     tree.  */
4588  if (error_operand_p (arg1)
4589      || error_operand_p (arg2)
4590      || error_operand_p (arg3))
4591    return error_mark_node;
4592
4593  orig_arg2 = arg2;
4594  orig_arg3 = arg3;
4595
4596  if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4597    {
4598      arg1 = force_rvalue (arg1, complain);
4599      arg2 = force_rvalue (arg2, complain);
4600      arg3 = force_rvalue (arg3, complain);
4601
4602      /* force_rvalue can return error_mark on valid arguments.  */
4603      if (error_operand_p (arg1)
4604	  || error_operand_p (arg2)
4605	  || error_operand_p (arg3))
4606	return error_mark_node;
4607
4608      tree arg1_type = TREE_TYPE (arg1);
4609      arg2_type = TREE_TYPE (arg2);
4610      arg3_type = TREE_TYPE (arg3);
4611
4612      if (TREE_CODE (arg2_type) != VECTOR_TYPE
4613	  && TREE_CODE (arg3_type) != VECTOR_TYPE)
4614	{
4615	  /* Rely on the error messages of the scalar version.  */
4616	  tree scal = build_conditional_expr_1 (loc, integer_one_node,
4617						orig_arg2, orig_arg3, complain);
4618	  if (scal == error_mark_node)
4619	    return error_mark_node;
4620	  tree stype = TREE_TYPE (scal);
4621	  tree ctype = TREE_TYPE (arg1_type);
4622	  if (TYPE_SIZE (stype) != TYPE_SIZE (ctype)
4623	      || (!INTEGRAL_TYPE_P (stype) && !SCALAR_FLOAT_TYPE_P (stype)))
4624	    {
4625	      if (complain & tf_error)
4626		error_at (loc, "inferred scalar type %qT is not an integer or "
4627			  "floating point type of the same size as %qT", stype,
4628			  COMPARISON_CLASS_P (arg1)
4629			  ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1, 0)))
4630			  : ctype);
4631	      return error_mark_node;
4632	    }
4633
4634	  tree vtype = build_opaque_vector_type (stype,
4635			 TYPE_VECTOR_SUBPARTS (arg1_type));
4636	  /* We could pass complain & tf_warning to unsafe_conversion_p,
4637	     but the warnings (like Wsign-conversion) have already been
4638	     given by the scalar build_conditional_expr_1. We still check
4639	     unsafe_conversion_p to forbid truncating long long -> float.  */
4640	  if (unsafe_conversion_p (loc, stype, arg2, false))
4641	    {
4642	      if (complain & tf_error)
4643		error_at (loc, "conversion of scalar %qT to vector %qT "
4644			       "involves truncation", arg2_type, vtype);
4645	      return error_mark_node;
4646	    }
4647	  if (unsafe_conversion_p (loc, stype, arg3, false))
4648	    {
4649	      if (complain & tf_error)
4650		error_at (loc, "conversion of scalar %qT to vector %qT "
4651			       "involves truncation", arg3_type, vtype);
4652	      return error_mark_node;
4653	    }
4654
4655	  arg2 = cp_convert (stype, arg2, complain);
4656	  arg2 = save_expr (arg2);
4657	  arg2 = build_vector_from_val (vtype, arg2);
4658	  arg2_type = vtype;
4659	  arg3 = cp_convert (stype, arg3, complain);
4660	  arg3 = save_expr (arg3);
4661	  arg3 = build_vector_from_val (vtype, arg3);
4662	  arg3_type = vtype;
4663	}
4664
4665      if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
4666	  != (TREE_CODE (arg3_type) == VECTOR_TYPE))
4667	{
4668	  enum stv_conv convert_flag =
4669	    scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
4670			      complain & tf_error);
4671
4672	  switch (convert_flag)
4673	    {
4674	      case stv_error:
4675		return error_mark_node;
4676	      case stv_firstarg:
4677		{
4678		  arg2 = save_expr (arg2);
4679		  arg2 = convert (TREE_TYPE (arg3_type), arg2);
4680		  arg2 = build_vector_from_val (arg3_type, arg2);
4681		  arg2_type = TREE_TYPE (arg2);
4682		  break;
4683		}
4684	      case stv_secondarg:
4685		{
4686		  arg3 = save_expr (arg3);
4687		  arg3 = convert (TREE_TYPE (arg2_type), arg3);
4688		  arg3 = build_vector_from_val (arg2_type, arg3);
4689		  arg3_type = TREE_TYPE (arg3);
4690		  break;
4691		}
4692	      default:
4693		break;
4694	    }
4695	}
4696
4697      if (!same_type_p (arg2_type, arg3_type)
4698	  || TYPE_VECTOR_SUBPARTS (arg1_type)
4699	     != TYPE_VECTOR_SUBPARTS (arg2_type)
4700	  || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4701	{
4702	  if (complain & tf_error)
4703	    error_at (loc,
4704		      "incompatible vector types in conditional expression: "
4705		      "%qT, %qT and %qT", TREE_TYPE (arg1),
4706		      TREE_TYPE (orig_arg2), TREE_TYPE (orig_arg3));
4707	  return error_mark_node;
4708	}
4709
4710      if (!COMPARISON_CLASS_P (arg1))
4711	arg1 = cp_build_binary_op (loc, NE_EXPR, arg1,
4712				   build_zero_cst (arg1_type), complain);
4713      return fold_build3 (VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4714    }
4715
4716  /* [expr.cond]
4717
4718     The first expression is implicitly converted to bool (clause
4719     _conv_).  */
4720  arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4721					    LOOKUP_NORMAL);
4722  if (error_operand_p (arg1))
4723    return error_mark_node;
4724
4725  /* [expr.cond]
4726
4727     If either the second or the third operand has type (possibly
4728     cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4729     array-to-pointer (_conv.array_), and function-to-pointer
4730     (_conv.func_) standard conversions are performed on the second
4731     and third operands.  */
4732  arg2_type = unlowered_expr_type (arg2);
4733  arg3_type = unlowered_expr_type (arg3);
4734  if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4735    {
4736      /* Do the conversions.  We don't these for `void' type arguments
4737	 since it can't have any effect and since decay_conversion
4738	 does not handle that case gracefully.  */
4739      if (!VOID_TYPE_P (arg2_type))
4740	arg2 = decay_conversion (arg2, complain);
4741      if (!VOID_TYPE_P (arg3_type))
4742	arg3 = decay_conversion (arg3, complain);
4743      arg2_type = TREE_TYPE (arg2);
4744      arg3_type = TREE_TYPE (arg3);
4745
4746      /* [expr.cond]
4747
4748	 One of the following shall hold:
4749
4750	 --The second or the third operand (but not both) is a
4751	   throw-expression (_except.throw_); the result is of the
4752	   type of the other and is an rvalue.
4753
4754	 --Both the second and the third operands have type void; the
4755	   result is of type void and is an rvalue.
4756
4757	 We must avoid calling force_rvalue for expressions of type
4758	 "void" because it will complain that their value is being
4759	 used.  */
4760      if (TREE_CODE (arg2) == THROW_EXPR
4761	  && TREE_CODE (arg3) != THROW_EXPR)
4762	{
4763	  if (!VOID_TYPE_P (arg3_type))
4764	    {
4765	      arg3 = force_rvalue (arg3, complain);
4766	      if (arg3 == error_mark_node)
4767		return error_mark_node;
4768	    }
4769	  arg3_type = TREE_TYPE (arg3);
4770	  result_type = arg3_type;
4771	}
4772      else if (TREE_CODE (arg2) != THROW_EXPR
4773	       && TREE_CODE (arg3) == THROW_EXPR)
4774	{
4775	  if (!VOID_TYPE_P (arg2_type))
4776	    {
4777	      arg2 = force_rvalue (arg2, complain);
4778	      if (arg2 == error_mark_node)
4779		return error_mark_node;
4780	    }
4781	  arg2_type = TREE_TYPE (arg2);
4782	  result_type = arg2_type;
4783	}
4784      else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4785	result_type = void_type_node;
4786      else
4787	{
4788          if (complain & tf_error)
4789            {
4790              if (VOID_TYPE_P (arg2_type))
4791                error_at (EXPR_LOC_OR_LOC (arg3, loc),
4792			  "second operand to the conditional operator "
4793			  "is of type %<void%>, but the third operand is "
4794			  "neither a throw-expression nor of type %<void%>");
4795              else
4796                error_at (EXPR_LOC_OR_LOC (arg2, loc),
4797			  "third operand to the conditional operator "
4798			  "is of type %<void%>, but the second operand is "
4799			  "neither a throw-expression nor of type %<void%>");
4800            }
4801	  return error_mark_node;
4802	}
4803
4804      lvalue_p = false;
4805      goto valid_operands;
4806    }
4807  /* [expr.cond]
4808
4809     Otherwise, if the second and third operand have different types,
4810     and either has (possibly cv-qualified) class type, or if both are
4811     glvalues of the same value category and the same type except for
4812     cv-qualification, an attempt is made to convert each of those operands
4813     to the type of the other.  */
4814  else if (!same_type_p (arg2_type, arg3_type)
4815	    && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)
4816		|| (same_type_ignoring_top_level_qualifiers_p (arg2_type,
4817							       arg3_type)
4818		    && lvalue_or_rvalue_with_address_p (arg2)
4819		    && lvalue_or_rvalue_with_address_p (arg3)
4820		    && real_lvalue_p (arg2) == real_lvalue_p (arg3))))
4821    {
4822      conversion *conv2;
4823      conversion *conv3;
4824      bool converted = false;
4825
4826      /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4827      p = conversion_obstack_alloc (0);
4828
4829      conv2 = conditional_conversion (arg2, arg3, complain);
4830      conv3 = conditional_conversion (arg3, arg2, complain);
4831
4832      /* [expr.cond]
4833
4834	 If both can be converted, or one can be converted but the
4835	 conversion is ambiguous, the program is ill-formed.  If
4836	 neither can be converted, the operands are left unchanged and
4837	 further checking is performed as described below.  If exactly
4838	 one conversion is possible, that conversion is applied to the
4839	 chosen operand and the converted operand is used in place of
4840	 the original operand for the remainder of this section.  */
4841      if ((conv2 && !conv2->bad_p
4842	   && conv3 && !conv3->bad_p)
4843	  || (conv2 && conv2->kind == ck_ambig)
4844	  || (conv3 && conv3->kind == ck_ambig))
4845	{
4846	  if (complain & tf_error)
4847	    {
4848	      error_at (loc, "operands to ?: have different types %qT and %qT",
4849			arg2_type, arg3_type);
4850	      if (conv2 && !conv2->bad_p && conv3 && !conv3->bad_p)
4851		inform (loc, "  and each type can be converted to the other");
4852	      else if (conv2 && conv2->kind == ck_ambig)
4853		convert_like (conv2, arg2, complain);
4854	      else
4855		convert_like (conv3, arg3, complain);
4856	    }
4857	  result = error_mark_node;
4858	}
4859      else if (conv2 && !conv2->bad_p)
4860	{
4861	  arg2 = convert_like (conv2, arg2, complain);
4862	  arg2 = convert_from_reference (arg2);
4863	  arg2_type = TREE_TYPE (arg2);
4864	  /* Even if CONV2 is a valid conversion, the result of the
4865	     conversion may be invalid.  For example, if ARG3 has type
4866	     "volatile X", and X does not have a copy constructor
4867	     accepting a "volatile X&", then even if ARG2 can be
4868	     converted to X, the conversion will fail.  */
4869	  if (error_operand_p (arg2))
4870	    result = error_mark_node;
4871	  converted = true;
4872	}
4873      else if (conv3 && !conv3->bad_p)
4874	{
4875	  arg3 = convert_like (conv3, arg3, complain);
4876	  arg3 = convert_from_reference (arg3);
4877	  arg3_type = TREE_TYPE (arg3);
4878	  if (error_operand_p (arg3))
4879	    result = error_mark_node;
4880	  converted = true;
4881	}
4882
4883      /* Free all the conversions we allocated.  */
4884      obstack_free (&conversion_obstack, p);
4885
4886      if (result)
4887	return result;
4888
4889      /* If, after the conversion, both operands have class type,
4890	 treat the cv-qualification of both operands as if it were the
4891	 union of the cv-qualification of the operands.
4892
4893	 The standard is not clear about what to do in this
4894	 circumstance.  For example, if the first operand has type
4895	 "const X" and the second operand has a user-defined
4896	 conversion to "volatile X", what is the type of the second
4897	 operand after this step?  Making it be "const X" (matching
4898	 the first operand) seems wrong, as that discards the
4899	 qualification without actually performing a copy.  Leaving it
4900	 as "volatile X" seems wrong as that will result in the
4901	 conditional expression failing altogether, even though,
4902	 according to this step, the one operand could be converted to
4903	 the type of the other.  */
4904      if (converted
4905	  && CLASS_TYPE_P (arg2_type)
4906	  && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4907	arg2_type = arg3_type =
4908	  cp_build_qualified_type (arg2_type,
4909				   cp_type_quals (arg2_type)
4910				   | cp_type_quals (arg3_type));
4911    }
4912
4913  /* [expr.cond]
4914
4915     If the second and third operands are glvalues of the same value
4916     category and have the same type, the result is of that type and
4917     value category.  */
4918  if (((real_lvalue_p (arg2) && real_lvalue_p (arg3))
4919       || (xvalue_p (arg2) && xvalue_p (arg3)))
4920      && same_type_p (arg2_type, arg3_type))
4921    {
4922      result_type = arg2_type;
4923      arg2 = mark_lvalue_use (arg2);
4924      arg3 = mark_lvalue_use (arg3);
4925      goto valid_operands;
4926    }
4927
4928  /* [expr.cond]
4929
4930     Otherwise, the result is an rvalue.  If the second and third
4931     operand do not have the same type, and either has (possibly
4932     cv-qualified) class type, overload resolution is used to
4933     determine the conversions (if any) to be applied to the operands
4934     (_over.match.oper_, _over.built_).  */
4935  lvalue_p = false;
4936  if (!same_type_p (arg2_type, arg3_type)
4937      && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4938    {
4939      tree args[3];
4940      conversion *conv;
4941      bool any_viable_p;
4942
4943      /* Rearrange the arguments so that add_builtin_candidate only has
4944	 to know about two args.  In build_builtin_candidate, the
4945	 arguments are unscrambled.  */
4946      args[0] = arg2;
4947      args[1] = arg3;
4948      args[2] = arg1;
4949      add_builtin_candidates (&candidates,
4950			      COND_EXPR,
4951			      NOP_EXPR,
4952			      ansi_opname (COND_EXPR),
4953			      args,
4954			      LOOKUP_NORMAL, complain);
4955
4956      /* [expr.cond]
4957
4958	 If the overload resolution fails, the program is
4959	 ill-formed.  */
4960      candidates = splice_viable (candidates, false, &any_viable_p);
4961      if (!any_viable_p)
4962	{
4963          if (complain & tf_error)
4964	    error_at (loc, "operands to ?: have different types %qT and %qT",
4965		      arg2_type, arg3_type);
4966	  return error_mark_node;
4967	}
4968      cand = tourney (candidates, complain);
4969      if (!cand)
4970	{
4971          if (complain & tf_error)
4972            {
4973              op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4974              print_z_candidates (loc, candidates);
4975            }
4976	  return error_mark_node;
4977	}
4978
4979      /* [expr.cond]
4980
4981	 Otherwise, the conversions thus determined are applied, and
4982	 the converted operands are used in place of the original
4983	 operands for the remainder of this section.  */
4984      conv = cand->convs[0];
4985      arg1 = convert_like (conv, arg1, complain);
4986      conv = cand->convs[1];
4987      arg2 = convert_like (conv, arg2, complain);
4988      arg2_type = TREE_TYPE (arg2);
4989      conv = cand->convs[2];
4990      arg3 = convert_like (conv, arg3, complain);
4991      arg3_type = TREE_TYPE (arg3);
4992    }
4993
4994  /* [expr.cond]
4995
4996     Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4997     and function-to-pointer (_conv.func_) standard conversions are
4998     performed on the second and third operands.
4999
5000     We need to force the lvalue-to-rvalue conversion here for class types,
5001     so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
5002     that isn't wrapped with a TARGET_EXPR plays havoc with exception
5003     regions.  */
5004
5005  arg2 = force_rvalue (arg2, complain);
5006  if (!CLASS_TYPE_P (arg2_type))
5007    arg2_type = TREE_TYPE (arg2);
5008
5009  arg3 = force_rvalue (arg3, complain);
5010  if (!CLASS_TYPE_P (arg3_type))
5011    arg3_type = TREE_TYPE (arg3);
5012
5013  if (arg2 == error_mark_node || arg3 == error_mark_node)
5014    return error_mark_node;
5015
5016  /* [expr.cond]
5017
5018     After those conversions, one of the following shall hold:
5019
5020     --The second and third operands have the same type; the result  is  of
5021       that type.  */
5022  if (same_type_p (arg2_type, arg3_type))
5023    result_type = arg2_type;
5024  /* [expr.cond]
5025
5026     --The second and third operands have arithmetic or enumeration
5027       type; the usual arithmetic conversions are performed to bring
5028       them to a common type, and the result is of that type.  */
5029  else if ((ARITHMETIC_TYPE_P (arg2_type)
5030	    || UNSCOPED_ENUM_P (arg2_type))
5031	   && (ARITHMETIC_TYPE_P (arg3_type)
5032	       || UNSCOPED_ENUM_P (arg3_type)))
5033    {
5034      /* In this case, there is always a common type.  */
5035      result_type = type_after_usual_arithmetic_conversions (arg2_type,
5036							     arg3_type);
5037      if (complain & tf_warning)
5038	do_warn_double_promotion (result_type, arg2_type, arg3_type,
5039				  "implicit conversion from %qT to %qT to "
5040				  "match other result of conditional",
5041				  loc);
5042
5043      if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
5044	  && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
5045        {
5046	  if (TREE_CODE (orig_arg2) == CONST_DECL
5047	      && TREE_CODE (orig_arg3) == CONST_DECL
5048	      && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
5049	    /* Two enumerators from the same enumeration can have different
5050	       types when the enumeration is still being defined.  */;
5051          else if (complain & tf_warning)
5052            warning_at (loc, OPT_Wenum_compare, "enumeral mismatch in "
5053			"conditional expression: %qT vs %qT",
5054			arg2_type, arg3_type);
5055        }
5056      else if (extra_warnings
5057	       && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
5058		    && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
5059		   || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
5060		       && !same_type_p (arg2_type,
5061					type_promotes_to (arg3_type)))))
5062        {
5063          if (complain & tf_warning)
5064            warning_at (loc, OPT_Wextra, "enumeral and non-enumeral type in "
5065			"conditional expression");
5066        }
5067
5068      arg2 = perform_implicit_conversion (result_type, arg2, complain);
5069      arg3 = perform_implicit_conversion (result_type, arg3, complain);
5070    }
5071  /* [expr.cond]
5072
5073     --The second and third operands have pointer type, or one has
5074       pointer type and the other is a null pointer constant; pointer
5075       conversions (_conv.ptr_) and qualification conversions
5076       (_conv.qual_) are performed to bring them to their composite
5077       pointer type (_expr.rel_).  The result is of the composite
5078       pointer type.
5079
5080     --The second and third operands have pointer to member type, or
5081       one has pointer to member type and the other is a null pointer
5082       constant; pointer to member conversions (_conv.mem_) and
5083       qualification conversions (_conv.qual_) are performed to bring
5084       them to a common type, whose cv-qualification shall match the
5085       cv-qualification of either the second or the third operand.
5086       The result is of the common type.  */
5087  else if ((null_ptr_cst_p (arg2)
5088	    && TYPE_PTR_OR_PTRMEM_P (arg3_type))
5089	   || (null_ptr_cst_p (arg3)
5090	       && TYPE_PTR_OR_PTRMEM_P (arg2_type))
5091	   || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
5092	   || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
5093	   || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
5094    {
5095      result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
5096					    arg3, CPO_CONDITIONAL_EXPR,
5097					    complain);
5098      if (result_type == error_mark_node)
5099	return error_mark_node;
5100      arg2 = perform_implicit_conversion (result_type, arg2, complain);
5101      arg3 = perform_implicit_conversion (result_type, arg3, complain);
5102    }
5103
5104  if (!result_type)
5105    {
5106      if (complain & tf_error)
5107        error_at (loc, "operands to ?: have different types %qT and %qT",
5108		  arg2_type, arg3_type);
5109      return error_mark_node;
5110    }
5111
5112  if (arg2 == error_mark_node || arg3 == error_mark_node)
5113    return error_mark_node;
5114
5115 valid_operands:
5116  result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
5117  if (!cp_unevaluated_operand)
5118    /* Avoid folding within decltype (c++/42013) and noexcept.  */
5119    result = fold_if_not_in_template (result);
5120
5121  /* We can't use result_type below, as fold might have returned a
5122     throw_expr.  */
5123
5124  if (!lvalue_p)
5125    {
5126      /* Expand both sides into the same slot, hopefully the target of
5127	 the ?: expression.  We used to check for TARGET_EXPRs here,
5128	 but now we sometimes wrap them in NOP_EXPRs so the test would
5129	 fail.  */
5130      if (CLASS_TYPE_P (TREE_TYPE (result)))
5131	result = get_target_expr_sfinae (result, complain);
5132      /* If this expression is an rvalue, but might be mistaken for an
5133	 lvalue, we must add a NON_LVALUE_EXPR.  */
5134      result = rvalue (result);
5135    }
5136  else
5137    result = force_paren_expr (result);
5138
5139  return result;
5140}
5141
5142/* Wrapper for above.  */
5143
5144tree
5145build_conditional_expr (location_t loc, tree arg1, tree arg2, tree arg3,
5146                        tsubst_flags_t complain)
5147{
5148  tree ret;
5149  bool subtime = timevar_cond_start (TV_OVERLOAD);
5150  ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
5151  timevar_cond_stop (TV_OVERLOAD, subtime);
5152  return ret;
5153}
5154
5155/* OPERAND is an operand to an expression.  Perform necessary steps
5156   required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
5157   returned.  */
5158
5159static tree
5160prep_operand (tree operand)
5161{
5162  if (operand)
5163    {
5164      if (CLASS_TYPE_P (TREE_TYPE (operand))
5165	  && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
5166	/* Make sure the template type is instantiated now.  */
5167	instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
5168    }
5169
5170  return operand;
5171}
5172
5173/* Add each of the viable functions in FNS (a FUNCTION_DECL or
5174   OVERLOAD) to the CANDIDATES, returning an updated list of
5175   CANDIDATES.  The ARGS are the arguments provided to the call;
5176   if FIRST_ARG is non-null it is the implicit object argument,
5177   otherwise the first element of ARGS is used if needed.  The
5178   EXPLICIT_TARGS are explicit template arguments provided.
5179   TEMPLATE_ONLY is true if only template functions should be
5180   considered.  CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
5181   add_function_candidate.  */
5182
5183static void
5184add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
5185		tree return_type,
5186		tree explicit_targs, bool template_only,
5187		tree conversion_path, tree access_path,
5188		int flags,
5189		struct z_candidate **candidates,
5190		tsubst_flags_t complain)
5191{
5192  tree ctype;
5193  const vec<tree, va_gc> *non_static_args;
5194  bool check_list_ctor;
5195  bool check_converting;
5196  unification_kind_t strict;
5197  tree fn;
5198
5199  if (!fns)
5200    return;
5201
5202  /* Precalculate special handling of constructors and conversion ops.  */
5203  fn = OVL_CURRENT (fns);
5204  if (DECL_CONV_FN_P (fn))
5205    {
5206      check_list_ctor = false;
5207      check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
5208      if (flags & LOOKUP_NO_CONVERSION)
5209	/* We're doing return_type(x).  */
5210	strict = DEDUCE_CONV;
5211      else
5212	/* We're doing x.operator return_type().  */
5213	strict = DEDUCE_EXACT;
5214      /* [over.match.funcs] For conversion functions, the function
5215	 is considered to be a member of the class of the implicit
5216	 object argument for the purpose of defining the type of
5217	 the implicit object parameter.  */
5218      ctype = TYPE_MAIN_VARIANT (TREE_TYPE (first_arg));
5219    }
5220  else
5221    {
5222      if (DECL_CONSTRUCTOR_P (fn))
5223	{
5224	  check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
5225	  /* For list-initialization we consider explicit constructors
5226	     and complain if one is chosen.  */
5227	  check_converting
5228	    = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
5229	       == LOOKUP_ONLYCONVERTING);
5230	}
5231      else
5232	{
5233	  check_list_ctor = false;
5234	  check_converting = false;
5235	}
5236      strict = DEDUCE_CALL;
5237      ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
5238    }
5239
5240  if (first_arg)
5241    non_static_args = args;
5242  else
5243    /* Delay creating the implicit this parameter until it is needed.  */
5244    non_static_args = NULL;
5245
5246  for (; fns; fns = OVL_NEXT (fns))
5247    {
5248      tree fn_first_arg;
5249      const vec<tree, va_gc> *fn_args;
5250
5251      fn = OVL_CURRENT (fns);
5252
5253      if (check_converting && DECL_NONCONVERTING_P (fn))
5254	continue;
5255      if (check_list_ctor && !is_list_ctor (fn))
5256	continue;
5257
5258      /* Figure out which set of arguments to use.  */
5259      if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5260	{
5261	  /* If this function is a non-static member and we didn't get an
5262	     implicit object argument, move it out of args.  */
5263	  if (first_arg == NULL_TREE)
5264	    {
5265	      unsigned int ix;
5266	      tree arg;
5267	      vec<tree, va_gc> *tempvec;
5268	      vec_alloc (tempvec, args->length () - 1);
5269	      for (ix = 1; args->iterate (ix, &arg); ++ix)
5270		tempvec->quick_push (arg);
5271	      non_static_args = tempvec;
5272	      first_arg = (*args)[0];
5273	    }
5274
5275	  fn_first_arg = first_arg;
5276	  fn_args = non_static_args;
5277	}
5278      else
5279	{
5280	  /* Otherwise, just use the list of arguments provided.  */
5281	  fn_first_arg = NULL_TREE;
5282	  fn_args = args;
5283	}
5284
5285      if (TREE_CODE (fn) == TEMPLATE_DECL)
5286	add_template_candidate (candidates,
5287				fn,
5288				ctype,
5289				explicit_targs,
5290				fn_first_arg,
5291				fn_args,
5292				return_type,
5293				access_path,
5294				conversion_path,
5295				flags,
5296				strict,
5297				complain);
5298      else if (!template_only)
5299	add_function_candidate (candidates,
5300				fn,
5301				ctype,
5302				fn_first_arg,
5303				fn_args,
5304				access_path,
5305				conversion_path,
5306				flags,
5307				complain);
5308    }
5309}
5310
5311static tree
5312build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5313		tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5314{
5315  struct z_candidate *candidates = 0, *cand;
5316  vec<tree, va_gc> *arglist;
5317  tree fnname;
5318  tree args[3];
5319  tree result = NULL_TREE;
5320  bool result_valid_p = false;
5321  enum tree_code code2 = NOP_EXPR;
5322  enum tree_code code_orig_arg1 = ERROR_MARK;
5323  enum tree_code code_orig_arg2 = ERROR_MARK;
5324  conversion *conv;
5325  void *p;
5326  bool strict_p;
5327  bool any_viable_p;
5328
5329  if (error_operand_p (arg1)
5330      || error_operand_p (arg2)
5331      || error_operand_p (arg3))
5332    return error_mark_node;
5333
5334  if (code == MODIFY_EXPR)
5335    {
5336      code2 = TREE_CODE (arg3);
5337      arg3 = NULL_TREE;
5338      fnname = ansi_assopname (code2);
5339    }
5340  else
5341    fnname = ansi_opname (code);
5342
5343  arg1 = prep_operand (arg1);
5344
5345  bool memonly = false;
5346  switch (code)
5347    {
5348    case NEW_EXPR:
5349    case VEC_NEW_EXPR:
5350    case VEC_DELETE_EXPR:
5351    case DELETE_EXPR:
5352      /* Use build_op_new_call and build_op_delete_call instead.  */
5353      gcc_unreachable ();
5354
5355    case CALL_EXPR:
5356      /* Use build_op_call instead.  */
5357      gcc_unreachable ();
5358
5359    case TRUTH_ORIF_EXPR:
5360    case TRUTH_ANDIF_EXPR:
5361    case TRUTH_AND_EXPR:
5362    case TRUTH_OR_EXPR:
5363      /* These are saved for the sake of warn_logical_operator.  */
5364      code_orig_arg1 = TREE_CODE (arg1);
5365      code_orig_arg2 = TREE_CODE (arg2);
5366      break;
5367    case GT_EXPR:
5368    case LT_EXPR:
5369    case GE_EXPR:
5370    case LE_EXPR:
5371    case EQ_EXPR:
5372    case NE_EXPR:
5373      /* These are saved for the sake of maybe_warn_bool_compare.  */
5374      code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
5375      code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
5376      break;
5377
5378      /* =, ->, [], () must be non-static member functions.  */
5379    case MODIFY_EXPR:
5380      if (code2 != NOP_EXPR)
5381	break;
5382    case COMPONENT_REF:
5383    case ARRAY_REF:
5384      memonly = true;
5385      break;
5386
5387    default:
5388      break;
5389    }
5390
5391  arg2 = prep_operand (arg2);
5392  arg3 = prep_operand (arg3);
5393
5394  if (code == COND_EXPR)
5395    /* Use build_conditional_expr instead.  */
5396    gcc_unreachable ();
5397  else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5398	   && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5399    goto builtin;
5400
5401  if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5402    arg2 = integer_zero_node;
5403
5404  vec_alloc (arglist, 3);
5405  arglist->quick_push (arg1);
5406  if (arg2 != NULL_TREE)
5407    arglist->quick_push (arg2);
5408  if (arg3 != NULL_TREE)
5409    arglist->quick_push (arg3);
5410
5411  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5412  p = conversion_obstack_alloc (0);
5413
5414  /* Add namespace-scope operators to the list of functions to
5415     consider.  */
5416  if (!memonly)
5417    add_candidates (lookup_function_nonclass (fnname, arglist,
5418					      /*block_p=*/true),
5419		    NULL_TREE, arglist, NULL_TREE,
5420		    NULL_TREE, false, NULL_TREE, NULL_TREE,
5421		    flags, &candidates, complain);
5422
5423  args[0] = arg1;
5424  args[1] = arg2;
5425  args[2] = NULL_TREE;
5426
5427  /* Add class-member operators to the candidate set.  */
5428  if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5429    {
5430      tree fns;
5431
5432      fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5433      if (fns == error_mark_node)
5434	{
5435	  result = error_mark_node;
5436	  goto user_defined_result_ready;
5437	}
5438      if (fns)
5439	add_candidates (BASELINK_FUNCTIONS (fns),
5440			NULL_TREE, arglist, NULL_TREE,
5441			NULL_TREE, false,
5442			BASELINK_BINFO (fns),
5443			BASELINK_ACCESS_BINFO (fns),
5444			flags, &candidates, complain);
5445    }
5446  /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5447     only non-member functions that have type T1 or reference to
5448     cv-qualified-opt T1 for the first argument, if the first argument
5449     has an enumeration type, or T2 or reference to cv-qualified-opt
5450     T2 for the second argument, if the the second argument has an
5451     enumeration type.  Filter out those that don't match.  */
5452  else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5453    {
5454      struct z_candidate **candp, **next;
5455
5456      for (candp = &candidates; *candp; candp = next)
5457	{
5458	  tree parmlist, parmtype;
5459	  int i, nargs = (arg2 ? 2 : 1);
5460
5461	  cand = *candp;
5462	  next = &cand->next;
5463
5464	  parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5465
5466	  for (i = 0; i < nargs; ++i)
5467	    {
5468	      parmtype = TREE_VALUE (parmlist);
5469
5470	      if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5471		parmtype = TREE_TYPE (parmtype);
5472	      if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5473		  && (same_type_ignoring_top_level_qualifiers_p
5474		      (TREE_TYPE (args[i]), parmtype)))
5475		break;
5476
5477	      parmlist = TREE_CHAIN (parmlist);
5478	    }
5479
5480	  /* No argument has an appropriate type, so remove this
5481	     candidate function from the list.  */
5482	  if (i == nargs)
5483	    {
5484	      *candp = cand->next;
5485	      next = candp;
5486	    }
5487	}
5488    }
5489
5490  add_builtin_candidates (&candidates, code, code2, fnname, args,
5491			  flags, complain);
5492
5493  switch (code)
5494    {
5495    case COMPOUND_EXPR:
5496    case ADDR_EXPR:
5497      /* For these, the built-in candidates set is empty
5498	 [over.match.oper]/3.  We don't want non-strict matches
5499	 because exact matches are always possible with built-in
5500	 operators.  The built-in candidate set for COMPONENT_REF
5501	 would be empty too, but since there are no such built-in
5502	 operators, we accept non-strict matches for them.  */
5503      strict_p = true;
5504      break;
5505
5506    default:
5507      strict_p = false;
5508      break;
5509    }
5510
5511  candidates = splice_viable (candidates, strict_p, &any_viable_p);
5512  if (!any_viable_p)
5513    {
5514      switch (code)
5515	{
5516	case POSTINCREMENT_EXPR:
5517	case POSTDECREMENT_EXPR:
5518	  /* Don't try anything fancy if we're not allowed to produce
5519	     errors.  */
5520	  if (!(complain & tf_error))
5521	    return error_mark_node;
5522
5523	  /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5524	     distinguish between prefix and postfix ++ and
5525	     operator++() was used for both, so we allow this with
5526	     -fpermissive.  */
5527	  else
5528	    {
5529	      const char *msg = (flag_permissive)
5530		? G_("no %<%D(int)%> declared for postfix %qs,"
5531		     " trying prefix operator instead")
5532		: G_("no %<%D(int)%> declared for postfix %qs");
5533	      permerror (loc, msg, fnname, operator_name_info[code].name);
5534	    }
5535
5536	  if (!flag_permissive)
5537	    return error_mark_node;
5538
5539	  if (code == POSTINCREMENT_EXPR)
5540	    code = PREINCREMENT_EXPR;
5541	  else
5542	    code = PREDECREMENT_EXPR;
5543	  result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5544				   NULL_TREE, overload, complain);
5545	  break;
5546
5547	  /* The caller will deal with these.  */
5548	case ADDR_EXPR:
5549	case COMPOUND_EXPR:
5550	case COMPONENT_REF:
5551	  result = NULL_TREE;
5552	  result_valid_p = true;
5553	  break;
5554
5555	default:
5556	  if (complain & tf_error)
5557	    {
5558		/* If one of the arguments of the operator represents
5559		   an invalid use of member function pointer, try to report
5560		   a meaningful error ...  */
5561		if (invalid_nonstatic_memfn_p (arg1, tf_error)
5562		    || invalid_nonstatic_memfn_p (arg2, tf_error)
5563		    || invalid_nonstatic_memfn_p (arg3, tf_error))
5564		  /* We displayed the error message.  */;
5565		else
5566		  {
5567		    /* ... Otherwise, report the more generic
5568		       "no matching operator found" error */
5569		    op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5570		    print_z_candidates (loc, candidates);
5571		  }
5572	    }
5573	  result = error_mark_node;
5574	  break;
5575	}
5576    }
5577  else
5578    {
5579      cand = tourney (candidates, complain);
5580      if (cand == 0)
5581	{
5582	  if (complain & tf_error)
5583	    {
5584	      op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5585	      print_z_candidates (loc, candidates);
5586	    }
5587	  result = error_mark_node;
5588	}
5589      else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5590	{
5591	  if (overload)
5592	    *overload = cand->fn;
5593
5594	  if (resolve_args (arglist, complain) == NULL)
5595	    result = error_mark_node;
5596	  else
5597	    result = build_over_call (cand, LOOKUP_NORMAL, complain);
5598	}
5599      else
5600	{
5601	  /* Give any warnings we noticed during overload resolution.  */
5602	  if (cand->warnings && (complain & tf_warning))
5603	    {
5604	      struct candidate_warning *w;
5605	      for (w = cand->warnings; w; w = w->next)
5606		joust (cand, w->loser, 1, complain);
5607	    }
5608
5609	  /* Check for comparison of different enum types.  */
5610	  switch (code)
5611	    {
5612	    case GT_EXPR:
5613	    case LT_EXPR:
5614	    case GE_EXPR:
5615	    case LE_EXPR:
5616	    case EQ_EXPR:
5617	    case NE_EXPR:
5618	      if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5619		  && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5620		  && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5621		      != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5622		  && (complain & tf_warning))
5623		{
5624		  warning (OPT_Wenum_compare,
5625			   "comparison between %q#T and %q#T",
5626			   TREE_TYPE (arg1), TREE_TYPE (arg2));
5627		}
5628	      break;
5629	    default:
5630	      break;
5631	    }
5632
5633	  /* We need to strip any leading REF_BIND so that bitfields
5634	     don't cause errors.  This should not remove any important
5635	     conversions, because builtins don't apply to class
5636	     objects directly.  */
5637	  conv = cand->convs[0];
5638	  if (conv->kind == ck_ref_bind)
5639	    conv = next_conversion (conv);
5640	  arg1 = convert_like (conv, arg1, complain);
5641
5642	  if (arg2)
5643	    {
5644	      conv = cand->convs[1];
5645	      if (conv->kind == ck_ref_bind)
5646		conv = next_conversion (conv);
5647	      else
5648		arg2 = decay_conversion (arg2, complain);
5649
5650	      /* We need to call warn_logical_operator before
5651		 converting arg2 to a boolean_type, but after
5652		 decaying an enumerator to its value.  */
5653	      if (complain & tf_warning)
5654		warn_logical_operator (loc, code, boolean_type_node,
5655				       code_orig_arg1, arg1,
5656				       code_orig_arg2, arg2);
5657
5658	      arg2 = convert_like (conv, arg2, complain);
5659	    }
5660	  if (arg3)
5661	    {
5662	      conv = cand->convs[2];
5663	      if (conv->kind == ck_ref_bind)
5664		conv = next_conversion (conv);
5665	      arg3 = convert_like (conv, arg3, complain);
5666	    }
5667
5668	}
5669    }
5670
5671 user_defined_result_ready:
5672
5673  /* Free all the conversions we allocated.  */
5674  obstack_free (&conversion_obstack, p);
5675
5676  if (result || result_valid_p)
5677    return result;
5678
5679 builtin:
5680  switch (code)
5681    {
5682    case MODIFY_EXPR:
5683      return cp_build_modify_expr (arg1, code2, arg2, complain);
5684
5685    case INDIRECT_REF:
5686      return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5687
5688    case TRUTH_ANDIF_EXPR:
5689    case TRUTH_ORIF_EXPR:
5690    case TRUTH_AND_EXPR:
5691    case TRUTH_OR_EXPR:
5692      if (complain & tf_warning)
5693	warn_logical_operator (loc, code, boolean_type_node,
5694			       code_orig_arg1, arg1, code_orig_arg2, arg2);
5695      /* Fall through.  */
5696    case GT_EXPR:
5697    case LT_EXPR:
5698    case GE_EXPR:
5699    case LE_EXPR:
5700    case EQ_EXPR:
5701    case NE_EXPR:
5702      if ((complain & tf_warning)
5703	  && ((code_orig_arg1 == BOOLEAN_TYPE)
5704	      ^ (code_orig_arg2 == BOOLEAN_TYPE)))
5705	maybe_warn_bool_compare (loc, code, arg1, arg2);
5706      /* Fall through.  */
5707    case PLUS_EXPR:
5708    case MINUS_EXPR:
5709    case MULT_EXPR:
5710    case TRUNC_DIV_EXPR:
5711    case MAX_EXPR:
5712    case MIN_EXPR:
5713    case LSHIFT_EXPR:
5714    case RSHIFT_EXPR:
5715    case TRUNC_MOD_EXPR:
5716    case BIT_AND_EXPR:
5717    case BIT_IOR_EXPR:
5718    case BIT_XOR_EXPR:
5719      return cp_build_binary_op (loc, code, arg1, arg2, complain);
5720
5721    case UNARY_PLUS_EXPR:
5722    case NEGATE_EXPR:
5723    case BIT_NOT_EXPR:
5724    case TRUTH_NOT_EXPR:
5725    case PREINCREMENT_EXPR:
5726    case POSTINCREMENT_EXPR:
5727    case PREDECREMENT_EXPR:
5728    case POSTDECREMENT_EXPR:
5729    case REALPART_EXPR:
5730    case IMAGPART_EXPR:
5731    case ABS_EXPR:
5732      return cp_build_unary_op (code, arg1, candidates != 0, complain);
5733
5734    case ARRAY_REF:
5735      return cp_build_array_ref (input_location, arg1, arg2, complain);
5736
5737    case MEMBER_REF:
5738      return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5739                                                           complain),
5740                                    arg2, complain);
5741
5742      /* The caller will deal with these.  */
5743    case ADDR_EXPR:
5744    case COMPONENT_REF:
5745    case COMPOUND_EXPR:
5746      return NULL_TREE;
5747
5748    default:
5749      gcc_unreachable ();
5750    }
5751  return NULL_TREE;
5752}
5753
5754/* Wrapper for above.  */
5755
5756tree
5757build_new_op (location_t loc, enum tree_code code, int flags,
5758	      tree arg1, tree arg2, tree arg3,
5759	      tree *overload, tsubst_flags_t complain)
5760{
5761  tree ret;
5762  bool subtime = timevar_cond_start (TV_OVERLOAD);
5763  ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5764			overload, complain);
5765  timevar_cond_stop (TV_OVERLOAD, subtime);
5766  return ret;
5767}
5768
5769/* Returns true iff T, an element of an OVERLOAD chain, is a usual
5770   deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]).  */
5771
5772bool
5773non_placement_deallocation_fn_p (tree t)
5774{
5775  /* A template instance is never a usual deallocation function,
5776     regardless of its signature.  */
5777  if (TREE_CODE (t) == TEMPLATE_DECL
5778      || primary_template_instantiation_p (t))
5779    return false;
5780
5781  /* If a class T has a member deallocation function named operator delete
5782     with exactly one parameter, then that function is a usual
5783     (non-placement) deallocation function. If class T does not declare
5784     such an operator delete but does declare a member deallocation
5785     function named operator delete with exactly two parameters, the second
5786     of which has type std::size_t (18.2), then this function is a usual
5787     deallocation function.  */
5788  bool global = DECL_NAMESPACE_SCOPE_P (t);
5789  t = FUNCTION_ARG_CHAIN (t);
5790  if (t == void_list_node
5791      || (t && same_type_p (TREE_VALUE (t), size_type_node)
5792	  && (!global || flag_sized_deallocation)
5793	  && TREE_CHAIN (t) == void_list_node))
5794    return true;
5795  return false;
5796}
5797
5798/* Build a call to operator delete.  This has to be handled very specially,
5799   because the restrictions on what signatures match are different from all
5800   other call instances.  For a normal delete, only a delete taking (void *)
5801   or (void *, size_t) is accepted.  For a placement delete, only an exact
5802   match with the placement new is accepted.
5803
5804   CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5805   ADDR is the pointer to be deleted.
5806   SIZE is the size of the memory block to be deleted.
5807   GLOBAL_P is true if the delete-expression should not consider
5808   class-specific delete operators.
5809   PLACEMENT is the corresponding placement new call, or NULL_TREE.
5810
5811   If this call to "operator delete" is being generated as part to
5812   deallocate memory allocated via a new-expression (as per [expr.new]
5813   which requires that if the initialization throws an exception then
5814   we call a deallocation function), then ALLOC_FN is the allocation
5815   function.  */
5816
5817tree
5818build_op_delete_call (enum tree_code code, tree addr, tree size,
5819		      bool global_p, tree placement,
5820		      tree alloc_fn, tsubst_flags_t complain)
5821{
5822  tree fn = NULL_TREE;
5823  tree fns, fnname, type, t;
5824
5825  if (addr == error_mark_node)
5826    return error_mark_node;
5827
5828  type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5829
5830  fnname = ansi_opname (code);
5831
5832  if (CLASS_TYPE_P (type)
5833      && COMPLETE_TYPE_P (complete_type (type))
5834      && !global_p)
5835    /* In [class.free]
5836
5837       If the result of the lookup is ambiguous or inaccessible, or if
5838       the lookup selects a placement deallocation function, the
5839       program is ill-formed.
5840
5841       Therefore, we ask lookup_fnfields to complain about ambiguity.  */
5842    {
5843      fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5844      if (fns == error_mark_node)
5845	return error_mark_node;
5846    }
5847  else
5848    fns = NULL_TREE;
5849
5850  if (fns == NULL_TREE)
5851    fns = lookup_name_nonclass (fnname);
5852
5853  /* Strip const and volatile from addr.  */
5854  addr = cp_convert (ptr_type_node, addr, complain);
5855
5856  if (placement)
5857    {
5858      /* "A declaration of a placement deallocation function matches the
5859	 declaration of a placement allocation function if it has the same
5860	 number of parameters and, after parameter transformations (8.3.5),
5861	 all parameter types except the first are identical."
5862
5863	 So we build up the function type we want and ask instantiate_type
5864	 to get it for us.  */
5865      t = FUNCTION_ARG_CHAIN (alloc_fn);
5866      t = tree_cons (NULL_TREE, ptr_type_node, t);
5867      t = build_function_type (void_type_node, t);
5868
5869      fn = instantiate_type (t, fns, tf_none);
5870      if (fn == error_mark_node)
5871	return NULL_TREE;
5872
5873      if (BASELINK_P (fn))
5874	fn = BASELINK_FUNCTIONS (fn);
5875
5876      /* "If the lookup finds the two-parameter form of a usual deallocation
5877	 function (3.7.4.2) and that function, considered as a placement
5878	 deallocation function, would have been selected as a match for the
5879	 allocation function, the program is ill-formed."  */
5880      if (non_placement_deallocation_fn_p (fn))
5881	{
5882	  /* But if the class has an operator delete (void *), then that is
5883	     the usual deallocation function, so we shouldn't complain
5884	     about using the operator delete (void *, size_t).  */
5885	  for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5886	       t; t = OVL_NEXT (t))
5887	    {
5888	      tree elt = OVL_CURRENT (t);
5889	      if (non_placement_deallocation_fn_p (elt)
5890		  && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5891		goto ok;
5892	    }
5893	  if (complain & tf_error)
5894	    {
5895	      permerror (0, "non-placement deallocation function %q+D", fn);
5896	      permerror (input_location, "selected for placement delete");
5897	    }
5898	  else
5899	    return error_mark_node;
5900	ok:;
5901	}
5902    }
5903  else
5904    /* "Any non-placement deallocation function matches a non-placement
5905       allocation function. If the lookup finds a single matching
5906       deallocation function, that function will be called; otherwise, no
5907       deallocation function will be called."  */
5908    for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5909	 t; t = OVL_NEXT (t))
5910      {
5911	tree elt = OVL_CURRENT (t);
5912	if (non_placement_deallocation_fn_p (elt))
5913	  {
5914	    fn = elt;
5915	    /* "If a class T has a member deallocation function named
5916	       operator delete with exactly one parameter, then that
5917	       function is a usual (non-placement) deallocation
5918	       function. If class T does not declare such an operator
5919	       delete but does declare a member deallocation function named
5920	       operator delete with exactly two parameters, the second of
5921	       which has type std::size_t (18.2), then this function is a
5922	       usual deallocation function."
5923
5924	       So in a class (void*) beats (void*, size_t).  */
5925	    if (DECL_CLASS_SCOPE_P (fn))
5926	      {
5927		if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5928		  break;
5929	      }
5930	    /* At global scope (in C++14 and above) the rules are different:
5931
5932	       If deallocation function lookup finds both a usual
5933	       deallocation function with only a pointer parameter and a
5934	       usual deallocation function with both a pointer parameter
5935	       and a size parameter, the function to be called is selected
5936	       as follows:
5937
5938	       * If the type is complete and if, for the second alternative
5939	       (delete array) only, the operand is a pointer to a class
5940	       type with a non-trivial destructor or a (possibly
5941	       multi-dimensional) array thereof, the function with two
5942	       parameters is selected.
5943
5944	       * Otherwise, it is unspecified which of the two deallocation
5945	       functions is selected. */
5946	    else
5947	      {
5948		bool want_size = COMPLETE_TYPE_P (type);
5949		if (code == VEC_DELETE_EXPR
5950		    && !TYPE_VEC_NEW_USES_COOKIE (type))
5951		  /* We need a cookie to determine the array size.  */
5952		  want_size = false;
5953		bool have_size = (FUNCTION_ARG_CHAIN (fn) != void_list_node);
5954		if (want_size == have_size)
5955		  break;
5956	      }
5957	  }
5958      }
5959
5960  /* If we have a matching function, call it.  */
5961  if (fn)
5962    {
5963      gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5964
5965      /* If the FN is a member function, make sure that it is
5966	 accessible.  */
5967      if (BASELINK_P (fns))
5968	perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5969				       complain);
5970
5971      /* Core issue 901: It's ok to new a type with deleted delete.  */
5972      if (DECL_DELETED_FN (fn) && alloc_fn)
5973	return NULL_TREE;
5974
5975      if (placement)
5976	{
5977	  /* The placement args might not be suitable for overload
5978	     resolution at this point, so build the call directly.  */
5979	  int nargs = call_expr_nargs (placement);
5980	  tree *argarray = XALLOCAVEC (tree, nargs);
5981	  int i;
5982	  argarray[0] = addr;
5983	  for (i = 1; i < nargs; i++)
5984	    argarray[i] = CALL_EXPR_ARG (placement, i);
5985	  if (!mark_used (fn, complain) && !(complain & tf_error))
5986	    return error_mark_node;
5987	  return build_cxx_call (fn, nargs, argarray, complain);
5988	}
5989      else
5990	{
5991	  tree ret;
5992	  vec<tree, va_gc> *args = make_tree_vector ();
5993	  args->quick_push (addr);
5994	  if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5995	    args->quick_push (size);
5996	  ret = cp_build_function_call_vec (fn, &args, complain);
5997	  release_tree_vector (args);
5998	  return ret;
5999	}
6000    }
6001
6002  /* [expr.new]
6003
6004     If no unambiguous matching deallocation function can be found,
6005     propagating the exception does not cause the object's memory to
6006     be freed.  */
6007  if (alloc_fn)
6008    {
6009      if ((complain & tf_warning)
6010	  && !placement)
6011	warning (0, "no corresponding deallocation function for %qD",
6012		 alloc_fn);
6013      return NULL_TREE;
6014    }
6015
6016  if (complain & tf_error)
6017    error ("no suitable %<operator %s%> for %qT",
6018	   operator_name_info[(int)code].name, type);
6019  return error_mark_node;
6020}
6021
6022/* If the current scope isn't allowed to access DECL along
6023   BASETYPE_PATH, give an error.  The most derived class in
6024   BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
6025   the declaration to use in the error diagnostic.  */
6026
6027bool
6028enforce_access (tree basetype_path, tree decl, tree diag_decl,
6029		tsubst_flags_t complain)
6030{
6031  gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
6032
6033  if (!accessible_p (basetype_path, decl, true))
6034    {
6035      if (complain & tf_error)
6036	{
6037	  if (TREE_PRIVATE (decl))
6038	    error ("%q+#D is private", diag_decl);
6039	  else if (TREE_PROTECTED (decl))
6040	    error ("%q+#D is protected", diag_decl);
6041	  else
6042	    error ("%q+#D is inaccessible", diag_decl);
6043	  error ("within this context");
6044	}
6045      return false;
6046    }
6047
6048  return true;
6049}
6050
6051/* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
6052   bitwise or of LOOKUP_* values.  If any errors are warnings are
6053   generated, set *DIAGNOSTIC_FN to "error" or "warning",
6054   respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
6055   to NULL.  */
6056
6057static tree
6058build_temp (tree expr, tree type, int flags,
6059	    diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
6060{
6061  int savew, savee;
6062  vec<tree, va_gc> *args;
6063
6064  savew = warningcount + werrorcount, savee = errorcount;
6065  args = make_tree_vector_single (expr);
6066  expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6067				    &args, type, flags, complain);
6068  release_tree_vector (args);
6069  if (warningcount + werrorcount > savew)
6070    *diagnostic_kind = DK_WARNING;
6071  else if (errorcount > savee)
6072    *diagnostic_kind = DK_ERROR;
6073  else
6074    *diagnostic_kind = DK_UNSPECIFIED;
6075  return expr;
6076}
6077
6078/* Perform warnings about peculiar, but valid, conversions from/to NULL.
6079   EXPR is implicitly converted to type TOTYPE.
6080   FN and ARGNUM are used for diagnostics.  */
6081
6082static void
6083conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
6084{
6085  /* Issue warnings about peculiar, but valid, uses of NULL.  */
6086  if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
6087      && ARITHMETIC_TYPE_P (totype))
6088    {
6089      source_location loc =
6090	expansion_point_location_if_in_system_header (input_location);
6091
6092      if (fn)
6093	warning_at (loc, OPT_Wconversion_null,
6094		    "passing NULL to non-pointer argument %P of %qD",
6095		    argnum, fn);
6096      else
6097	warning_at (loc, OPT_Wconversion_null,
6098		    "converting to non-pointer type %qT from NULL", totype);
6099    }
6100
6101  /* Issue warnings if "false" is converted to a NULL pointer */
6102  else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
6103	   && TYPE_PTR_P (totype))
6104    {
6105      if (fn)
6106	warning_at (input_location, OPT_Wconversion_null,
6107		    "converting %<false%> to pointer type for argument %P "
6108		    "of %qD", argnum, fn);
6109      else
6110	warning_at (input_location, OPT_Wconversion_null,
6111		    "converting %<false%> to pointer type %qT", totype);
6112    }
6113}
6114
6115/* We gave a diagnostic during a conversion.  If this was in the second
6116   standard conversion sequence of a user-defined conversion sequence, say
6117   which user-defined conversion.  */
6118
6119static void
6120maybe_print_user_conv_context (conversion *convs)
6121{
6122  if (convs->user_conv_p)
6123    for (conversion *t = convs; t; t = next_conversion (t))
6124      if (t->kind == ck_user)
6125	{
6126	  print_z_candidate (0, "  after user-defined conversion:",
6127			     t->cand);
6128	  break;
6129	}
6130}
6131
6132/* Perform the conversions in CONVS on the expression EXPR.  FN and
6133   ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
6134   indicates the `this' argument of a method.  INNER is nonzero when
6135   being called to continue a conversion chain. It is negative when a
6136   reference binding will be applied, positive otherwise.  If
6137   ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6138   conversions will be emitted if appropriate.  If C_CAST_P is true,
6139   this conversion is coming from a C-style cast; in that case,
6140   conversions to inaccessible bases are permitted.  */
6141
6142static tree
6143convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
6144		   int inner, bool issue_conversion_warnings,
6145		   bool c_cast_p, tsubst_flags_t complain)
6146{
6147  tree totype = convs->type;
6148  diagnostic_t diag_kind;
6149  int flags;
6150  location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6151
6152  if (convs->bad_p && !(complain & tf_error))
6153    return error_mark_node;
6154
6155  if (convs->bad_p
6156      && convs->kind != ck_user
6157      && convs->kind != ck_list
6158      && convs->kind != ck_ambig
6159      && (convs->kind != ck_ref_bind
6160	  || (convs->user_conv_p && next_conversion (convs)->bad_p))
6161      && (convs->kind != ck_rvalue
6162	  || SCALAR_TYPE_P (totype))
6163      && convs->kind != ck_base)
6164    {
6165      bool complained = false;
6166      conversion *t = convs;
6167
6168      /* Give a helpful error if this is bad because of excess braces.  */
6169      if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6170	  && SCALAR_TYPE_P (totype)
6171	  && CONSTRUCTOR_NELTS (expr) > 0
6172	  && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
6173	{
6174	  complained = permerror (loc, "too many braces around initializer "
6175				  "for %qT", totype);
6176	  while (BRACE_ENCLOSED_INITIALIZER_P (expr)
6177		 && CONSTRUCTOR_NELTS (expr) == 1)
6178	    expr = CONSTRUCTOR_ELT (expr, 0)->value;
6179	}
6180
6181      /* Give a helpful error if this is bad because a conversion to bool
6182	 from std::nullptr_t requires direct-initialization.  */
6183      if (NULLPTR_TYPE_P (TREE_TYPE (expr))
6184	  && TREE_CODE (totype) == BOOLEAN_TYPE)
6185	complained = permerror (loc, "converting to %qT from %qT requires "
6186				"direct-initialization",
6187				totype, TREE_TYPE (expr));
6188
6189      for (; t ; t = next_conversion (t))
6190	{
6191	  if (t->kind == ck_user && t->cand->reason)
6192	    {
6193	      complained = permerror (loc, "invalid user-defined conversion "
6194				      "from %qT to %qT", TREE_TYPE (expr),
6195				      totype);
6196	      if (complained)
6197		print_z_candidate (loc, "candidate is:", t->cand);
6198	      expr = convert_like_real (t, expr, fn, argnum, 1,
6199					/*issue_conversion_warnings=*/false,
6200					/*c_cast_p=*/false,
6201					complain);
6202	      if (convs->kind == ck_ref_bind)
6203		expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
6204					     LOOKUP_NORMAL, NULL_TREE,
6205					     complain);
6206	      else
6207		expr = cp_convert (totype, expr, complain);
6208	      if (complained && fn)
6209		inform (DECL_SOURCE_LOCATION (fn),
6210			"  initializing argument %P of %qD", argnum, fn);
6211	      return expr;
6212	    }
6213	  else if (t->kind == ck_user || !t->bad_p)
6214	    {
6215	      expr = convert_like_real (t, expr, fn, argnum, 1,
6216					/*issue_conversion_warnings=*/false,
6217					/*c_cast_p=*/false,
6218					complain);
6219	      break;
6220	    }
6221	  else if (t->kind == ck_ambig)
6222	    return convert_like_real (t, expr, fn, argnum, 1,
6223				      /*issue_conversion_warnings=*/false,
6224				      /*c_cast_p=*/false,
6225				      complain);
6226	  else if (t->kind == ck_identity)
6227	    break;
6228	}
6229      if (!complained)
6230	complained = permerror (loc, "invalid conversion from %qT to %qT",
6231				TREE_TYPE (expr), totype);
6232      if (complained && fn)
6233	inform (DECL_SOURCE_LOCATION (fn),
6234		"  initializing argument %P of %qD", argnum, fn);
6235
6236      return cp_convert (totype, expr, complain);
6237    }
6238
6239  if (issue_conversion_warnings && (complain & tf_warning))
6240    conversion_null_warnings (totype, expr, fn, argnum);
6241
6242  switch (convs->kind)
6243    {
6244    case ck_user:
6245      {
6246	struct z_candidate *cand = convs->cand;
6247	tree convfn = cand->fn;
6248	unsigned i;
6249
6250	/* When converting from an init list we consider explicit
6251	   constructors, but actually trying to call one is an error.  */
6252	if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
6253	    && BRACE_ENCLOSED_INITIALIZER_P (expr)
6254	    /* Unless this is for direct-list-initialization.  */
6255	    && !CONSTRUCTOR_IS_DIRECT_INIT (expr))
6256	  {
6257	    if (!(complain & tf_error))
6258	      return error_mark_node;
6259	    error ("converting to %qT from initializer list would use "
6260		   "explicit constructor %qD", totype, convfn);
6261	  }
6262
6263	/* If we're initializing from {}, it's value-initialization.  */
6264	if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6265	    && CONSTRUCTOR_NELTS (expr) == 0
6266	    && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
6267	  {
6268	    bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
6269	    expr = build_value_init (totype, complain);
6270	    expr = get_target_expr_sfinae (expr, complain);
6271	    if (expr != error_mark_node)
6272	      {
6273		TARGET_EXPR_LIST_INIT_P (expr) = true;
6274		TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
6275	      }
6276	    return expr;
6277	  }
6278
6279	expr = mark_rvalue_use (expr);
6280
6281	/* Set user_conv_p on the argument conversions, so rvalue/base
6282	   handling knows not to allow any more UDCs.  */
6283	for (i = 0; i < cand->num_convs; ++i)
6284	  cand->convs[i]->user_conv_p = true;
6285
6286	expr = build_over_call (cand, LOOKUP_NORMAL, complain);
6287
6288	/* If this is a constructor or a function returning an aggr type,
6289	   we need to build up a TARGET_EXPR.  */
6290	if (DECL_CONSTRUCTOR_P (convfn))
6291	  {
6292	    expr = build_cplus_new (totype, expr, complain);
6293
6294	    /* Remember that this was list-initialization.  */
6295	    if (convs->check_narrowing && expr != error_mark_node)
6296	      TARGET_EXPR_LIST_INIT_P (expr) = true;
6297	  }
6298
6299	return expr;
6300      }
6301    case ck_identity:
6302      if (BRACE_ENCLOSED_INITIALIZER_P (expr))
6303	{
6304	  int nelts = CONSTRUCTOR_NELTS (expr);
6305	  if (nelts == 0)
6306	    expr = build_value_init (totype, complain);
6307	  else if (nelts == 1)
6308	    expr = CONSTRUCTOR_ELT (expr, 0)->value;
6309	  else
6310	    gcc_unreachable ();
6311	}
6312      expr = mark_rvalue_use (expr);
6313
6314      if (type_unknown_p (expr))
6315	expr = instantiate_type (totype, expr, complain);
6316      /* Convert a constant to its underlying value, unless we are
6317	 about to bind it to a reference, in which case we need to
6318	 leave it as an lvalue.  */
6319      if (inner >= 0)
6320        {
6321          expr = scalar_constant_value (expr);
6322          if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6323            /* If __null has been converted to an integer type, we do not
6324               want to warn about uses of EXPR as an integer, rather than
6325               as a pointer.  */
6326            expr = build_int_cst (totype, 0);
6327        }
6328      return expr;
6329    case ck_ambig:
6330      /* We leave bad_p off ck_ambig because overload resolution considers
6331	 it valid, it just fails when we try to perform it.  So we need to
6332         check complain here, too.  */
6333      if (complain & tf_error)
6334	{
6335	  /* Call build_user_type_conversion again for the error.  */
6336	  build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
6337				      complain);
6338	  if (fn)
6339	    inform (input_location, "  initializing argument %P of %q+D",
6340		    argnum, fn);
6341	}
6342      return error_mark_node;
6343
6344    case ck_list:
6345      {
6346	/* Conversion to std::initializer_list<T>.  */
6347	tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6348	tree new_ctor = build_constructor (init_list_type_node, NULL);
6349	unsigned len = CONSTRUCTOR_NELTS (expr);
6350	tree array, val, field;
6351	vec<constructor_elt, va_gc> *vec = NULL;
6352	unsigned ix;
6353
6354	/* Convert all the elements.  */
6355	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6356	  {
6357	    tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6358					  1, false, false, complain);
6359	    if (sub == error_mark_node)
6360	      return sub;
6361	    if (!BRACE_ENCLOSED_INITIALIZER_P (val)
6362		&& !check_narrowing (TREE_TYPE (sub), val, complain))
6363	      return error_mark_node;
6364	    CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6365	    if (!TREE_CONSTANT (sub))
6366	      TREE_CONSTANT (new_ctor) = false;
6367	  }
6368	/* Build up the array.  */
6369	elttype = cp_build_qualified_type
6370	  (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6371	array = build_array_of_n_type (elttype, len);
6372	array = finish_compound_literal (array, new_ctor, complain);
6373	/* Take the address explicitly rather than via decay_conversion
6374	   to avoid the error about taking the address of a temporary.  */
6375	array = cp_build_addr_expr (array, complain);
6376	array = cp_convert (build_pointer_type (elttype), array, complain);
6377	if (array == error_mark_node)
6378	  return error_mark_node;
6379
6380	/* Build up the initializer_list object.  */
6381	totype = complete_type (totype);
6382	field = next_initializable_field (TYPE_FIELDS (totype));
6383	CONSTRUCTOR_APPEND_ELT (vec, field, array);
6384	field = next_initializable_field (DECL_CHAIN (field));
6385	CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6386	new_ctor = build_constructor (totype, vec);
6387	return get_target_expr_sfinae (new_ctor, complain);
6388      }
6389
6390    case ck_aggr:
6391      if (TREE_CODE (totype) == COMPLEX_TYPE)
6392	{
6393	  tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6394	  tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6395	  real = perform_implicit_conversion (TREE_TYPE (totype),
6396					      real, complain);
6397	  imag = perform_implicit_conversion (TREE_TYPE (totype),
6398					      imag, complain);
6399	  expr = build2 (COMPLEX_EXPR, totype, real, imag);
6400	  return fold_if_not_in_template (expr);
6401	}
6402      expr = reshape_init (totype, expr, complain);
6403      expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
6404				     complain);
6405      if (expr != error_mark_node)
6406	TARGET_EXPR_LIST_INIT_P (expr) = true;
6407      return expr;
6408
6409    default:
6410      break;
6411    };
6412
6413  expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6414			    convs->kind == ck_ref_bind ? -1 : 1,
6415			    convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6416			    c_cast_p,
6417			    complain);
6418  if (expr == error_mark_node)
6419    return error_mark_node;
6420
6421  switch (convs->kind)
6422    {
6423    case ck_rvalue:
6424      expr = decay_conversion (expr, complain);
6425      if (expr == error_mark_node)
6426	return error_mark_node;
6427
6428      if (! MAYBE_CLASS_TYPE_P (totype))
6429	return expr;
6430      /* Else fall through.  */
6431    case ck_base:
6432      if (convs->kind == ck_base && !convs->need_temporary_p)
6433	{
6434	  /* We are going to bind a reference directly to a base-class
6435	     subobject of EXPR.  */
6436	  /* Build an expression for `*((base*) &expr)'.  */
6437	  expr = convert_to_base (expr, totype,
6438				  !c_cast_p, /*nonnull=*/true, complain);
6439	  return expr;
6440	}
6441
6442      /* Copy-initialization where the cv-unqualified version of the source
6443	 type is the same class as, or a derived class of, the class of the
6444	 destination [is treated as direct-initialization].  [dcl.init] */
6445      flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6446      if (convs->user_conv_p)
6447	/* This conversion is being done in the context of a user-defined
6448	   conversion (i.e. the second step of copy-initialization), so
6449	   don't allow any more.  */
6450	flags |= LOOKUP_NO_CONVERSION;
6451      if (convs->rvaluedness_matches_p)
6452	flags |= LOOKUP_PREFER_RVALUE;
6453      if (TREE_CODE (expr) == TARGET_EXPR
6454	  && TARGET_EXPR_LIST_INIT_P (expr))
6455	/* Copy-list-initialization doesn't actually involve a copy.  */
6456	return expr;
6457      expr = build_temp (expr, totype, flags, &diag_kind, complain);
6458      if (diag_kind && complain)
6459	{
6460	  maybe_print_user_conv_context (convs);
6461	  if (fn)
6462	    inform (DECL_SOURCE_LOCATION (fn),
6463		    "  initializing argument %P of %qD", argnum, fn);
6464	}
6465
6466      return build_cplus_new (totype, expr, complain);
6467
6468    case ck_ref_bind:
6469      {
6470	tree ref_type = totype;
6471
6472	if (convs->bad_p && !next_conversion (convs)->bad_p)
6473	  {
6474	    tree extype = TREE_TYPE (expr);
6475	    if (TYPE_REF_IS_RVALUE (ref_type)
6476		&& real_lvalue_p (expr))
6477	      error_at (loc, "cannot bind %qT lvalue to %qT",
6478			extype, totype);
6479	    else if (!TYPE_REF_IS_RVALUE (ref_type) && !real_lvalue_p (expr)
6480		     && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
6481	      error_at (loc, "invalid initialization of non-const reference of "
6482			"type %qT from an rvalue of type %qT", totype, extype);
6483	    else if (!reference_compatible_p (TREE_TYPE (totype), extype))
6484	      error_at (loc, "binding %qT to reference of type %qT "
6485			"discards qualifiers", extype, totype);
6486	    else
6487	      gcc_unreachable ();
6488	    maybe_print_user_conv_context (convs);
6489	    if (fn)
6490	      inform (input_location,
6491		      "  initializing argument %P of %q+D", argnum, fn);
6492	    return error_mark_node;
6493	  }
6494
6495	/* If necessary, create a temporary.
6496
6497           VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6498           that need temporaries, even when their types are reference
6499           compatible with the type of reference being bound, so the
6500           upcoming call to cp_build_addr_expr doesn't fail.  */
6501	if (convs->need_temporary_p
6502	    || TREE_CODE (expr) == CONSTRUCTOR
6503	    || TREE_CODE (expr) == VA_ARG_EXPR)
6504	  {
6505	    /* Otherwise, a temporary of type "cv1 T1" is created and
6506	       initialized from the initializer expression using the rules
6507	       for a non-reference copy-initialization (8.5).  */
6508
6509	    tree type = TREE_TYPE (ref_type);
6510	    cp_lvalue_kind lvalue = real_lvalue_p (expr);
6511
6512	    gcc_assert (same_type_ignoring_top_level_qualifiers_p
6513			(type, next_conversion (convs)->type));
6514	    if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6515		&& !TYPE_REF_IS_RVALUE (ref_type))
6516	      {
6517		/* If the reference is volatile or non-const, we
6518		   cannot create a temporary.  */
6519		if (lvalue & clk_bitfield)
6520		  error_at (loc, "cannot bind bitfield %qE to %qT",
6521			    expr, ref_type);
6522		else if (lvalue & clk_packed)
6523		  error_at (loc, "cannot bind packed field %qE to %qT",
6524			    expr, ref_type);
6525		else
6526		  error_at (loc, "cannot bind rvalue %qE to %qT",
6527			    expr, ref_type);
6528		return error_mark_node;
6529	      }
6530	    /* If the source is a packed field, and we must use a copy
6531	       constructor, then building the target expr will require
6532	       binding the field to the reference parameter to the
6533	       copy constructor, and we'll end up with an infinite
6534	       loop.  If we can use a bitwise copy, then we'll be
6535	       OK.  */
6536	    if ((lvalue & clk_packed)
6537		&& CLASS_TYPE_P (type)
6538		&& type_has_nontrivial_copy_init (type))
6539	      {
6540		error_at (loc, "cannot bind packed field %qE to %qT",
6541			  expr, ref_type);
6542		return error_mark_node;
6543	      }
6544	    if (lvalue & clk_bitfield)
6545	      {
6546		expr = convert_bitfield_to_declared_type (expr);
6547		expr = fold_convert (type, expr);
6548	      }
6549	    expr = build_target_expr_with_type (expr, type, complain);
6550	  }
6551
6552	/* Take the address of the thing to which we will bind the
6553	   reference.  */
6554	expr = cp_build_addr_expr (expr, complain);
6555	if (expr == error_mark_node)
6556	  return error_mark_node;
6557
6558	/* Convert it to a pointer to the type referred to by the
6559	   reference.  This will adjust the pointer if a derived to
6560	   base conversion is being performed.  */
6561	expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6562			   expr, complain);
6563	/* Convert the pointer to the desired reference type.  */
6564	return build_nop (ref_type, expr);
6565      }
6566
6567    case ck_lvalue:
6568      return decay_conversion (expr, complain);
6569
6570    case ck_qual:
6571      /* Warn about deprecated conversion if appropriate.  */
6572      string_conv_p (totype, expr, 1);
6573      break;
6574
6575    case ck_ptr:
6576      if (convs->base_p)
6577	expr = convert_to_base (expr, totype, !c_cast_p,
6578				/*nonnull=*/false, complain);
6579      return build_nop (totype, expr);
6580
6581    case ck_pmem:
6582      return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6583			     c_cast_p, complain);
6584
6585    default:
6586      break;
6587    }
6588
6589  if (convs->check_narrowing
6590      && !check_narrowing (totype, expr, complain))
6591    return error_mark_node;
6592
6593  if (issue_conversion_warnings)
6594    expr = cp_convert_and_check (totype, expr, complain);
6595  else
6596    expr = cp_convert (totype, expr, complain);
6597
6598  return expr;
6599}
6600
6601/* ARG is being passed to a varargs function.  Perform any conversions
6602   required.  Return the converted value.  */
6603
6604tree
6605convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6606{
6607  tree arg_type;
6608  location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
6609
6610  /* [expr.call]
6611
6612     The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6613     standard conversions are performed.  */
6614  arg = decay_conversion (arg, complain);
6615  arg_type = TREE_TYPE (arg);
6616  /* [expr.call]
6617
6618     If the argument has integral or enumeration type that is subject
6619     to the integral promotions (_conv.prom_), or a floating point
6620     type that is subject to the floating point promotion
6621     (_conv.fpprom_), the value of the argument is converted to the
6622     promoted type before the call.  */
6623  if (TREE_CODE (arg_type) == REAL_TYPE
6624      && (TYPE_PRECISION (arg_type)
6625	  < TYPE_PRECISION (double_type_node))
6626      && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6627    {
6628      if ((complain & tf_warning)
6629	  && warn_double_promotion && !c_inhibit_evaluation_warnings)
6630	warning_at (loc, OPT_Wdouble_promotion,
6631		    "implicit conversion from %qT to %qT when passing "
6632		    "argument to function",
6633		    arg_type, double_type_node);
6634      arg = convert_to_real (double_type_node, arg);
6635    }
6636  else if (NULLPTR_TYPE_P (arg_type))
6637    arg = null_pointer_node;
6638  else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6639    {
6640      if (SCOPED_ENUM_P (arg_type))
6641	{
6642	  tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
6643				  complain);
6644	  prom = cp_perform_integral_promotions (prom, complain);
6645	  if (abi_version_crosses (6)
6646	      && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
6647	      && (complain & tf_warning))
6648	    warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
6649			"%qT before -fabi-version=6, %qT after", arg_type,
6650			TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
6651	  if (!abi_version_at_least (6))
6652	    arg = prom;
6653	}
6654      else
6655	arg = cp_perform_integral_promotions (arg, complain);
6656    }
6657
6658  arg = require_complete_type_sfinae (arg, complain);
6659  arg_type = TREE_TYPE (arg);
6660
6661  if (arg != error_mark_node
6662      /* In a template (or ill-formed code), we can have an incomplete type
6663	 even after require_complete_type_sfinae, in which case we don't know
6664	 whether it has trivial copy or not.  */
6665      && COMPLETE_TYPE_P (arg_type))
6666    {
6667      /* Build up a real lvalue-to-rvalue conversion in case the
6668	 copy constructor is trivial but not callable.  */
6669      if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6670	force_rvalue (arg, complain);
6671
6672      /* [expr.call] 5.2.2/7:
6673	 Passing a potentially-evaluated argument of class type (Clause 9)
6674	 with a non-trivial copy constructor or a non-trivial destructor
6675	 with no corresponding parameter is conditionally-supported, with
6676	 implementation-defined semantics.
6677
6678	 We support it as pass-by-invisible-reference, just like a normal
6679	 value parameter.
6680
6681	 If the call appears in the context of a sizeof expression,
6682	 it is not potentially-evaluated.  */
6683      if (cp_unevaluated_operand == 0
6684	  && (type_has_nontrivial_copy_init (arg_type)
6685	      || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6686	{
6687	  if (complain & tf_warning)
6688	    warning (OPT_Wconditionally_supported,
6689		     "passing objects of non-trivially-copyable "
6690		     "type %q#T through %<...%> is conditionally supported",
6691		     arg_type);
6692	  return cp_build_addr_expr (arg, complain);
6693	}
6694    }
6695
6696  return arg;
6697}
6698
6699/* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
6700
6701tree
6702build_x_va_arg (source_location loc, tree expr, tree type)
6703{
6704  if (processing_template_decl)
6705    {
6706      tree r = build_min (VA_ARG_EXPR, type, expr);
6707      SET_EXPR_LOCATION (r, loc);
6708      return r;
6709    }
6710
6711  type = complete_type_or_else (type, NULL_TREE);
6712
6713  if (expr == error_mark_node || !type)
6714    return error_mark_node;
6715
6716  expr = mark_lvalue_use (expr);
6717
6718  if (TREE_CODE (type) == REFERENCE_TYPE)
6719    {
6720      error ("cannot receive reference type %qT through %<...%>", type);
6721      return error_mark_node;
6722    }
6723
6724  if (type_has_nontrivial_copy_init (type)
6725      || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6726    {
6727      /* conditionally-supported behavior [expr.call] 5.2.2/7.  Let's treat
6728	 it as pass by invisible reference.  */
6729      warning_at (loc, OPT_Wconditionally_supported,
6730		 "receiving objects of non-trivially-copyable type %q#T "
6731		 "through %<...%> is conditionally-supported", type);
6732
6733      tree ref = cp_build_reference_type (type, false);
6734      expr = build_va_arg (loc, expr, ref);
6735      return convert_from_reference (expr);
6736    }
6737
6738  return build_va_arg (loc, expr, type);
6739}
6740
6741/* TYPE has been given to va_arg.  Apply the default conversions which
6742   would have happened when passed via ellipsis.  Return the promoted
6743   type, or the passed type if there is no change.  */
6744
6745tree
6746cxx_type_promotes_to (tree type)
6747{
6748  tree promote;
6749
6750  /* Perform the array-to-pointer and function-to-pointer
6751     conversions.  */
6752  type = type_decays_to (type);
6753
6754  promote = type_promotes_to (type);
6755  if (same_type_p (type, promote))
6756    promote = type;
6757
6758  return promote;
6759}
6760
6761/* ARG is a default argument expression being passed to a parameter of
6762   the indicated TYPE, which is a parameter to FN.  PARMNUM is the
6763   zero-based argument number.  Do any required conversions.  Return
6764   the converted value.  */
6765
6766static GTY(()) vec<tree, va_gc> *default_arg_context;
6767void
6768push_defarg_context (tree fn)
6769{ vec_safe_push (default_arg_context, fn); }
6770
6771void
6772pop_defarg_context (void)
6773{ default_arg_context->pop (); }
6774
6775tree
6776convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6777		     tsubst_flags_t complain)
6778{
6779  int i;
6780  tree t;
6781
6782  /* See through clones.  */
6783  fn = DECL_ORIGIN (fn);
6784
6785  /* Detect recursion.  */
6786  FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6787    if (t == fn)
6788      {
6789	if (complain & tf_error)
6790	  error ("recursive evaluation of default argument for %q#D", fn);
6791	return error_mark_node;
6792      }
6793
6794  /* If the ARG is an unparsed default argument expression, the
6795     conversion cannot be performed.  */
6796  if (TREE_CODE (arg) == DEFAULT_ARG)
6797    {
6798      if (complain & tf_error)
6799	error ("call to %qD uses the default argument for parameter %P, which "
6800	       "is not yet defined", fn, parmnum);
6801      return error_mark_node;
6802    }
6803
6804  push_defarg_context (fn);
6805
6806  if (fn && DECL_TEMPLATE_INFO (fn))
6807    arg = tsubst_default_argument (fn, type, arg, complain);
6808
6809  /* Due to:
6810
6811       [dcl.fct.default]
6812
6813       The names in the expression are bound, and the semantic
6814       constraints are checked, at the point where the default
6815       expressions appears.
6816
6817     we must not perform access checks here.  */
6818  push_deferring_access_checks (dk_no_check);
6819  /* We must make a copy of ARG, in case subsequent processing
6820     alters any part of it.  */
6821  arg = break_out_target_exprs (arg);
6822  arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6823				    ICR_DEFAULT_ARGUMENT, fn, parmnum,
6824				    complain);
6825  arg = convert_for_arg_passing (type, arg, complain);
6826  pop_deferring_access_checks();
6827
6828  pop_defarg_context ();
6829
6830  return arg;
6831}
6832
6833/* Returns the type which will really be used for passing an argument of
6834   type TYPE.  */
6835
6836tree
6837type_passed_as (tree type)
6838{
6839  /* Pass classes with copy ctors by invisible reference.  */
6840  if (TREE_ADDRESSABLE (type))
6841    {
6842      type = build_reference_type (type);
6843      /* There are no other pointers to this temporary.  */
6844      type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6845    }
6846  else if (targetm.calls.promote_prototypes (type)
6847	   && INTEGRAL_TYPE_P (type)
6848	   && COMPLETE_TYPE_P (type)
6849	   && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6850    type = integer_type_node;
6851
6852  return type;
6853}
6854
6855/* Actually perform the appropriate conversion.  */
6856
6857tree
6858convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6859{
6860  tree bitfield_type;
6861
6862  /* If VAL is a bitfield, then -- since it has already been converted
6863     to TYPE -- it cannot have a precision greater than TYPE.
6864
6865     If it has a smaller precision, we must widen it here.  For
6866     example, passing "int f:3;" to a function expecting an "int" will
6867     not result in any conversion before this point.
6868
6869     If the precision is the same we must not risk widening.  For
6870     example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6871     often have type "int", even though the C++ type for the field is
6872     "long long".  If the value is being passed to a function
6873     expecting an "int", then no conversions will be required.  But,
6874     if we call convert_bitfield_to_declared_type, the bitfield will
6875     be converted to "long long".  */
6876  bitfield_type = is_bitfield_expr_with_lowered_type (val);
6877  if (bitfield_type
6878      && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6879    val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6880
6881  if (val == error_mark_node)
6882    ;
6883  /* Pass classes with copy ctors by invisible reference.  */
6884  else if (TREE_ADDRESSABLE (type))
6885    val = build1 (ADDR_EXPR, build_reference_type (type), val);
6886  else if (targetm.calls.promote_prototypes (type)
6887	   && INTEGRAL_TYPE_P (type)
6888	   && COMPLETE_TYPE_P (type)
6889	   && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6890    val = cp_perform_integral_promotions (val, complain);
6891  if ((complain & tf_warning)
6892      && warn_suggest_attribute_format)
6893    {
6894      tree rhstype = TREE_TYPE (val);
6895      const enum tree_code coder = TREE_CODE (rhstype);
6896      const enum tree_code codel = TREE_CODE (type);
6897      if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6898	  && coder == codel
6899	  && check_missing_format_attribute (type, rhstype))
6900	warning (OPT_Wsuggest_attribute_format,
6901		 "argument of function call might be a candidate for a format attribute");
6902    }
6903  return val;
6904}
6905
6906/* Returns true iff FN is a function with magic varargs, i.e. ones for
6907   which no conversions at all should be done.  This is true for some
6908   builtins which don't act like normal functions.  */
6909
6910bool
6911magic_varargs_p (tree fn)
6912{
6913  if (flag_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
6914    return true;
6915
6916  if (DECL_BUILT_IN (fn))
6917    switch (DECL_FUNCTION_CODE (fn))
6918      {
6919      case BUILT_IN_CLASSIFY_TYPE:
6920      case BUILT_IN_CONSTANT_P:
6921      case BUILT_IN_NEXT_ARG:
6922      case BUILT_IN_VA_START:
6923	return true;
6924
6925      default:;
6926	return lookup_attribute ("type generic",
6927				 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6928      }
6929
6930  return false;
6931}
6932
6933/* Returns the decl of the dispatcher function if FN is a function version.  */
6934
6935tree
6936get_function_version_dispatcher (tree fn)
6937{
6938  tree dispatcher_decl = NULL;
6939
6940  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6941	      && DECL_FUNCTION_VERSIONED (fn));
6942
6943  gcc_assert (targetm.get_function_versions_dispatcher);
6944  dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6945
6946  if (dispatcher_decl == NULL)
6947    {
6948      error_at (input_location, "use of multiversioned function "
6949				"without a default");
6950      return NULL;
6951    }
6952
6953  retrofit_lang_decl (dispatcher_decl);
6954  gcc_assert (dispatcher_decl != NULL);
6955  return dispatcher_decl;
6956}
6957
6958/* fn is a function version dispatcher that is marked used. Mark all the
6959   semantically identical function versions it will dispatch as used.  */
6960
6961void
6962mark_versions_used (tree fn)
6963{
6964  struct cgraph_node *node;
6965  struct cgraph_function_version_info *node_v;
6966  struct cgraph_function_version_info *it_v;
6967
6968  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6969
6970  node = cgraph_node::get (fn);
6971  if (node == NULL)
6972    return;
6973
6974  gcc_assert (node->dispatcher_function);
6975
6976  node_v = node->function_version ();
6977  if (node_v == NULL)
6978    return;
6979
6980  /* All semantically identical versions are chained.  Traverse and mark each
6981     one of them as used.  */
6982  it_v = node_v->next;
6983  while (it_v != NULL)
6984    {
6985      mark_used (it_v->this_node->decl);
6986      it_v = it_v->next;
6987    }
6988}
6989
6990/* Build a call to "the copy constructor" for the type of A, even if it
6991   wouldn't be selected by normal overload resolution.  Used for
6992   diagnostics.  */
6993
6994static tree
6995call_copy_ctor (tree a, tsubst_flags_t complain)
6996{
6997  tree ctype = TYPE_MAIN_VARIANT (TREE_TYPE (a));
6998  tree binfo = TYPE_BINFO (ctype);
6999  tree copy = get_copy_ctor (ctype, complain);
7000  copy = build_baselink (binfo, binfo, copy, NULL_TREE);
7001  tree ob = build_dummy_object (ctype);
7002  vec<tree, va_gc>* args = make_tree_vector_single (a);
7003  tree r = build_new_method_call (ob, copy, &args, NULL_TREE,
7004				  LOOKUP_NORMAL, NULL, complain);
7005  release_tree_vector (args);
7006  return r;
7007}
7008
7009/* Return true iff T refers to a base field.  */
7010
7011static bool
7012is_base_field_ref (tree t)
7013{
7014  STRIP_NOPS (t);
7015  if (TREE_CODE (t) == ADDR_EXPR)
7016    t = TREE_OPERAND (t, 0);
7017  if (TREE_CODE (t) == COMPONENT_REF)
7018    t = TREE_OPERAND (t, 1);
7019  if (TREE_CODE (t) == FIELD_DECL)
7020    return DECL_FIELD_IS_BASE (t);
7021  return false;
7022}
7023
7024/* We can't elide a copy from a function returning by value to a base
7025   subobject, as the callee might clobber tail padding.  Return true iff this
7026   could be that case.  */
7027
7028static bool
7029unsafe_copy_elision_p (tree target, tree exp)
7030{
7031  tree type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7032  if (type == CLASSTYPE_AS_BASE (type))
7033    return false;
7034  if (!is_base_field_ref (target)
7035      && resolves_to_fixed_type_p (target, NULL))
7036    return false;
7037  tree init = TARGET_EXPR_INITIAL (exp);
7038  /* build_compound_expr pushes COMPOUND_EXPR inside TARGET_EXPR.  */
7039  while (TREE_CODE (init) == COMPOUND_EXPR)
7040    init = TREE_OPERAND (init, 1);
7041  return (TREE_CODE (init) == AGGR_INIT_EXPR
7042	  && !AGGR_INIT_VIA_CTOR_P (init));
7043}
7044
7045/* Subroutine of the various build_*_call functions.  Overload resolution
7046   has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
7047   ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
7048   bitmask of various LOOKUP_* flags which apply to the call itself.  */
7049
7050static tree
7051build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
7052{
7053  tree fn = cand->fn;
7054  const vec<tree, va_gc> *args = cand->args;
7055  tree first_arg = cand->first_arg;
7056  conversion **convs = cand->convs;
7057  conversion *conv;
7058  tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
7059  int parmlen;
7060  tree val;
7061  int i = 0;
7062  int j = 0;
7063  unsigned int arg_index = 0;
7064  int is_method = 0;
7065  int nargs;
7066  tree *argarray;
7067  bool already_used = false;
7068
7069  /* In a template, there is no need to perform all of the work that
7070     is normally done.  We are only interested in the type of the call
7071     expression, i.e., the return type of the function.  Any semantic
7072     errors will be deferred until the template is instantiated.  */
7073  if (processing_template_decl)
7074    {
7075      tree expr, addr;
7076      tree return_type;
7077      const tree *argarray;
7078      unsigned int nargs;
7079
7080      return_type = TREE_TYPE (TREE_TYPE (fn));
7081      nargs = vec_safe_length (args);
7082      if (first_arg == NULL_TREE)
7083	argarray = args->address ();
7084      else
7085	{
7086	  tree *alcarray;
7087	  unsigned int ix;
7088	  tree arg;
7089
7090	  ++nargs;
7091	  alcarray = XALLOCAVEC (tree, nargs);
7092	  alcarray[0] = build_this (first_arg);
7093	  FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
7094	    alcarray[ix + 1] = arg;
7095	  argarray = alcarray;
7096	}
7097
7098      addr = build_addr_func (fn, complain);
7099      if (addr == error_mark_node)
7100	return error_mark_node;
7101      expr = build_call_array_loc (input_location, return_type,
7102				   addr, nargs, argarray);
7103      if (TREE_THIS_VOLATILE (fn) && cfun)
7104	current_function_returns_abnormally = 1;
7105      return convert_from_reference (expr);
7106    }
7107
7108  /* Give any warnings we noticed during overload resolution.  */
7109  if (cand->warnings && (complain & tf_warning))
7110    {
7111      struct candidate_warning *w;
7112      for (w = cand->warnings; w; w = w->next)
7113	joust (cand, w->loser, 1, complain);
7114    }
7115
7116  /* Make =delete work with SFINAE.  */
7117  if (DECL_DELETED_FN (fn) && !(complain & tf_error))
7118    return error_mark_node;
7119
7120  if (DECL_FUNCTION_MEMBER_P (fn))
7121    {
7122      tree access_fn;
7123      /* If FN is a template function, two cases must be considered.
7124	 For example:
7125
7126	   struct A {
7127	     protected:
7128	       template <class T> void f();
7129	   };
7130	   template <class T> struct B {
7131	     protected:
7132	       void g();
7133	   };
7134	   struct C : A, B<int> {
7135	     using A::f;	// #1
7136	     using B<int>::g;	// #2
7137	   };
7138
7139	 In case #1 where `A::f' is a member template, DECL_ACCESS is
7140	 recorded in the primary template but not in its specialization.
7141	 We check access of FN using its primary template.
7142
7143	 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
7144	 because it is a member of class template B, DECL_ACCESS is
7145	 recorded in the specialization `B<int>::g'.  We cannot use its
7146	 primary template because `B<T>::g' and `B<int>::g' may have
7147	 different access.  */
7148      if (DECL_TEMPLATE_INFO (fn)
7149	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
7150	access_fn = DECL_TI_TEMPLATE (fn);
7151      else
7152	access_fn = fn;
7153      if (!perform_or_defer_access_check (cand->access_path, access_fn,
7154					  fn, complain))
7155	return error_mark_node;
7156    }
7157
7158  /* If we're checking for implicit delete, don't bother with argument
7159     conversions.  */
7160  if (flags & LOOKUP_SPECULATIVE)
7161    {
7162      if (DECL_DELETED_FN (fn))
7163	{
7164	  if (complain & tf_error)
7165	    mark_used (fn);
7166	  return error_mark_node;
7167	}
7168      if (cand->viable == 1)
7169	return fn;
7170      else if (!(complain & tf_error))
7171	/* Reject bad conversions now.  */
7172	return error_mark_node;
7173      /* else continue to get conversion error.  */
7174    }
7175
7176  /* N3276 magic doesn't apply to nested calls.  */
7177  int decltype_flag = (complain & tf_decltype);
7178  complain &= ~tf_decltype;
7179
7180  /* Find maximum size of vector to hold converted arguments.  */
7181  parmlen = list_length (parm);
7182  nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7183  if (parmlen > nargs)
7184    nargs = parmlen;
7185  argarray = XALLOCAVEC (tree, nargs);
7186
7187  /* The implicit parameters to a constructor are not considered by overload
7188     resolution, and must be of the proper type.  */
7189  if (DECL_CONSTRUCTOR_P (fn))
7190    {
7191      tree object_arg;
7192      if (first_arg != NULL_TREE)
7193	{
7194	  object_arg = first_arg;
7195	  first_arg = NULL_TREE;
7196	}
7197      else
7198	{
7199	  object_arg = (*args)[arg_index];
7200	  ++arg_index;
7201	}
7202      argarray[j++] = build_this (object_arg);
7203      parm = TREE_CHAIN (parm);
7204      /* We should never try to call the abstract constructor.  */
7205      gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7206
7207      if (DECL_HAS_VTT_PARM_P (fn))
7208	{
7209	  argarray[j++] = (*args)[arg_index];
7210	  ++arg_index;
7211	  parm = TREE_CHAIN (parm);
7212	}
7213    }
7214  /* Bypass access control for 'this' parameter.  */
7215  else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7216    {
7217      tree parmtype = TREE_VALUE (parm);
7218      tree arg = build_this (first_arg != NULL_TREE
7219			     ? first_arg
7220			     : (*args)[arg_index]);
7221      tree argtype = TREE_TYPE (arg);
7222      tree converted_arg;
7223      tree base_binfo;
7224
7225      if (convs[i]->bad_p)
7226	{
7227	  if (complain & tf_error)
7228	    {
7229	      if (permerror (input_location, "passing %qT as %<this%> "
7230			     "argument discards qualifiers",
7231			     TREE_TYPE (argtype)))
7232		inform (DECL_SOURCE_LOCATION (fn), "  in call to %qD", fn);
7233	    }
7234	  else
7235	    return error_mark_node;
7236	}
7237
7238      /* See if the function member or the whole class type is declared
7239	 final and the call can be devirtualized.  */
7240      if (DECL_FINAL_P (fn)
7241	  || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7242	flags |= LOOKUP_NONVIRTUAL;
7243
7244      /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7245	 X is called for an object that is not of type X, or of a type
7246	 derived from X, the behavior is undefined.
7247
7248	 So we can assume that anything passed as 'this' is non-null, and
7249	 optimize accordingly.  */
7250      gcc_assert (TYPE_PTR_P (parmtype));
7251      /* Convert to the base in which the function was declared.  */
7252      gcc_assert (cand->conversion_path != NULL_TREE);
7253      converted_arg = build_base_path (PLUS_EXPR,
7254				       arg,
7255				       cand->conversion_path,
7256				       1, complain);
7257      /* Check that the base class is accessible.  */
7258      if (!accessible_base_p (TREE_TYPE (argtype),
7259			      BINFO_TYPE (cand->conversion_path), true))
7260	{
7261	  if (complain & tf_error)
7262	    error ("%qT is not an accessible base of %qT",
7263		   BINFO_TYPE (cand->conversion_path),
7264		   TREE_TYPE (argtype));
7265	  else
7266	    return error_mark_node;
7267	}
7268      /* If fn was found by a using declaration, the conversion path
7269	 will be to the derived class, not the base declaring fn. We
7270	 must convert from derived to base.  */
7271      base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7272				TREE_TYPE (parmtype), ba_unique,
7273				NULL, complain);
7274      converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7275				       base_binfo, 1, complain);
7276
7277      argarray[j++] = converted_arg;
7278      parm = TREE_CHAIN (parm);
7279      if (first_arg != NULL_TREE)
7280	first_arg = NULL_TREE;
7281      else
7282	++arg_index;
7283      ++i;
7284      is_method = 1;
7285    }
7286
7287  gcc_assert (first_arg == NULL_TREE);
7288  for (; arg_index < vec_safe_length (args) && parm;
7289       parm = TREE_CHAIN (parm), ++arg_index, ++i)
7290    {
7291      tree type = TREE_VALUE (parm);
7292      tree arg = (*args)[arg_index];
7293      bool conversion_warning = true;
7294
7295      conv = convs[i];
7296
7297      /* If the argument is NULL and used to (implicitly) instantiate a
7298         template function (and bind one of the template arguments to
7299         the type of 'long int'), we don't want to warn about passing NULL
7300         to non-pointer argument.
7301         For example, if we have this template function:
7302
7303           template<typename T> void func(T x) {}
7304
7305         we want to warn (when -Wconversion is enabled) in this case:
7306
7307           void foo() {
7308             func<int>(NULL);
7309           }
7310
7311         but not in this case:
7312
7313           void foo() {
7314             func(NULL);
7315           }
7316      */
7317      if (arg == null_node
7318          && DECL_TEMPLATE_INFO (fn)
7319          && cand->template_decl
7320          && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7321        conversion_warning = false;
7322
7323      /* Warn about initializer_list deduction that isn't currently in the
7324	 working draft.  */
7325      if (cxx_dialect > cxx98
7326	  && flag_deduce_init_list
7327	  && cand->template_decl
7328	  && is_std_init_list (non_reference (type))
7329	  && BRACE_ENCLOSED_INITIALIZER_P (arg))
7330	{
7331	  tree tmpl = TI_TEMPLATE (cand->template_decl);
7332	  tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7333	  tree patparm = get_pattern_parm (realparm, tmpl);
7334	  tree pattype = TREE_TYPE (patparm);
7335	  if (PACK_EXPANSION_P (pattype))
7336	    pattype = PACK_EXPANSION_PATTERN (pattype);
7337	  pattype = non_reference (pattype);
7338
7339	  if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7340	      && (cand->explicit_targs == NULL_TREE
7341		  || (TREE_VEC_LENGTH (cand->explicit_targs)
7342		      <= TEMPLATE_TYPE_IDX (pattype))))
7343	    {
7344	      pedwarn (input_location, 0, "deducing %qT as %qT",
7345		       non_reference (TREE_TYPE (patparm)),
7346		       non_reference (type));
7347	      pedwarn (input_location, 0, "  in call to %q+D", cand->fn);
7348	      pedwarn (input_location, 0,
7349		       "  (you can disable this with -fno-deduce-init-list)");
7350	    }
7351	}
7352      val = convert_like_with_context (conv, arg, fn, i - is_method,
7353				       conversion_warning
7354				       ? complain
7355				       : complain & (~tf_warning));
7356
7357      val = convert_for_arg_passing (type, val, complain);
7358
7359      if (val == error_mark_node)
7360        return error_mark_node;
7361      else
7362        argarray[j++] = val;
7363    }
7364
7365  /* Default arguments */
7366  for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
7367    {
7368      if (TREE_VALUE (parm) == error_mark_node)
7369	return error_mark_node;
7370      argarray[j++] = convert_default_arg (TREE_VALUE (parm),
7371					   TREE_PURPOSE (parm),
7372					   fn, i - is_method,
7373					   complain);
7374    }
7375
7376  /* Ellipsis */
7377  for (; arg_index < vec_safe_length (args); ++arg_index)
7378    {
7379      tree a = (*args)[arg_index];
7380      if (magic_varargs_p (fn))
7381	/* Do no conversions for magic varargs.  */
7382	a = mark_type_use (a);
7383      else if (DECL_CONSTRUCTOR_P (fn)
7384	       && same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
7385							     TREE_TYPE (a)))
7386	{
7387	  /* Avoid infinite recursion trying to call A(...).  */
7388	  if (complain & tf_error)
7389	    /* Try to call the actual copy constructor for a good error.  */
7390	    call_copy_ctor (a, complain);
7391	  return error_mark_node;
7392	}
7393      else
7394	a = convert_arg_to_ellipsis (a, complain);
7395      argarray[j++] = a;
7396    }
7397
7398  gcc_assert (j <= nargs);
7399  nargs = j;
7400
7401  check_function_arguments (TREE_TYPE (fn), nargs, argarray);
7402
7403  /* Avoid actually calling copy constructors and copy assignment operators,
7404     if possible.  */
7405
7406  if (! flag_elide_constructors)
7407    /* Do things the hard way.  */;
7408  else if (cand->num_convs == 1
7409           && (DECL_COPY_CONSTRUCTOR_P (fn)
7410               || DECL_MOVE_CONSTRUCTOR_P (fn))
7411	   /* It's unsafe to elide the constructor when handling
7412	      a noexcept-expression, it may evaluate to the wrong
7413	      value (c++/53025).  */
7414	   && cp_noexcept_operand == 0)
7415    {
7416      tree targ;
7417      tree arg = argarray[num_artificial_parms_for (fn)];
7418      tree fa;
7419      bool trivial = trivial_fn_p (fn);
7420
7421      /* Pull out the real argument, disregarding const-correctness.  */
7422      targ = arg;
7423      while (CONVERT_EXPR_P (targ)
7424	     || TREE_CODE (targ) == NON_LVALUE_EXPR)
7425	targ = TREE_OPERAND (targ, 0);
7426      if (TREE_CODE (targ) == ADDR_EXPR)
7427	{
7428	  targ = TREE_OPERAND (targ, 0);
7429	  if (!same_type_ignoring_top_level_qualifiers_p
7430	      (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7431	    targ = NULL_TREE;
7432	}
7433      else
7434	targ = NULL_TREE;
7435
7436      if (targ)
7437	arg = targ;
7438      else
7439	arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7440
7441      /* [class.copy]: the copy constructor is implicitly defined even if
7442	 the implementation elided its use.  */
7443      if (!trivial || DECL_DELETED_FN (fn))
7444	{
7445	  if (!mark_used (fn, complain) && !(complain & tf_error))
7446	    return error_mark_node;
7447	  already_used = true;
7448	}
7449
7450      /* If we're creating a temp and we already have one, don't create a
7451	 new one.  If we're not creating a temp but we get one, use
7452	 INIT_EXPR to collapse the temp into our target.  Otherwise, if the
7453	 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7454	 temp or an INIT_EXPR otherwise.  */
7455      fa = argarray[0];
7456      if (is_dummy_object (fa))
7457	{
7458	  if (TREE_CODE (arg) == TARGET_EXPR)
7459	    return arg;
7460	  else if (trivial)
7461	    return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7462	}
7463      else if (trivial
7464	       || (TREE_CODE (arg) == TARGET_EXPR
7465		   && !unsafe_copy_elision_p (fa, arg)))
7466	{
7467	  tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
7468								complain));
7469
7470	  val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7471	  return val;
7472	}
7473    }
7474  else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7475	   && trivial_fn_p (fn)
7476	   && !DECL_DELETED_FN (fn))
7477    {
7478      tree to = stabilize_reference
7479	(cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7480      tree type = TREE_TYPE (to);
7481      tree as_base = CLASSTYPE_AS_BASE (type);
7482      tree arg = argarray[1];
7483
7484      if (is_really_empty_class (type))
7485	{
7486	  /* Avoid copying empty classes.  */
7487	  val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
7488	  TREE_NO_WARNING (val) = 1;
7489	  val = build2 (COMPOUND_EXPR, type, val, to);
7490	  TREE_NO_WARNING (val) = 1;
7491	}
7492      else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7493	{
7494	  arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7495	  val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7496	}
7497      else
7498	{
7499	  /* We must only copy the non-tail padding parts.  */
7500	  tree arg0, arg2, t;
7501	  tree array_type, alias_set;
7502
7503	  arg2 = TYPE_SIZE_UNIT (as_base);
7504	  arg0 = cp_build_addr_expr (to, complain);
7505
7506	  array_type = build_array_type (char_type_node,
7507					 build_index_type
7508					   (size_binop (MINUS_EXPR,
7509							arg2, size_int (1))));
7510	  alias_set = build_int_cst (build_pointer_type (type), 0);
7511	  t = build2 (MODIFY_EXPR, void_type_node,
7512		      build2 (MEM_REF, array_type, arg0, alias_set),
7513		      build2 (MEM_REF, array_type, arg, alias_set));
7514	  val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7515          TREE_NO_WARNING (val) = 1;
7516	}
7517
7518      return val;
7519    }
7520  else if (DECL_DESTRUCTOR_P (fn)
7521	   && trivial_fn_p (fn)
7522	   && !DECL_DELETED_FN (fn))
7523    return fold_convert (void_type_node, argarray[0]);
7524  /* FIXME handle trivial default constructor, too.  */
7525
7526  /* For calls to a multi-versioned function, overload resolution
7527     returns the function with the highest target priority, that is,
7528     the version that will checked for dispatching first.  If this
7529     version is inlinable, a direct call to this version can be made
7530     otherwise the call should go through the dispatcher.  */
7531
7532  if (DECL_FUNCTION_VERSIONED (fn)
7533      && (current_function_decl == NULL
7534	  || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7535    {
7536      fn = get_function_version_dispatcher (fn);
7537      if (fn == NULL)
7538	return NULL;
7539      if (!already_used)
7540	mark_versions_used (fn);
7541    }
7542
7543  if (!already_used
7544      && !mark_used (fn, complain))
7545    return error_mark_node;
7546
7547  if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7548      /* Don't mess with virtual lookup in instantiate_non_dependent_expr;
7549	 virtual functions can't be constexpr.  */
7550      && !in_template_function ())
7551    {
7552      tree t;
7553      tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7554				DECL_CONTEXT (fn),
7555				ba_any, NULL, complain);
7556      gcc_assert (binfo && binfo != error_mark_node);
7557
7558      argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7559				     complain);
7560      if (TREE_SIDE_EFFECTS (argarray[0]))
7561	argarray[0] = save_expr (argarray[0]);
7562      t = build_pointer_type (TREE_TYPE (fn));
7563      if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7564	fn = build_java_interface_fn_ref (fn, argarray[0]);
7565      else
7566	fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7567      TREE_TYPE (fn) = t;
7568    }
7569  else
7570    {
7571      fn = build_addr_func (fn, complain);
7572      if (fn == error_mark_node)
7573	return error_mark_node;
7574    }
7575
7576  tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7577  if (TREE_CODE (call) == CALL_EXPR
7578      && (cand->flags & LOOKUP_LIST_INIT_CTOR))
7579    CALL_EXPR_LIST_INIT_P (call) = true;
7580  return call;
7581}
7582
7583/* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7584   This function performs no overload resolution, conversion, or other
7585   high-level operations.  */
7586
7587tree
7588build_cxx_call (tree fn, int nargs, tree *argarray,
7589		tsubst_flags_t complain)
7590{
7591  tree fndecl;
7592  int optimize_sav;
7593
7594  /* Remember roughly where this call is.  */
7595  location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7596  fn = build_call_a (fn, nargs, argarray);
7597  SET_EXPR_LOCATION (fn, loc);
7598
7599  fndecl = get_callee_fndecl (fn);
7600
7601  /* Check that arguments to builtin functions match the expectations.  */
7602  if (fndecl
7603      && DECL_BUILT_IN (fndecl)
7604      && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7605      && !check_builtin_function_arguments (fndecl, nargs, argarray))
7606    return error_mark_node;
7607
7608    /* If it is a built-in array notation function, then the return type of
7609     the function is the element type of the array passed in as array
7610     notation (i.e. the first parameter of the function).  */
7611  if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR)
7612    {
7613      enum built_in_function bif =
7614	is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7615      if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7616	  || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7617	  || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7618	  || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7619	  || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7620	  || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7621	{
7622	  if (call_expr_nargs (fn) == 0)
7623	    {
7624	      error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
7625	      return error_mark_node;
7626	    }
7627	  /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7628	     BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7629	     BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7630	     BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7631	     BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7632             BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7633	     The pre-defined return-type is the correct one.  */
7634	  tree array_ntn = CALL_EXPR_ARG (fn, 0);
7635	  TREE_TYPE (fn) = TREE_TYPE (array_ntn);
7636	  return fn;
7637	}
7638    }
7639
7640  /* Some built-in function calls will be evaluated at compile-time in
7641     fold ().  Set optimize to 1 when folding __builtin_constant_p inside
7642     a constexpr function so that fold_builtin_1 doesn't fold it to 0.  */
7643  optimize_sav = optimize;
7644  if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7645      && current_function_decl
7646      && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7647    optimize = 1;
7648  fn = fold_if_not_in_template (fn);
7649  optimize = optimize_sav;
7650
7651  if (VOID_TYPE_P (TREE_TYPE (fn)))
7652    return fn;
7653
7654  /* 5.2.2/11: If a function call is a prvalue of object type: if the
7655     function call is either the operand of a decltype-specifier or the
7656     right operand of a comma operator that is the operand of a
7657     decltype-specifier, a temporary object is not introduced for the
7658     prvalue. The type of the prvalue may be incomplete.  */
7659  if (!(complain & tf_decltype))
7660    {
7661      fn = require_complete_type_sfinae (fn, complain);
7662      if (fn == error_mark_node)
7663	return error_mark_node;
7664
7665      if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7666	fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7667    }
7668  return convert_from_reference (fn);
7669}
7670
7671static GTY(()) tree java_iface_lookup_fn;
7672
7673/* Make an expression which yields the address of the Java interface
7674   method FN.  This is achieved by generating a call to libjava's
7675   _Jv_LookupInterfaceMethodIdx().  */
7676
7677static tree
7678build_java_interface_fn_ref (tree fn, tree instance)
7679{
7680  tree lookup_fn, method, idx;
7681  tree klass_ref, iface, iface_ref;
7682  int i;
7683
7684  if (!java_iface_lookup_fn)
7685    {
7686      tree ftype = build_function_type_list (ptr_type_node,
7687					     ptr_type_node, ptr_type_node,
7688					     java_int_type_node, NULL_TREE);
7689      java_iface_lookup_fn
7690	= add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7691				0, NOT_BUILT_IN, NULL, NULL_TREE);
7692    }
7693
7694  /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7695     This is the first entry in the vtable.  */
7696  klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7697                                                     tf_warning_or_error),
7698			      integer_zero_node);
7699
7700  /* Get the java.lang.Class pointer for the interface being called.  */
7701  iface = DECL_CONTEXT (fn);
7702  iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7703  if (!iface_ref || !VAR_P (iface_ref)
7704      || DECL_CONTEXT (iface_ref) != iface)
7705    {
7706      error ("could not find class$ field in java interface type %qT",
7707		iface);
7708      return error_mark_node;
7709    }
7710  iface_ref = build_address (iface_ref);
7711  iface_ref = convert (build_pointer_type (iface), iface_ref);
7712
7713  /* Determine the itable index of FN.  */
7714  i = 1;
7715  for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7716    {
7717      if (!DECL_VIRTUAL_P (method))
7718	continue;
7719      if (fn == method)
7720	break;
7721      i++;
7722    }
7723  idx = build_int_cst (NULL_TREE, i);
7724
7725  lookup_fn = build1 (ADDR_EXPR,
7726		      build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7727		      java_iface_lookup_fn);
7728  return build_call_nary (ptr_type_node, lookup_fn,
7729			  3, klass_ref, iface_ref, idx);
7730}
7731
7732/* Returns the value to use for the in-charge parameter when making a
7733   call to a function with the indicated NAME.
7734
7735   FIXME:Can't we find a neater way to do this mapping?  */
7736
7737tree
7738in_charge_arg_for_name (tree name)
7739{
7740 if (name == base_ctor_identifier
7741      || name == base_dtor_identifier)
7742    return integer_zero_node;
7743  else if (name == complete_ctor_identifier)
7744    return integer_one_node;
7745  else if (name == complete_dtor_identifier)
7746    return integer_two_node;
7747  else if (name == deleting_dtor_identifier)
7748    return integer_three_node;
7749
7750  /* This function should only be called with one of the names listed
7751     above.  */
7752  gcc_unreachable ();
7753  return NULL_TREE;
7754}
7755
7756/* Build a call to a constructor, destructor, or an assignment
7757   operator for INSTANCE, an expression with class type.  NAME
7758   indicates the special member function to call; *ARGS are the
7759   arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
7760   indicates the base of INSTANCE that is to be passed as the `this'
7761   parameter to the member function called.
7762
7763   FLAGS are the LOOKUP_* flags to use when processing the call.
7764
7765   If NAME indicates a complete object constructor, INSTANCE may be
7766   NULL_TREE.  In this case, the caller will call build_cplus_new to
7767   store the newly constructed object into a VAR_DECL.  */
7768
7769tree
7770build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7771			   tree binfo, int flags, tsubst_flags_t complain)
7772{
7773  tree fns;
7774  /* The type of the subobject to be constructed or destroyed.  */
7775  tree class_type;
7776  vec<tree, va_gc> *allocated = NULL;
7777  tree ret;
7778
7779  gcc_assert (name == complete_ctor_identifier
7780	      || name == base_ctor_identifier
7781	      || name == complete_dtor_identifier
7782	      || name == base_dtor_identifier
7783	      || name == deleting_dtor_identifier
7784	      || name == ansi_assopname (NOP_EXPR));
7785  if (TYPE_P (binfo))
7786    {
7787      /* Resolve the name.  */
7788      if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7789	return error_mark_node;
7790
7791      binfo = TYPE_BINFO (binfo);
7792    }
7793
7794  gcc_assert (binfo != NULL_TREE);
7795
7796  class_type = BINFO_TYPE (binfo);
7797
7798  /* Handle the special case where INSTANCE is NULL_TREE.  */
7799  if (name == complete_ctor_identifier && !instance)
7800    instance = build_dummy_object (class_type);
7801  else
7802    {
7803      if (name == complete_dtor_identifier
7804	  || name == base_dtor_identifier
7805	  || name == deleting_dtor_identifier)
7806	gcc_assert (args == NULL || vec_safe_is_empty (*args));
7807
7808      /* Convert to the base class, if necessary.  */
7809      if (!same_type_ignoring_top_level_qualifiers_p
7810	  (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7811	{
7812	  if (name != ansi_assopname (NOP_EXPR))
7813	    /* For constructors and destructors, either the base is
7814	       non-virtual, or it is virtual but we are doing the
7815	       conversion from a constructor or destructor for the
7816	       complete object.  In either case, we can convert
7817	       statically.  */
7818	    instance = convert_to_base_statically (instance, binfo);
7819	  else
7820	    /* However, for assignment operators, we must convert
7821	       dynamically if the base is virtual.  */
7822	    instance = build_base_path (PLUS_EXPR, instance,
7823					binfo, /*nonnull=*/1, complain);
7824	}
7825    }
7826
7827  gcc_assert (instance != NULL_TREE);
7828
7829  fns = lookup_fnfields (binfo, name, 1);
7830
7831  /* When making a call to a constructor or destructor for a subobject
7832     that uses virtual base classes, pass down a pointer to a VTT for
7833     the subobject.  */
7834  if ((name == base_ctor_identifier
7835       || name == base_dtor_identifier)
7836      && CLASSTYPE_VBASECLASSES (class_type))
7837    {
7838      tree vtt;
7839      tree sub_vtt;
7840
7841      /* If the current function is a complete object constructor
7842	 or destructor, then we fetch the VTT directly.
7843	 Otherwise, we look it up using the VTT we were given.  */
7844      vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7845      vtt = decay_conversion (vtt, complain);
7846      if (vtt == error_mark_node)
7847	return error_mark_node;
7848      vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7849		    build2 (EQ_EXPR, boolean_type_node,
7850			    current_in_charge_parm, integer_zero_node),
7851		    current_vtt_parm,
7852		    vtt);
7853      if (BINFO_SUBVTT_INDEX (binfo))
7854	sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7855      else
7856	sub_vtt = vtt;
7857
7858      if (args == NULL)
7859	{
7860	  allocated = make_tree_vector ();
7861	  args = &allocated;
7862	}
7863
7864      vec_safe_insert (*args, 0, sub_vtt);
7865    }
7866
7867  ret = build_new_method_call (instance, fns, args,
7868			       TYPE_BINFO (BINFO_TYPE (binfo)),
7869			       flags, /*fn=*/NULL,
7870			       complain);
7871
7872  if (allocated != NULL)
7873    release_tree_vector (allocated);
7874
7875  if ((complain & tf_error)
7876      && (flags & LOOKUP_DELEGATING_CONS)
7877      && name == complete_ctor_identifier
7878      && TREE_CODE (ret) == CALL_EXPR
7879      && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
7880	  == current_function_decl))
7881    error ("constructor delegates to itself");
7882
7883  return ret;
7884}
7885
7886/* Return the NAME, as a C string.  The NAME indicates a function that
7887   is a member of TYPE.  *FREE_P is set to true if the caller must
7888   free the memory returned.
7889
7890   Rather than go through all of this, we should simply set the names
7891   of constructors and destructors appropriately, and dispense with
7892   ctor_identifier, dtor_identifier, etc.  */
7893
7894static char *
7895name_as_c_string (tree name, tree type, bool *free_p)
7896{
7897  char *pretty_name;
7898
7899  /* Assume that we will not allocate memory.  */
7900  *free_p = false;
7901  /* Constructors and destructors are special.  */
7902  if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7903    {
7904      pretty_name
7905	= CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7906      /* For a destructor, add the '~'.  */
7907      if (name == complete_dtor_identifier
7908	  || name == base_dtor_identifier
7909	  || name == deleting_dtor_identifier)
7910	{
7911	  pretty_name = concat ("~", pretty_name, NULL);
7912	  /* Remember that we need to free the memory allocated.  */
7913	  *free_p = true;
7914	}
7915    }
7916  else if (IDENTIFIER_TYPENAME_P (name))
7917    {
7918      pretty_name = concat ("operator ",
7919			    type_as_string_translate (TREE_TYPE (name),
7920						      TFF_PLAIN_IDENTIFIER),
7921			    NULL);
7922      /* Remember that we need to free the memory allocated.  */
7923      *free_p = true;
7924    }
7925  else
7926    pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7927
7928  return pretty_name;
7929}
7930
7931/* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
7932   be set, upon return, to the function called.  ARGS may be NULL.
7933   This may change ARGS.  */
7934
7935static tree
7936build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7937		         tree conversion_path, int flags,
7938		         tree *fn_p, tsubst_flags_t complain)
7939{
7940  struct z_candidate *candidates = 0, *cand;
7941  tree explicit_targs = NULL_TREE;
7942  tree basetype = NULL_TREE;
7943  tree access_binfo, binfo;
7944  tree optype;
7945  tree first_mem_arg = NULL_TREE;
7946  tree name;
7947  bool skip_first_for_error;
7948  vec<tree, va_gc> *user_args;
7949  tree call;
7950  tree fn;
7951  int template_only = 0;
7952  bool any_viable_p;
7953  tree orig_instance;
7954  tree orig_fns;
7955  vec<tree, va_gc> *orig_args = NULL;
7956  void *p;
7957
7958  gcc_assert (instance != NULL_TREE);
7959
7960  /* We don't know what function we're going to call, yet.  */
7961  if (fn_p)
7962    *fn_p = NULL_TREE;
7963
7964  if (error_operand_p (instance)
7965      || !fns || error_operand_p (fns))
7966    return error_mark_node;
7967
7968  if (!BASELINK_P (fns))
7969    {
7970      if (complain & tf_error)
7971	error ("call to non-function %qD", fns);
7972      return error_mark_node;
7973    }
7974
7975  orig_instance = instance;
7976  orig_fns = fns;
7977
7978  /* Dismantle the baselink to collect all the information we need.  */
7979  if (!conversion_path)
7980    conversion_path = BASELINK_BINFO (fns);
7981  access_binfo = BASELINK_ACCESS_BINFO (fns);
7982  binfo = BASELINK_BINFO (fns);
7983  optype = BASELINK_OPTYPE (fns);
7984  fns = BASELINK_FUNCTIONS (fns);
7985  if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7986    {
7987      explicit_targs = TREE_OPERAND (fns, 1);
7988      fns = TREE_OPERAND (fns, 0);
7989      template_only = 1;
7990    }
7991  gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7992	      || TREE_CODE (fns) == TEMPLATE_DECL
7993	      || TREE_CODE (fns) == OVERLOAD);
7994  fn = get_first_fn (fns);
7995  name = DECL_NAME (fn);
7996
7997  basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7998  gcc_assert (CLASS_TYPE_P (basetype));
7999
8000  if (processing_template_decl)
8001    {
8002      orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
8003      instance = build_non_dependent_expr (instance);
8004      if (args != NULL)
8005	make_args_non_dependent (*args);
8006    }
8007
8008  user_args = args == NULL ? NULL : *args;
8009  /* Under DR 147 A::A() is an invalid constructor call,
8010     not a functional cast.  */
8011  if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
8012    {
8013      if (! (complain & tf_error))
8014	return error_mark_node;
8015
8016      if (permerror (input_location,
8017		     "cannot call constructor %<%T::%D%> directly",
8018		     basetype, name))
8019	inform (input_location, "for a function-style cast, remove the "
8020		"redundant %<::%D%>", name);
8021      call = build_functional_cast (basetype, build_tree_list_vec (user_args),
8022				    complain);
8023      return call;
8024    }
8025
8026  /* Figure out whether to skip the first argument for the error
8027     message we will display to users if an error occurs.  We don't
8028     want to display any compiler-generated arguments.  The "this"
8029     pointer hasn't been added yet.  However, we must remove the VTT
8030     pointer if this is a call to a base-class constructor or
8031     destructor.  */
8032  skip_first_for_error = false;
8033  if (IDENTIFIER_CTOR_OR_DTOR_P (name))
8034    {
8035      /* Callers should explicitly indicate whether they want to construct
8036	 the complete object or just the part without virtual bases.  */
8037      gcc_assert (name != ctor_identifier);
8038      /* Similarly for destructors.  */
8039      gcc_assert (name != dtor_identifier);
8040      /* Remove the VTT pointer, if present.  */
8041      if ((name == base_ctor_identifier || name == base_dtor_identifier)
8042	  && CLASSTYPE_VBASECLASSES (basetype))
8043	skip_first_for_error = true;
8044    }
8045
8046  /* Process the argument list.  */
8047  if (args != NULL && *args != NULL)
8048    {
8049      *args = resolve_args (*args, complain);
8050      if (*args == NULL)
8051	return error_mark_node;
8052    }
8053
8054  /* Consider the object argument to be used even if we end up selecting a
8055     static member function.  */
8056  instance = mark_type_use (instance);
8057
8058  /* It's OK to call destructors and constructors on cv-qualified objects.
8059     Therefore, convert the INSTANCE to the unqualified type, if
8060     necessary.  */
8061  if (DECL_DESTRUCTOR_P (fn)
8062      || DECL_CONSTRUCTOR_P (fn))
8063    {
8064      if (!same_type_p (basetype, TREE_TYPE (instance)))
8065	{
8066	  instance = build_this (instance);
8067	  instance = build_nop (build_pointer_type (basetype), instance);
8068	  instance = build_fold_indirect_ref (instance);
8069	}
8070    }
8071  if (DECL_DESTRUCTOR_P (fn))
8072    name = complete_dtor_identifier;
8073
8074  /* For the overload resolution we need to find the actual `this`
8075     that would be captured if the call turns out to be to a
8076     non-static member function.  Do not actually capture it at this
8077     point.  */
8078  if (DECL_CONSTRUCTOR_P (fn))
8079    /* Constructors don't use the enclosing 'this'.  */
8080    first_mem_arg = instance;
8081  else
8082    first_mem_arg = maybe_resolve_dummy (instance, false);
8083
8084  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8085  p = conversion_obstack_alloc (0);
8086
8087  /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
8088     initializer, not T({ }).  */
8089  if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
8090      && DIRECT_LIST_INIT_P ((**args)[0]))
8091    {
8092      tree init_list = (**args)[0];
8093      tree init = NULL_TREE;
8094
8095      gcc_assert ((*args)->length () == 1
8096		  && !(flags & LOOKUP_ONLYCONVERTING));
8097
8098      /* If the initializer list has no elements and T is a class type with
8099	 a default constructor, the object is value-initialized.  Handle
8100	 this here so we don't need to handle it wherever we use
8101	 build_special_member_call.  */
8102      if (CONSTRUCTOR_NELTS (init_list) == 0
8103	  && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
8104	  /* For a user-provided default constructor, use the normal
8105	     mechanisms so that protected access works.  */
8106	  && type_has_non_user_provided_default_constructor (basetype)
8107	  && !processing_template_decl)
8108	init = build_value_init (basetype, complain);
8109
8110      /* If BASETYPE is an aggregate, we need to do aggregate
8111	 initialization.  */
8112      else if (CP_AGGREGATE_TYPE_P (basetype))
8113	init = digest_init (basetype, init_list, complain);
8114
8115      if (init)
8116	{
8117	  if (is_dummy_object (instance))
8118	    return get_target_expr_sfinae (init, complain);
8119	  init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
8120	  TREE_SIDE_EFFECTS (init) = true;
8121	  return init;
8122	}
8123
8124      /* Otherwise go ahead with overload resolution.  */
8125      add_list_candidates (fns, first_mem_arg, init_list,
8126			   basetype, explicit_targs, template_only,
8127			   conversion_path, access_binfo, flags,
8128			   &candidates, complain);
8129    }
8130  else
8131    {
8132      add_candidates (fns, first_mem_arg, user_args, optype,
8133		      explicit_targs, template_only, conversion_path,
8134		      access_binfo, flags, &candidates, complain);
8135    }
8136  any_viable_p = false;
8137  candidates = splice_viable (candidates, false, &any_viable_p);
8138
8139  if (!any_viable_p)
8140    {
8141      if (complain & tf_error)
8142	{
8143	  if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
8144	    cxx_incomplete_type_error (instance, basetype);
8145	  else if (optype)
8146	    error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
8147		   basetype, optype, build_tree_list_vec (user_args),
8148		   TREE_TYPE (instance));
8149	  else
8150	    {
8151	      char *pretty_name;
8152	      bool free_p;
8153	      tree arglist;
8154
8155	      pretty_name = name_as_c_string (name, basetype, &free_p);
8156	      arglist = build_tree_list_vec (user_args);
8157	      if (skip_first_for_error)
8158		arglist = TREE_CHAIN (arglist);
8159	      error ("no matching function for call to %<%T::%s(%A)%#V%>",
8160		     basetype, pretty_name, arglist,
8161		     TREE_TYPE (instance));
8162	      if (free_p)
8163		free (pretty_name);
8164	    }
8165	  print_z_candidates (location_of (name), candidates);
8166	}
8167      call = error_mark_node;
8168    }
8169  else
8170    {
8171      cand = tourney (candidates, complain);
8172      if (cand == 0)
8173	{
8174	  char *pretty_name;
8175	  bool free_p;
8176	  tree arglist;
8177
8178	  if (complain & tf_error)
8179	    {
8180	      pretty_name = name_as_c_string (name, basetype, &free_p);
8181	      arglist = build_tree_list_vec (user_args);
8182	      if (skip_first_for_error)
8183		arglist = TREE_CHAIN (arglist);
8184	      if (!any_strictly_viable (candidates))
8185		error ("no matching function for call to %<%s(%A)%>",
8186		       pretty_name, arglist);
8187	      else
8188		error ("call of overloaded %<%s(%A)%> is ambiguous",
8189		       pretty_name, arglist);
8190	      print_z_candidates (location_of (name), candidates);
8191	      if (free_p)
8192		free (pretty_name);
8193	    }
8194	  call = error_mark_node;
8195	}
8196      else
8197	{
8198	  fn = cand->fn;
8199	  call = NULL_TREE;
8200
8201	  if (!(flags & LOOKUP_NONVIRTUAL)
8202	      && DECL_PURE_VIRTUAL_P (fn)
8203	      && instance == current_class_ref
8204	      && (complain & tf_warning))
8205	    {
8206	      /* This is not an error, it is runtime undefined
8207		 behavior.  */
8208	      if (!current_function_decl)
8209		warning (0, "pure virtual %q#D called from "
8210			 "non-static data member initializer", fn);
8211	      else if (DECL_CONSTRUCTOR_P (current_function_decl)
8212		       || DECL_DESTRUCTOR_P (current_function_decl))
8213		warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
8214			     ? "pure virtual %q#D called from constructor"
8215			     : "pure virtual %q#D called from destructor"),
8216			 fn);
8217	    }
8218
8219	  if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
8220	      && !DECL_CONSTRUCTOR_P (fn)
8221	      && is_dummy_object (instance))
8222	    {
8223	      instance = maybe_resolve_dummy (instance, true);
8224	      if (instance == error_mark_node)
8225		call = error_mark_node;
8226	      else if (!is_dummy_object (instance))
8227		{
8228		  /* We captured 'this' in the current lambda now that
8229		     we know we really need it.  */
8230		  cand->first_arg = instance;
8231		}
8232	      else
8233		{
8234		  if (complain & tf_error)
8235		    error ("cannot call member function %qD without object",
8236			   fn);
8237		  call = error_mark_node;
8238		}
8239	    }
8240
8241	  if (call != error_mark_node)
8242	    {
8243	      /* Optimize away vtable lookup if we know that this
8244		 function can't be overridden.  We need to check if
8245		 the context and the type where we found fn are the same,
8246		 actually FN might be defined in a different class
8247		 type because of a using-declaration. In this case, we
8248		 do not want to perform a non-virtual call.  */
8249	      if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
8250		  && same_type_ignoring_top_level_qualifiers_p
8251		  (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
8252		  && resolves_to_fixed_type_p (instance, 0))
8253		flags |= LOOKUP_NONVIRTUAL;
8254              if (explicit_targs)
8255                flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
8256	      /* Now we know what function is being called.  */
8257	      if (fn_p)
8258		*fn_p = fn;
8259	      /* Build the actual CALL_EXPR.  */
8260	      call = build_over_call (cand, flags, complain);
8261	      /* In an expression of the form `a->f()' where `f' turns
8262		 out to be a static member function, `a' is
8263		 none-the-less evaluated.  */
8264	      if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
8265		  && !is_dummy_object (instance)
8266		  && TREE_SIDE_EFFECTS (instance))
8267		call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
8268			       instance, call);
8269	      else if (call != error_mark_node
8270		       && DECL_DESTRUCTOR_P (cand->fn)
8271		       && !VOID_TYPE_P (TREE_TYPE (call)))
8272		/* An explicit call of the form "x->~X()" has type
8273		   "void".  However, on platforms where destructors
8274		   return "this" (i.e., those where
8275		   targetm.cxx.cdtor_returns_this is true), such calls
8276		   will appear to have a return value of pointer type
8277		   to the low-level call machinery.  We do not want to
8278		   change the low-level machinery, since we want to be
8279		   able to optimize "delete f()" on such platforms as
8280		   "operator delete(~X(f()))" (rather than generating
8281		   "t = f(), ~X(t), operator delete (t)").  */
8282		call = build_nop (void_type_node, call);
8283	    }
8284	}
8285    }
8286
8287  if (processing_template_decl && call != error_mark_node)
8288    {
8289      bool cast_to_void = false;
8290
8291      if (TREE_CODE (call) == COMPOUND_EXPR)
8292	call = TREE_OPERAND (call, 1);
8293      else if (TREE_CODE (call) == NOP_EXPR)
8294	{
8295	  cast_to_void = true;
8296	  call = TREE_OPERAND (call, 0);
8297	}
8298      if (INDIRECT_REF_P (call))
8299	call = TREE_OPERAND (call, 0);
8300      call = (build_min_non_dep_call_vec
8301	      (call,
8302	       build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
8303			  orig_instance, orig_fns, NULL_TREE),
8304	       orig_args));
8305      SET_EXPR_LOCATION (call, input_location);
8306      call = convert_from_reference (call);
8307      if (cast_to_void)
8308	call = build_nop (void_type_node, call);
8309    }
8310
8311 /* Free all the conversions we allocated.  */
8312  obstack_free (&conversion_obstack, p);
8313
8314  if (orig_args != NULL)
8315    release_tree_vector (orig_args);
8316
8317  return call;
8318}
8319
8320/* Wrapper for above.  */
8321
8322tree
8323build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
8324		       tree conversion_path, int flags,
8325		       tree *fn_p, tsubst_flags_t complain)
8326{
8327  tree ret;
8328  bool subtime = timevar_cond_start (TV_OVERLOAD);
8329  ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
8330                                 fn_p, complain);
8331  timevar_cond_stop (TV_OVERLOAD, subtime);
8332  return ret;
8333}
8334
8335/* Returns true iff standard conversion sequence ICS1 is a proper
8336   subsequence of ICS2.  */
8337
8338static bool
8339is_subseq (conversion *ics1, conversion *ics2)
8340{
8341  /* We can assume that a conversion of the same code
8342     between the same types indicates a subsequence since we only get
8343     here if the types we are converting from are the same.  */
8344
8345  while (ics1->kind == ck_rvalue
8346	 || ics1->kind == ck_lvalue)
8347    ics1 = next_conversion (ics1);
8348
8349  while (1)
8350    {
8351      while (ics2->kind == ck_rvalue
8352	     || ics2->kind == ck_lvalue)
8353	ics2 = next_conversion (ics2);
8354
8355      if (ics2->kind == ck_user
8356	  || ics2->kind == ck_ambig
8357	  || ics2->kind == ck_aggr
8358	  || ics2->kind == ck_list
8359	  || ics2->kind == ck_identity)
8360	/* At this point, ICS1 cannot be a proper subsequence of
8361	   ICS2.  We can get a USER_CONV when we are comparing the
8362	   second standard conversion sequence of two user conversion
8363	   sequences.  */
8364	return false;
8365
8366      ics2 = next_conversion (ics2);
8367
8368      if (ics2->kind == ics1->kind
8369	  && same_type_p (ics2->type, ics1->type)
8370	  && same_type_p (next_conversion (ics2)->type,
8371			  next_conversion (ics1)->type))
8372	return true;
8373    }
8374}
8375
8376/* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
8377   be any _TYPE nodes.  */
8378
8379bool
8380is_properly_derived_from (tree derived, tree base)
8381{
8382  if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
8383    return false;
8384
8385  /* We only allow proper derivation here.  The DERIVED_FROM_P macro
8386     considers every class derived from itself.  */
8387  return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
8388	  && DERIVED_FROM_P (base, derived));
8389}
8390
8391/* We build the ICS for an implicit object parameter as a pointer
8392   conversion sequence.  However, such a sequence should be compared
8393   as if it were a reference conversion sequence.  If ICS is the
8394   implicit conversion sequence for an implicit object parameter,
8395   modify it accordingly.  */
8396
8397static void
8398maybe_handle_implicit_object (conversion **ics)
8399{
8400  if ((*ics)->this_p)
8401    {
8402      /* [over.match.funcs]
8403
8404	 For non-static member functions, the type of the
8405	 implicit object parameter is "reference to cv X"
8406	 where X is the class of which the function is a
8407	 member and cv is the cv-qualification on the member
8408	 function declaration.  */
8409      conversion *t = *ics;
8410      tree reference_type;
8411
8412      /* The `this' parameter is a pointer to a class type.  Make the
8413	 implicit conversion talk about a reference to that same class
8414	 type.  */
8415      reference_type = TREE_TYPE (t->type);
8416      reference_type = build_reference_type (reference_type);
8417
8418      if (t->kind == ck_qual)
8419	t = next_conversion (t);
8420      if (t->kind == ck_ptr)
8421	t = next_conversion (t);
8422      t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
8423      t = direct_reference_binding (reference_type, t);
8424      t->this_p = 1;
8425      t->rvaluedness_matches_p = 0;
8426      *ics = t;
8427    }
8428}
8429
8430/* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8431   and return the initial reference binding conversion. Otherwise,
8432   leave *ICS unchanged and return NULL.  */
8433
8434static conversion *
8435maybe_handle_ref_bind (conversion **ics)
8436{
8437  if ((*ics)->kind == ck_ref_bind)
8438    {
8439      conversion *old_ics = *ics;
8440      *ics = next_conversion (old_ics);
8441      (*ics)->user_conv_p = old_ics->user_conv_p;
8442      return old_ics;
8443    }
8444
8445  return NULL;
8446}
8447
8448/* Compare two implicit conversion sequences according to the rules set out in
8449   [over.ics.rank].  Return values:
8450
8451      1: ics1 is better than ics2
8452     -1: ics2 is better than ics1
8453      0: ics1 and ics2 are indistinguishable */
8454
8455static int
8456compare_ics (conversion *ics1, conversion *ics2)
8457{
8458  tree from_type1;
8459  tree from_type2;
8460  tree to_type1;
8461  tree to_type2;
8462  tree deref_from_type1 = NULL_TREE;
8463  tree deref_from_type2 = NULL_TREE;
8464  tree deref_to_type1 = NULL_TREE;
8465  tree deref_to_type2 = NULL_TREE;
8466  conversion_rank rank1, rank2;
8467
8468  /* REF_BINDING is nonzero if the result of the conversion sequence
8469     is a reference type.   In that case REF_CONV is the reference
8470     binding conversion. */
8471  conversion *ref_conv1;
8472  conversion *ref_conv2;
8473
8474  /* Compare badness before stripping the reference conversion.  */
8475  if (ics1->bad_p > ics2->bad_p)
8476    return -1;
8477  else if (ics1->bad_p < ics2->bad_p)
8478    return 1;
8479
8480  /* Handle implicit object parameters.  */
8481  maybe_handle_implicit_object (&ics1);
8482  maybe_handle_implicit_object (&ics2);
8483
8484  /* Handle reference parameters.  */
8485  ref_conv1 = maybe_handle_ref_bind (&ics1);
8486  ref_conv2 = maybe_handle_ref_bind (&ics2);
8487
8488  /* List-initialization sequence L1 is a better conversion sequence than
8489     list-initialization sequence L2 if L1 converts to
8490     std::initializer_list<X> for some X and L2 does not.  */
8491  if (ics1->kind == ck_list && ics2->kind != ck_list)
8492    return 1;
8493  if (ics2->kind == ck_list && ics1->kind != ck_list)
8494    return -1;
8495
8496  /* [over.ics.rank]
8497
8498     When  comparing  the  basic forms of implicit conversion sequences (as
8499     defined in _over.best.ics_)
8500
8501     --a standard conversion sequence (_over.ics.scs_) is a better
8502       conversion sequence than a user-defined conversion sequence
8503       or an ellipsis conversion sequence, and
8504
8505     --a user-defined conversion sequence (_over.ics.user_) is a
8506       better conversion sequence than an ellipsis conversion sequence
8507       (_over.ics.ellipsis_).  */
8508  /* Use BAD_CONVERSION_RANK because we already checked for a badness
8509     mismatch.  If both ICS are bad, we try to make a decision based on
8510     what would have happened if they'd been good.  This is not an
8511     extension, we'll still give an error when we build up the call; this
8512     just helps us give a more helpful error message.  */
8513  rank1 = BAD_CONVERSION_RANK (ics1);
8514  rank2 = BAD_CONVERSION_RANK (ics2);
8515
8516  if (rank1 > rank2)
8517    return -1;
8518  else if (rank1 < rank2)
8519    return 1;
8520
8521  if (ics1->ellipsis_p)
8522    /* Both conversions are ellipsis conversions.  */
8523    return 0;
8524
8525  /* User-defined  conversion sequence U1 is a better conversion sequence
8526     than another user-defined conversion sequence U2 if they contain the
8527     same user-defined conversion operator or constructor and if the sec-
8528     ond standard conversion sequence of U1 is  better  than  the  second
8529     standard conversion sequence of U2.  */
8530
8531  /* Handle list-conversion with the same code even though it isn't always
8532     ranked as a user-defined conversion and it doesn't have a second
8533     standard conversion sequence; it will still have the desired effect.
8534     Specifically, we need to do the reference binding comparison at the
8535     end of this function.  */
8536
8537  if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8538    {
8539      conversion *t1;
8540      conversion *t2;
8541
8542      for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8543	if (t1->kind == ck_ambig || t1->kind == ck_aggr
8544	    || t1->kind == ck_list)
8545	  break;
8546      for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8547	if (t2->kind == ck_ambig || t2->kind == ck_aggr
8548	    || t2->kind == ck_list)
8549	  break;
8550
8551      if (t1->kind != t2->kind)
8552	return 0;
8553      else if (t1->kind == ck_user)
8554	{
8555	  if (t1->cand->fn != t2->cand->fn)
8556	    return 0;
8557	}
8558      else
8559	{
8560	  /* For ambiguous or aggregate conversions, use the target type as
8561	     a proxy for the conversion function.  */
8562	  if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8563	    return 0;
8564	}
8565
8566      /* We can just fall through here, after setting up
8567	 FROM_TYPE1 and FROM_TYPE2.  */
8568      from_type1 = t1->type;
8569      from_type2 = t2->type;
8570    }
8571  else
8572    {
8573      conversion *t1;
8574      conversion *t2;
8575
8576      /* We're dealing with two standard conversion sequences.
8577
8578	 [over.ics.rank]
8579
8580	 Standard conversion sequence S1 is a better conversion
8581	 sequence than standard conversion sequence S2 if
8582
8583	 --S1 is a proper subsequence of S2 (comparing the conversion
8584	   sequences in the canonical form defined by _over.ics.scs_,
8585	   excluding any Lvalue Transformation; the identity
8586	   conversion sequence is considered to be a subsequence of
8587	   any non-identity conversion sequence */
8588
8589      t1 = ics1;
8590      while (t1->kind != ck_identity)
8591	t1 = next_conversion (t1);
8592      from_type1 = t1->type;
8593
8594      t2 = ics2;
8595      while (t2->kind != ck_identity)
8596	t2 = next_conversion (t2);
8597      from_type2 = t2->type;
8598    }
8599
8600  /* One sequence can only be a subsequence of the other if they start with
8601     the same type.  They can start with different types when comparing the
8602     second standard conversion sequence in two user-defined conversion
8603     sequences.  */
8604  if (same_type_p (from_type1, from_type2))
8605    {
8606      if (is_subseq (ics1, ics2))
8607	return 1;
8608      if (is_subseq (ics2, ics1))
8609	return -1;
8610    }
8611
8612  /* [over.ics.rank]
8613
8614     Or, if not that,
8615
8616     --the rank of S1 is better than the rank of S2 (by the rules
8617       defined below):
8618
8619    Standard conversion sequences are ordered by their ranks: an Exact
8620    Match is a better conversion than a Promotion, which is a better
8621    conversion than a Conversion.
8622
8623    Two conversion sequences with the same rank are indistinguishable
8624    unless one of the following rules applies:
8625
8626    --A conversion that does not a convert a pointer, pointer to member,
8627      or std::nullptr_t to bool is better than one that does.
8628
8629    The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8630    so that we do not have to check it explicitly.  */
8631  if (ics1->rank < ics2->rank)
8632    return 1;
8633  else if (ics2->rank < ics1->rank)
8634    return -1;
8635
8636  to_type1 = ics1->type;
8637  to_type2 = ics2->type;
8638
8639  /* A conversion from scalar arithmetic type to complex is worse than a
8640     conversion between scalar arithmetic types.  */
8641  if (same_type_p (from_type1, from_type2)
8642      && ARITHMETIC_TYPE_P (from_type1)
8643      && ARITHMETIC_TYPE_P (to_type1)
8644      && ARITHMETIC_TYPE_P (to_type2)
8645      && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8646	  != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8647    {
8648      if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8649	return -1;
8650      else
8651	return 1;
8652    }
8653
8654  if (TYPE_PTR_P (from_type1)
8655      && TYPE_PTR_P (from_type2)
8656      && TYPE_PTR_P (to_type1)
8657      && TYPE_PTR_P (to_type2))
8658    {
8659      deref_from_type1 = TREE_TYPE (from_type1);
8660      deref_from_type2 = TREE_TYPE (from_type2);
8661      deref_to_type1 = TREE_TYPE (to_type1);
8662      deref_to_type2 = TREE_TYPE (to_type2);
8663    }
8664  /* The rules for pointers to members A::* are just like the rules
8665     for pointers A*, except opposite: if B is derived from A then
8666     A::* converts to B::*, not vice versa.  For that reason, we
8667     switch the from_ and to_ variables here.  */
8668  else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8669	    && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8670	   || (TYPE_PTRMEMFUNC_P (from_type1)
8671	       && TYPE_PTRMEMFUNC_P (from_type2)
8672	       && TYPE_PTRMEMFUNC_P (to_type1)
8673	       && TYPE_PTRMEMFUNC_P (to_type2)))
8674    {
8675      deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8676      deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8677      deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8678      deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8679    }
8680
8681  if (deref_from_type1 != NULL_TREE
8682      && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8683      && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8684    {
8685      /* This was one of the pointer or pointer-like conversions.
8686
8687	 [over.ics.rank]
8688
8689	 --If class B is derived directly or indirectly from class A,
8690	   conversion of B* to A* is better than conversion of B* to
8691	   void*, and conversion of A* to void* is better than
8692	   conversion of B* to void*.  */
8693      if (VOID_TYPE_P (deref_to_type1)
8694	  && VOID_TYPE_P (deref_to_type2))
8695	{
8696	  if (is_properly_derived_from (deref_from_type1,
8697					deref_from_type2))
8698	    return -1;
8699	  else if (is_properly_derived_from (deref_from_type2,
8700					     deref_from_type1))
8701	    return 1;
8702	}
8703      else if (VOID_TYPE_P (deref_to_type1)
8704	       || VOID_TYPE_P (deref_to_type2))
8705	{
8706	  if (same_type_p (deref_from_type1, deref_from_type2))
8707	    {
8708	      if (VOID_TYPE_P (deref_to_type2))
8709		{
8710		  if (is_properly_derived_from (deref_from_type1,
8711						deref_to_type1))
8712		    return 1;
8713		}
8714	      /* We know that DEREF_TO_TYPE1 is `void' here.  */
8715	      else if (is_properly_derived_from (deref_from_type1,
8716						 deref_to_type2))
8717		return -1;
8718	    }
8719	}
8720      else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8721	       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8722	{
8723	  /* [over.ics.rank]
8724
8725	     --If class B is derived directly or indirectly from class A
8726	       and class C is derived directly or indirectly from B,
8727
8728	     --conversion of C* to B* is better than conversion of C* to
8729	       A*,
8730
8731	     --conversion of B* to A* is better than conversion of C* to
8732	       A*  */
8733	  if (same_type_p (deref_from_type1, deref_from_type2))
8734	    {
8735	      if (is_properly_derived_from (deref_to_type1,
8736					    deref_to_type2))
8737		return 1;
8738	      else if (is_properly_derived_from (deref_to_type2,
8739						 deref_to_type1))
8740		return -1;
8741	    }
8742	  else if (same_type_p (deref_to_type1, deref_to_type2))
8743	    {
8744	      if (is_properly_derived_from (deref_from_type2,
8745					    deref_from_type1))
8746		return 1;
8747	      else if (is_properly_derived_from (deref_from_type1,
8748						 deref_from_type2))
8749		return -1;
8750	    }
8751	}
8752    }
8753  else if (CLASS_TYPE_P (non_reference (from_type1))
8754	   && same_type_p (from_type1, from_type2))
8755    {
8756      tree from = non_reference (from_type1);
8757
8758      /* [over.ics.rank]
8759
8760	 --binding of an expression of type C to a reference of type
8761	   B& is better than binding an expression of type C to a
8762	   reference of type A&
8763
8764	 --conversion of C to B is better than conversion of C to A,  */
8765      if (is_properly_derived_from (from, to_type1)
8766	  && is_properly_derived_from (from, to_type2))
8767	{
8768	  if (is_properly_derived_from (to_type1, to_type2))
8769	    return 1;
8770	  else if (is_properly_derived_from (to_type2, to_type1))
8771	    return -1;
8772	}
8773    }
8774  else if (CLASS_TYPE_P (non_reference (to_type1))
8775	   && same_type_p (to_type1, to_type2))
8776    {
8777      tree to = non_reference (to_type1);
8778
8779      /* [over.ics.rank]
8780
8781	 --binding of an expression of type B to a reference of type
8782	   A& is better than binding an expression of type C to a
8783	   reference of type A&,
8784
8785	 --conversion of B to A is better than conversion of C to A  */
8786      if (is_properly_derived_from (from_type1, to)
8787	  && is_properly_derived_from (from_type2, to))
8788	{
8789	  if (is_properly_derived_from (from_type2, from_type1))
8790	    return 1;
8791	  else if (is_properly_derived_from (from_type1, from_type2))
8792	    return -1;
8793	}
8794    }
8795
8796  /* [over.ics.rank]
8797
8798     --S1 and S2 differ only in their qualification conversion and  yield
8799       similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
8800       qualification signature of type T1 is a proper subset of  the  cv-
8801       qualification signature of type T2  */
8802  if (ics1->kind == ck_qual
8803      && ics2->kind == ck_qual
8804      && same_type_p (from_type1, from_type2))
8805    {
8806      int result = comp_cv_qual_signature (to_type1, to_type2);
8807      if (result != 0)
8808	return result;
8809    }
8810
8811  /* [over.ics.rank]
8812
8813     --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8814     to an implicit object parameter of a non-static member function
8815     declared without a ref-qualifier, and either S1 binds an lvalue
8816     reference to an lvalue and S2 binds an rvalue reference or S1 binds an
8817     rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
8818     draft standard, 13.3.3.2)
8819
8820     --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8821     types to which the references refer are the same type except for
8822     top-level cv-qualifiers, and the type to which the reference
8823     initialized by S2 refers is more cv-qualified than the type to
8824     which the reference initialized by S1 refers.
8825
8826     DR 1328 [over.match.best]: the context is an initialization by
8827     conversion function for direct reference binding (13.3.1.6) of a
8828     reference to function type, the return type of F1 is the same kind of
8829     reference (i.e. lvalue or rvalue) as the reference being initialized,
8830     and the return type of F2 is not.  */
8831
8832  if (ref_conv1 && ref_conv2)
8833    {
8834      if (!ref_conv1->this_p && !ref_conv2->this_p
8835	  && (ref_conv1->rvaluedness_matches_p
8836	      != ref_conv2->rvaluedness_matches_p)
8837	  && (same_type_p (ref_conv1->type, ref_conv2->type)
8838	      || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8839		  != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8840	{
8841	  if (ref_conv1->bad_p
8842	      && !same_type_p (TREE_TYPE (ref_conv1->type),
8843			       TREE_TYPE (ref_conv2->type)))
8844	    /* Don't prefer a bad conversion that drops cv-quals to a bad
8845	       conversion with the wrong rvalueness.  */
8846	    return 0;
8847	  return (ref_conv1->rvaluedness_matches_p
8848		  - ref_conv2->rvaluedness_matches_p);
8849	}
8850
8851      if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8852	{
8853	  int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
8854	  int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
8855	  if (ref_conv1->bad_p)
8856	    {
8857	      /* Prefer the one that drops fewer cv-quals.  */
8858	      tree ftype = next_conversion (ref_conv1)->type;
8859	      int fquals = cp_type_quals (ftype);
8860	      q1 ^= fquals;
8861	      q2 ^= fquals;
8862	    }
8863	  return comp_cv_qualification (q2, q1);
8864	}
8865    }
8866
8867  /* Neither conversion sequence is better than the other.  */
8868  return 0;
8869}
8870
8871/* The source type for this standard conversion sequence.  */
8872
8873static tree
8874source_type (conversion *t)
8875{
8876  for (;; t = next_conversion (t))
8877    {
8878      if (t->kind == ck_user
8879	  || t->kind == ck_ambig
8880	  || t->kind == ck_identity)
8881	return t->type;
8882    }
8883  gcc_unreachable ();
8884}
8885
8886/* Note a warning about preferring WINNER to LOSER.  We do this by storing
8887   a pointer to LOSER and re-running joust to produce the warning if WINNER
8888   is actually used.  */
8889
8890static void
8891add_warning (struct z_candidate *winner, struct z_candidate *loser)
8892{
8893  candidate_warning *cw = (candidate_warning *)
8894    conversion_obstack_alloc (sizeof (candidate_warning));
8895  cw->loser = loser;
8896  cw->next = winner->warnings;
8897  winner->warnings = cw;
8898}
8899
8900/* Compare two candidates for overloading as described in
8901   [over.match.best].  Return values:
8902
8903      1: cand1 is better than cand2
8904     -1: cand2 is better than cand1
8905      0: cand1 and cand2 are indistinguishable */
8906
8907static int
8908joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8909       tsubst_flags_t complain)
8910{
8911  int winner = 0;
8912  int off1 = 0, off2 = 0;
8913  size_t i;
8914  size_t len;
8915
8916  /* Candidates that involve bad conversions are always worse than those
8917     that don't.  */
8918  if (cand1->viable > cand2->viable)
8919    return 1;
8920  if (cand1->viable < cand2->viable)
8921    return -1;
8922
8923  /* If we have two pseudo-candidates for conversions to the same type,
8924     or two candidates for the same function, arbitrarily pick one.  */
8925  if (cand1->fn == cand2->fn
8926      && (IS_TYPE_OR_DECL_P (cand1->fn)))
8927    return 1;
8928
8929  /* Prefer a non-deleted function over an implicitly deleted move
8930     constructor or assignment operator.  This differs slightly from the
8931     wording for issue 1402 (which says the move op is ignored by overload
8932     resolution), but this way produces better error messages.  */
8933  if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8934      && TREE_CODE (cand2->fn) == FUNCTION_DECL
8935      && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8936    {
8937      if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8938	  && move_fn_p (cand1->fn))
8939	return -1;
8940      if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8941	  && move_fn_p (cand2->fn))
8942	return 1;
8943    }
8944
8945  /* a viable function F1
8946     is defined to be a better function than another viable function F2  if
8947     for  all arguments i, ICSi(F1) is not a worse conversion sequence than
8948     ICSi(F2), and then */
8949
8950  /* for some argument j, ICSj(F1) is a better conversion  sequence  than
8951     ICSj(F2) */
8952
8953  /* For comparing static and non-static member functions, we ignore
8954     the implicit object parameter of the non-static function.  The
8955     standard says to pretend that the static function has an object
8956     parm, but that won't work with operator overloading.  */
8957  len = cand1->num_convs;
8958  if (len != cand2->num_convs)
8959    {
8960      int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8961      int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8962
8963      if (DECL_CONSTRUCTOR_P (cand1->fn)
8964	  && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8965	/* We're comparing a near-match list constructor and a near-match
8966	   non-list constructor.  Just treat them as unordered.  */
8967	return 0;
8968
8969      gcc_assert (static_1 != static_2);
8970
8971      if (static_1)
8972	off2 = 1;
8973      else
8974	{
8975	  off1 = 1;
8976	  --len;
8977	}
8978    }
8979
8980  for (i = 0; i < len; ++i)
8981    {
8982      conversion *t1 = cand1->convs[i + off1];
8983      conversion *t2 = cand2->convs[i + off2];
8984      int comp = compare_ics (t1, t2);
8985
8986      if (comp != 0)
8987	{
8988	  if ((complain & tf_warning)
8989	      && warn_sign_promo
8990	      && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8991		  == cr_std + cr_promotion)
8992	      && t1->kind == ck_std
8993	      && t2->kind == ck_std
8994	      && TREE_CODE (t1->type) == INTEGER_TYPE
8995	      && TREE_CODE (t2->type) == INTEGER_TYPE
8996	      && (TYPE_PRECISION (t1->type)
8997		  == TYPE_PRECISION (t2->type))
8998	      && (TYPE_UNSIGNED (next_conversion (t1)->type)
8999		  || (TREE_CODE (next_conversion (t1)->type)
9000		      == ENUMERAL_TYPE)))
9001	    {
9002	      tree type = next_conversion (t1)->type;
9003	      tree type1, type2;
9004	      struct z_candidate *w, *l;
9005	      if (comp > 0)
9006		type1 = t1->type, type2 = t2->type,
9007		  w = cand1, l = cand2;
9008	      else
9009		type1 = t2->type, type2 = t1->type,
9010		  w = cand2, l = cand1;
9011
9012	      if (warn)
9013		{
9014		  warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
9015			   type, type1, type2);
9016		  warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
9017		}
9018	      else
9019		add_warning (w, l);
9020	    }
9021
9022	  if (winner && comp != winner)
9023	    {
9024	      winner = 0;
9025	      goto tweak;
9026	    }
9027	  winner = comp;
9028	}
9029    }
9030
9031  /* warn about confusing overload resolution for user-defined conversions,
9032     either between a constructor and a conversion op, or between two
9033     conversion ops.  */
9034  if ((complain & tf_warning)
9035      && winner && warn_conversion && cand1->second_conv
9036      && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
9037      && winner != compare_ics (cand1->second_conv, cand2->second_conv))
9038    {
9039      struct z_candidate *w, *l;
9040      bool give_warning = false;
9041
9042      if (winner == 1)
9043	w = cand1, l = cand2;
9044      else
9045	w = cand2, l = cand1;
9046
9047      /* We don't want to complain about `X::operator T1 ()'
9048	 beating `X::operator T2 () const', when T2 is a no less
9049	 cv-qualified version of T1.  */
9050      if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
9051	  && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
9052	{
9053	  tree t = TREE_TYPE (TREE_TYPE (l->fn));
9054	  tree f = TREE_TYPE (TREE_TYPE (w->fn));
9055
9056	  if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
9057	    {
9058	      t = TREE_TYPE (t);
9059	      f = TREE_TYPE (f);
9060	    }
9061	  if (!comp_ptr_ttypes (t, f))
9062	    give_warning = true;
9063	}
9064      else
9065	give_warning = true;
9066
9067      if (!give_warning)
9068	/*NOP*/;
9069      else if (warn)
9070	{
9071	  tree source = source_type (w->convs[0]);
9072	  if (! DECL_CONSTRUCTOR_P (w->fn))
9073	    source = TREE_TYPE (source);
9074	  if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
9075	      && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
9076			  source, w->second_conv->type))
9077	    {
9078	      inform (input_location, "  because conversion sequence for the argument is better");
9079	    }
9080	}
9081      else
9082	add_warning (w, l);
9083    }
9084
9085  if (winner)
9086    return winner;
9087
9088  /* DR 495 moved this tiebreaker above the template ones.  */
9089  /* or, if not that,
9090     the  context  is  an  initialization by user-defined conversion (see
9091     _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
9092     sequence  from  the return type of F1 to the destination type (i.e.,
9093     the type of the entity being initialized)  is  a  better  conversion
9094     sequence  than the standard conversion sequence from the return type
9095     of F2 to the destination type.  */
9096
9097  if (cand1->second_conv)
9098    {
9099      winner = compare_ics (cand1->second_conv, cand2->second_conv);
9100      if (winner)
9101	return winner;
9102    }
9103
9104  /* or, if not that,
9105     F1 is a non-template function and F2 is a template function
9106     specialization.  */
9107
9108  if (!cand1->template_decl && cand2->template_decl)
9109    return 1;
9110  else if (cand1->template_decl && !cand2->template_decl)
9111    return -1;
9112
9113  /* or, if not that,
9114     F1 and F2 are template functions and the function template for F1 is
9115     more specialized than the template for F2 according to the partial
9116     ordering rules.  */
9117
9118  if (cand1->template_decl && cand2->template_decl)
9119    {
9120      winner = more_specialized_fn
9121	(TI_TEMPLATE (cand1->template_decl),
9122	 TI_TEMPLATE (cand2->template_decl),
9123	 /* [temp.func.order]: The presence of unused ellipsis and default
9124	    arguments has no effect on the partial ordering of function
9125	    templates.   add_function_candidate() will not have
9126	    counted the "this" argument for constructors.  */
9127	 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
9128      if (winner)
9129	return winner;
9130    }
9131
9132  /* Check whether we can discard a builtin candidate, either because we
9133     have two identical ones or matching builtin and non-builtin candidates.
9134
9135     (Pedantically in the latter case the builtin which matched the user
9136     function should not be added to the overload set, but we spot it here.
9137
9138     [over.match.oper]
9139     ... the builtin candidates include ...
9140     - do not have the same parameter type list as any non-template
9141       non-member candidate.  */
9142
9143  if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
9144    {
9145      for (i = 0; i < len; ++i)
9146	if (!same_type_p (cand1->convs[i]->type,
9147			  cand2->convs[i]->type))
9148	  break;
9149      if (i == cand1->num_convs)
9150	{
9151	  if (cand1->fn == cand2->fn)
9152	    /* Two built-in candidates; arbitrarily pick one.  */
9153	    return 1;
9154	  else if (identifier_p (cand1->fn))
9155	    /* cand1 is built-in; prefer cand2.  */
9156	    return -1;
9157	  else
9158	    /* cand2 is built-in; prefer cand1.  */
9159	    return 1;
9160	}
9161    }
9162
9163  /* For candidates of a multi-versioned function,  make the version with
9164     the highest priority win.  This version will be checked for dispatching
9165     first.  If this version can be inlined into the caller, the front-end
9166     will simply make a direct call to this function.  */
9167
9168  if (TREE_CODE (cand1->fn) == FUNCTION_DECL
9169      && DECL_FUNCTION_VERSIONED (cand1->fn)
9170      && TREE_CODE (cand2->fn) == FUNCTION_DECL
9171      && DECL_FUNCTION_VERSIONED (cand2->fn))
9172    {
9173      tree f1 = TREE_TYPE (cand1->fn);
9174      tree f2 = TREE_TYPE (cand2->fn);
9175      tree p1 = TYPE_ARG_TYPES (f1);
9176      tree p2 = TYPE_ARG_TYPES (f2);
9177
9178      /* Check if cand1->fn and cand2->fn are versions of the same function.  It
9179         is possible that cand1->fn and cand2->fn are function versions but of
9180         different functions.  Check types to see if they are versions of the same
9181         function.  */
9182      if (compparms (p1, p2)
9183	  && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
9184	{
9185	  /* Always make the version with the higher priority, more
9186	     specialized, win.  */
9187	  gcc_assert (targetm.compare_version_priority);
9188	  if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
9189	    return 1;
9190	  else
9191	    return -1;
9192	}
9193    }
9194
9195  /* If the two function declarations represent the same function (this can
9196     happen with declarations in multiple scopes and arg-dependent lookup),
9197     arbitrarily choose one.  But first make sure the default args we're
9198     using match.  */
9199  if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
9200      && equal_functions (cand1->fn, cand2->fn))
9201    {
9202      tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
9203      tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
9204
9205      gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
9206
9207      for (i = 0; i < len; ++i)
9208	{
9209	  /* Don't crash if the fn is variadic.  */
9210	  if (!parms1)
9211	    break;
9212	  parms1 = TREE_CHAIN (parms1);
9213	  parms2 = TREE_CHAIN (parms2);
9214	}
9215
9216      if (off1)
9217	parms1 = TREE_CHAIN (parms1);
9218      else if (off2)
9219	parms2 = TREE_CHAIN (parms2);
9220
9221      for (; parms1; ++i)
9222	{
9223	  if (!cp_tree_equal (TREE_PURPOSE (parms1),
9224			      TREE_PURPOSE (parms2)))
9225	    {
9226	      if (warn)
9227		{
9228		  if (complain & tf_error)
9229		    {
9230		      if (permerror (input_location,
9231				     "default argument mismatch in "
9232				     "overload resolution"))
9233			{
9234			  inform (input_location,
9235				  " candidate 1: %q+#F", cand1->fn);
9236			  inform (input_location,
9237				  " candidate 2: %q+#F", cand2->fn);
9238			}
9239		    }
9240		  else
9241		    return 0;
9242		}
9243	      else
9244		add_warning (cand1, cand2);
9245	      break;
9246	    }
9247	  parms1 = TREE_CHAIN (parms1);
9248	  parms2 = TREE_CHAIN (parms2);
9249	}
9250
9251      return 1;
9252    }
9253
9254tweak:
9255
9256  /* Extension: If the worst conversion for one candidate is worse than the
9257     worst conversion for the other, take the first.  */
9258  if (!pedantic && (complain & tf_warning_or_error))
9259    {
9260      conversion_rank rank1 = cr_identity, rank2 = cr_identity;
9261      struct z_candidate *w = 0, *l = 0;
9262
9263      for (i = 0; i < len; ++i)
9264	{
9265	  if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
9266	    rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
9267	  if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
9268	    rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
9269	}
9270      if (rank1 < rank2)
9271	winner = 1, w = cand1, l = cand2;
9272      if (rank1 > rank2)
9273	winner = -1, w = cand2, l = cand1;
9274      if (winner)
9275	{
9276	  /* Don't choose a deleted function over ambiguity.  */
9277	  if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
9278	    return 0;
9279	  if (warn)
9280	    {
9281	      pedwarn (input_location, 0,
9282	      "ISO C++ says that these are ambiguous, even "
9283	      "though the worst conversion for the first is better than "
9284	      "the worst conversion for the second:");
9285	      print_z_candidate (input_location, _("candidate 1:"), w);
9286	      print_z_candidate (input_location, _("candidate 2:"), l);
9287	    }
9288	  else
9289	    add_warning (w, l);
9290	  return winner;
9291	}
9292    }
9293
9294  gcc_assert (!winner);
9295  return 0;
9296}
9297
9298/* Given a list of candidates for overloading, find the best one, if any.
9299   This algorithm has a worst case of O(2n) (winner is last), and a best
9300   case of O(n/2) (totally ambiguous); much better than a sorting
9301   algorithm.  */
9302
9303static struct z_candidate *
9304tourney (struct z_candidate *candidates, tsubst_flags_t complain)
9305{
9306  struct z_candidate *champ = candidates, *challenger;
9307  int fate;
9308  int champ_compared_to_predecessor = 0;
9309
9310  /* Walk through the list once, comparing each current champ to the next
9311     candidate, knocking out a candidate or two with each comparison.  */
9312
9313  for (challenger = champ->next; challenger; )
9314    {
9315      fate = joust (champ, challenger, 0, complain);
9316      if (fate == 1)
9317	challenger = challenger->next;
9318      else
9319	{
9320	  if (fate == 0)
9321	    {
9322	      champ = challenger->next;
9323	      if (champ == 0)
9324		return NULL;
9325	      champ_compared_to_predecessor = 0;
9326	    }
9327	  else
9328	    {
9329	      champ = challenger;
9330	      champ_compared_to_predecessor = 1;
9331	    }
9332
9333	  challenger = champ->next;
9334	}
9335    }
9336
9337  /* Make sure the champ is better than all the candidates it hasn't yet
9338     been compared to.  */
9339
9340  for (challenger = candidates;
9341       challenger != champ
9342	 && !(champ_compared_to_predecessor && challenger->next == champ);
9343       challenger = challenger->next)
9344    {
9345      fate = joust (champ, challenger, 0, complain);
9346      if (fate != 1)
9347	return NULL;
9348    }
9349
9350  return champ;
9351}
9352
9353/* Returns nonzero if things of type FROM can be converted to TO.  */
9354
9355bool
9356can_convert (tree to, tree from, tsubst_flags_t complain)
9357{
9358  tree arg = NULL_TREE;
9359  /* implicit_conversion only considers user-defined conversions
9360     if it has an expression for the call argument list.  */
9361  if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
9362    arg = build1 (CAST_EXPR, from, NULL_TREE);
9363  return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
9364}
9365
9366/* Returns nonzero if things of type FROM can be converted to TO with a
9367   standard conversion.  */
9368
9369bool
9370can_convert_standard (tree to, tree from, tsubst_flags_t complain)
9371{
9372  return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
9373}
9374
9375/* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
9376
9377bool
9378can_convert_arg (tree to, tree from, tree arg, int flags,
9379		 tsubst_flags_t complain)
9380{
9381  conversion *t;
9382  void *p;
9383  bool ok_p;
9384
9385  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9386  p = conversion_obstack_alloc (0);
9387  /* We want to discard any access checks done for this test,
9388     as we might not be in the appropriate access context and
9389     we'll do the check again when we actually perform the
9390     conversion.  */
9391  push_deferring_access_checks (dk_deferred);
9392
9393  t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9394			    flags, complain);
9395  ok_p = (t && !t->bad_p);
9396
9397  /* Discard the access checks now.  */
9398  pop_deferring_access_checks ();
9399  /* Free all the conversions we allocated.  */
9400  obstack_free (&conversion_obstack, p);
9401
9402  return ok_p;
9403}
9404
9405/* Like can_convert_arg, but allows dubious conversions as well.  */
9406
9407bool
9408can_convert_arg_bad (tree to, tree from, tree arg, int flags,
9409		     tsubst_flags_t complain)
9410{
9411  conversion *t;
9412  void *p;
9413
9414  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9415  p = conversion_obstack_alloc (0);
9416  /* Try to perform the conversion.  */
9417  t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9418			    flags, complain);
9419  /* Free all the conversions we allocated.  */
9420  obstack_free (&conversion_obstack, p);
9421
9422  return t != NULL;
9423}
9424
9425/* Convert EXPR to TYPE.  Return the converted expression.
9426
9427   Note that we allow bad conversions here because by the time we get to
9428   this point we are committed to doing the conversion.  If we end up
9429   doing a bad conversion, convert_like will complain.  */
9430
9431tree
9432perform_implicit_conversion_flags (tree type, tree expr,
9433				   tsubst_flags_t complain, int flags)
9434{
9435  conversion *conv;
9436  void *p;
9437  location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9438
9439  if (error_operand_p (expr))
9440    return error_mark_node;
9441
9442  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9443  p = conversion_obstack_alloc (0);
9444
9445  conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9446			      /*c_cast_p=*/false,
9447			      flags, complain);
9448
9449  if (!conv)
9450    {
9451      if (complain & tf_error)
9452	{
9453	  /* If expr has unknown type, then it is an overloaded function.
9454	     Call instantiate_type to get good error messages.  */
9455	  if (TREE_TYPE (expr) == unknown_type_node)
9456	    instantiate_type (type, expr, complain);
9457	  else if (invalid_nonstatic_memfn_p (expr, complain))
9458	    /* We gave an error.  */;
9459	  else
9460	    error_at (loc, "could not convert %qE from %qT to %qT", expr,
9461		      TREE_TYPE (expr), type);
9462	}
9463      expr = error_mark_node;
9464    }
9465  else if (processing_template_decl && conv->kind != ck_identity)
9466    {
9467      /* In a template, we are only concerned about determining the
9468	 type of non-dependent expressions, so we do not have to
9469	 perform the actual conversion.  But for initializers, we
9470	 need to be able to perform it at instantiation
9471	 (or instantiate_non_dependent_expr) time.  */
9472      expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9473      if (!(flags & LOOKUP_ONLYCONVERTING))
9474	IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9475    }
9476  else
9477    expr = convert_like (conv, expr, complain);
9478
9479  /* Free all the conversions we allocated.  */
9480  obstack_free (&conversion_obstack, p);
9481
9482  return expr;
9483}
9484
9485tree
9486perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9487{
9488  return perform_implicit_conversion_flags (type, expr, complain,
9489					    LOOKUP_IMPLICIT);
9490}
9491
9492/* Convert EXPR to TYPE (as a direct-initialization) if that is
9493   permitted.  If the conversion is valid, the converted expression is
9494   returned.  Otherwise, NULL_TREE is returned, except in the case
9495   that TYPE is a class type; in that case, an error is issued.  If
9496   C_CAST_P is true, then this direct-initialization is taking
9497   place as part of a static_cast being attempted as part of a C-style
9498   cast.  */
9499
9500tree
9501perform_direct_initialization_if_possible (tree type,
9502					   tree expr,
9503					   bool c_cast_p,
9504                                           tsubst_flags_t complain)
9505{
9506  conversion *conv;
9507  void *p;
9508
9509  if (type == error_mark_node || error_operand_p (expr))
9510    return error_mark_node;
9511  /* [dcl.init]
9512
9513     If the destination type is a (possibly cv-qualified) class type:
9514
9515     -- If the initialization is direct-initialization ...,
9516     constructors are considered. ... If no constructor applies, or
9517     the overload resolution is ambiguous, the initialization is
9518     ill-formed.  */
9519  if (CLASS_TYPE_P (type))
9520    {
9521      vec<tree, va_gc> *args = make_tree_vector_single (expr);
9522      expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9523					&args, type, LOOKUP_NORMAL, complain);
9524      release_tree_vector (args);
9525      return build_cplus_new (type, expr, complain);
9526    }
9527
9528  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9529  p = conversion_obstack_alloc (0);
9530
9531  conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9532			      c_cast_p,
9533			      LOOKUP_NORMAL, complain);
9534  if (!conv || conv->bad_p)
9535    expr = NULL_TREE;
9536  else
9537    expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9538			      /*issue_conversion_warnings=*/false,
9539			      c_cast_p,
9540			      complain);
9541
9542  /* Free all the conversions we allocated.  */
9543  obstack_free (&conversion_obstack, p);
9544
9545  return expr;
9546}
9547
9548/* When initializing a reference that lasts longer than a full-expression,
9549   this special rule applies:
9550
9551     [class.temporary]
9552
9553     The temporary to which the reference is bound or the temporary
9554     that is the complete object to which the reference is bound
9555     persists for the lifetime of the reference.
9556
9557     The temporaries created during the evaluation of the expression
9558     initializing the reference, except the temporary to which the
9559     reference is bound, are destroyed at the end of the
9560     full-expression in which they are created.
9561
9562   In that case, we store the converted expression into a new
9563   VAR_DECL in a new scope.
9564
9565   However, we want to be careful not to create temporaries when
9566   they are not required.  For example, given:
9567
9568     struct B {};
9569     struct D : public B {};
9570     D f();
9571     const B& b = f();
9572
9573   there is no need to copy the return value from "f"; we can just
9574   extend its lifetime.  Similarly, given:
9575
9576     struct S {};
9577     struct T { operator S(); };
9578     T t;
9579     const S& s = t;
9580
9581  we can extend the lifetime of the return value of the conversion
9582  operator.
9583
9584  The next several functions are involved in this lifetime extension.  */
9585
9586/* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE.  The
9587   reference is being bound to a temporary.  Create and return a new
9588   VAR_DECL with the indicated TYPE; this variable will store the value to
9589   which the reference is bound.  */
9590
9591tree
9592make_temporary_var_for_ref_to_temp (tree decl, tree type)
9593{
9594  tree var;
9595
9596  /* Create the variable.  */
9597  var = create_temporary_var (type);
9598
9599  /* Register the variable.  */
9600  if (VAR_P (decl)
9601      && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9602    {
9603      /* Namespace-scope or local static; give it a mangled name.  */
9604      /* FIXME share comdat with decl?  */
9605      tree name;
9606
9607      TREE_STATIC (var) = TREE_STATIC (decl);
9608      set_decl_tls_model (var, DECL_TLS_MODEL (decl));
9609      name = mangle_ref_init_variable (decl);
9610      DECL_NAME (var) = name;
9611      SET_DECL_ASSEMBLER_NAME (var, name);
9612      var = pushdecl_top_level (var);
9613    }
9614  else
9615    /* Create a new cleanup level if necessary.  */
9616    maybe_push_cleanup_level (type);
9617
9618  return var;
9619}
9620
9621/* EXPR is the initializer for a variable DECL of reference or
9622   std::initializer_list type.  Create, push and return a new VAR_DECL
9623   for the initializer so that it will live as long as DECL.  Any
9624   cleanup for the new variable is returned through CLEANUP, and the
9625   code to initialize the new variable is returned through INITP.  */
9626
9627static tree
9628set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9629			  tree *initp)
9630{
9631  tree init;
9632  tree type;
9633  tree var;
9634
9635  /* Create the temporary variable.  */
9636  type = TREE_TYPE (expr);
9637  var = make_temporary_var_for_ref_to_temp (decl, type);
9638  layout_decl (var, 0);
9639  /* If the rvalue is the result of a function call it will be
9640     a TARGET_EXPR.  If it is some other construct (such as a
9641     member access expression where the underlying object is
9642     itself the result of a function call), turn it into a
9643     TARGET_EXPR here.  It is important that EXPR be a
9644     TARGET_EXPR below since otherwise the INIT_EXPR will
9645     attempt to make a bitwise copy of EXPR to initialize
9646     VAR.  */
9647  if (TREE_CODE (expr) != TARGET_EXPR)
9648    expr = get_target_expr (expr);
9649
9650  if (TREE_CODE (decl) == FIELD_DECL
9651      && extra_warnings && !TREE_NO_WARNING (decl))
9652    {
9653      warning (OPT_Wextra, "a temporary bound to %qD only persists "
9654	       "until the constructor exits", decl);
9655      TREE_NO_WARNING (decl) = true;
9656    }
9657
9658  /* Recursively extend temps in this initializer.  */
9659  TARGET_EXPR_INITIAL (expr)
9660    = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9661
9662  /* Any reference temp has a non-trivial initializer.  */
9663  DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9664
9665  /* If the initializer is constant, put it in DECL_INITIAL so we get
9666     static initialization and use in constant expressions.  */
9667  init = maybe_constant_init (expr);
9668  if (TREE_CONSTANT (init))
9669    {
9670      if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9671	{
9672	  /* 5.19 says that a constant expression can include an
9673	     lvalue-rvalue conversion applied to "a glvalue of literal type
9674	     that refers to a non-volatile temporary object initialized
9675	     with a constant expression".  Rather than try to communicate
9676	     that this VAR_DECL is a temporary, just mark it constexpr.
9677
9678	     Currently this is only useful for initializer_list temporaries,
9679	     since reference vars can't appear in constant expressions.  */
9680	  DECL_DECLARED_CONSTEXPR_P (var) = true;
9681	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9682	  TREE_CONSTANT (var) = true;
9683	}
9684      DECL_INITIAL (var) = init;
9685      init = NULL_TREE;
9686    }
9687  else
9688    /* Create the INIT_EXPR that will initialize the temporary
9689       variable.  */
9690    init = split_nonconstant_init (var, expr);
9691  if (at_function_scope_p ())
9692    {
9693      add_decl_expr (var);
9694
9695      if (TREE_STATIC (var))
9696	init = add_stmt_to_compound (init, register_dtor_fn (var));
9697      else
9698	{
9699	  tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9700	  if (cleanup)
9701	    vec_safe_push (*cleanups, cleanup);
9702	}
9703
9704      /* We must be careful to destroy the temporary only
9705	 after its initialization has taken place.  If the
9706	 initialization throws an exception, then the
9707	 destructor should not be run.  We cannot simply
9708	 transform INIT into something like:
9709
9710	 (INIT, ({ CLEANUP_STMT; }))
9711
9712	 because emit_local_var always treats the
9713	 initializer as a full-expression.  Thus, the
9714	 destructor would run too early; it would run at the
9715	 end of initializing the reference variable, rather
9716	 than at the end of the block enclosing the
9717	 reference variable.
9718
9719	 The solution is to pass back a cleanup expression
9720	 which the caller is responsible for attaching to
9721	 the statement tree.  */
9722    }
9723  else
9724    {
9725      rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9726      if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9727	{
9728	  if (DECL_THREAD_LOCAL_P (var))
9729	    tls_aggregates = tree_cons (NULL_TREE, var,
9730					tls_aggregates);
9731	  else
9732	    static_aggregates = tree_cons (NULL_TREE, var,
9733					   static_aggregates);
9734	}
9735      else
9736	/* Check whether the dtor is callable.  */
9737	cxx_maybe_build_cleanup (var, tf_warning_or_error);
9738    }
9739  /* Avoid -Wunused-variable warning (c++/38958).  */
9740  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
9741      && TREE_CODE (decl) == VAR_DECL)
9742    TREE_USED (decl) = DECL_READ_P (decl) = true;
9743
9744  *initp = init;
9745  return var;
9746}
9747
9748/* Convert EXPR to the indicated reference TYPE, in a way suitable for
9749   initializing a variable of that TYPE.  */
9750
9751tree
9752initialize_reference (tree type, tree expr,
9753		      int flags, tsubst_flags_t complain)
9754{
9755  conversion *conv;
9756  void *p;
9757  location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9758
9759  if (type == error_mark_node || error_operand_p (expr))
9760    return error_mark_node;
9761
9762  /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9763  p = conversion_obstack_alloc (0);
9764
9765  conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9766			    flags, complain);
9767  if (!conv || conv->bad_p)
9768    {
9769      if (complain & tf_error)
9770	{
9771	  if (conv)
9772	    convert_like (conv, expr, complain);
9773	  else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9774		   && !TYPE_REF_IS_RVALUE (type)
9775		   && !real_lvalue_p (expr))
9776	    error_at (loc, "invalid initialization of non-const reference of "
9777		      "type %qT from an rvalue of type %qT",
9778		      type, TREE_TYPE (expr));
9779	  else
9780	    error_at (loc, "invalid initialization of reference of type "
9781		      "%qT from expression of type %qT", type,
9782		      TREE_TYPE (expr));
9783	}
9784      return error_mark_node;
9785    }
9786
9787  if (conv->kind == ck_ref_bind)
9788    /* Perform the conversion.  */
9789    expr = convert_like (conv, expr, complain);
9790  else if (conv->kind == ck_ambig)
9791    /* We gave an error in build_user_type_conversion_1.  */
9792    expr = error_mark_node;
9793  else
9794    gcc_unreachable ();
9795
9796  /* Free all the conversions we allocated.  */
9797  obstack_free (&conversion_obstack, p);
9798
9799  return expr;
9800}
9801
9802/* Subroutine of extend_ref_init_temps.  Possibly extend one initializer,
9803   which is bound either to a reference or a std::initializer_list.  */
9804
9805static tree
9806extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9807{
9808  tree sub = init;
9809  tree *p;
9810  STRIP_NOPS (sub);
9811  if (TREE_CODE (sub) == COMPOUND_EXPR)
9812    {
9813      TREE_OPERAND (sub, 1)
9814        = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9815      return init;
9816    }
9817  if (TREE_CODE (sub) != ADDR_EXPR)
9818    return init;
9819  /* Deal with binding to a subobject.  */
9820  for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9821    p = &TREE_OPERAND (*p, 0);
9822  if (TREE_CODE (*p) == TARGET_EXPR)
9823    {
9824      tree subinit = NULL_TREE;
9825      *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9826      recompute_tree_invariant_for_addr_expr (sub);
9827      if (init != sub)
9828	init = fold_convert (TREE_TYPE (init), sub);
9829      if (subinit)
9830	init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9831    }
9832  return init;
9833}
9834
9835/* INIT is part of the initializer for DECL.  If there are any
9836   reference or initializer lists being initialized, extend their
9837   lifetime to match that of DECL.  */
9838
9839tree
9840extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9841{
9842  tree type = TREE_TYPE (init);
9843  if (processing_template_decl)
9844    return init;
9845  if (TREE_CODE (type) == REFERENCE_TYPE)
9846    init = extend_ref_init_temps_1 (decl, init, cleanups);
9847  else if (is_std_init_list (type))
9848    {
9849      /* The temporary array underlying a std::initializer_list
9850	 is handled like a reference temporary.  */
9851      tree ctor = init;
9852      if (TREE_CODE (ctor) == TARGET_EXPR)
9853	ctor = TARGET_EXPR_INITIAL (ctor);
9854      if (TREE_CODE (ctor) == CONSTRUCTOR)
9855	{
9856	  tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9857	  array = extend_ref_init_temps_1 (decl, array, cleanups);
9858	  CONSTRUCTOR_ELT (ctor, 0)->value = array;
9859	}
9860    }
9861  else if (TREE_CODE (init) == CONSTRUCTOR)
9862    {
9863      unsigned i;
9864      constructor_elt *p;
9865      vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9866      FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9867	p->value = extend_ref_init_temps (decl, p->value, cleanups);
9868    }
9869
9870  return init;
9871}
9872
9873/* Returns true iff an initializer for TYPE could contain temporaries that
9874   need to be extended because they are bound to references or
9875   std::initializer_list.  */
9876
9877bool
9878type_has_extended_temps (tree type)
9879{
9880  type = strip_array_types (type);
9881  if (TREE_CODE (type) == REFERENCE_TYPE)
9882    return true;
9883  if (CLASS_TYPE_P (type))
9884    {
9885      if (is_std_init_list (type))
9886	return true;
9887      for (tree f = next_initializable_field (TYPE_FIELDS (type));
9888	   f; f = next_initializable_field (DECL_CHAIN (f)))
9889	if (type_has_extended_temps (TREE_TYPE (f)))
9890	  return true;
9891    }
9892  return false;
9893}
9894
9895/* Returns true iff TYPE is some variant of std::initializer_list.  */
9896
9897bool
9898is_std_init_list (tree type)
9899{
9900  /* Look through typedefs.  */
9901  if (!TYPE_P (type))
9902    return false;
9903  if (cxx_dialect == cxx98)
9904    return false;
9905  type = TYPE_MAIN_VARIANT (type);
9906  return (CLASS_TYPE_P (type)
9907	  && CP_TYPE_CONTEXT (type) == std_node
9908	  && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9909}
9910
9911/* Returns true iff DECL is a list constructor: i.e. a constructor which
9912   will accept an argument list of a single std::initializer_list<T>.  */
9913
9914bool
9915is_list_ctor (tree decl)
9916{
9917  tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9918  tree arg;
9919
9920  if (!args || args == void_list_node)
9921    return false;
9922
9923  arg = non_reference (TREE_VALUE (args));
9924  if (!is_std_init_list (arg))
9925    return false;
9926
9927  args = TREE_CHAIN (args);
9928
9929  if (args && args != void_list_node && !TREE_PURPOSE (args))
9930    /* There are more non-defaulted parms.  */
9931    return false;
9932
9933  return true;
9934}
9935
9936#include "gt-cp-call.h"
9937