xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cp/call.c (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1 /* Functions related to invoking methods and overloaded functions.
2    Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5    Contributed by Michael Tiemann (tiemann@cygnus.com) and
6    modified by Brendan Kehoe (brendan@cygnus.com).
7 
8 This file is part of GCC.
9 
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14 
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19 
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23 
24 
25 /* High-level class interface.  */
26 
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "output.h"
34 #include "flags.h"
35 #include "rtl.h"
36 #include "toplev.h"
37 #include "expr.h"
38 #include "diagnostic.h"
39 #include "intl.h"
40 #include "target.h"
41 #include "convert.h"
42 #include "langhooks.h"
43 
44 /* The various kinds of conversion.  */
45 
46 typedef enum conversion_kind {
47   ck_identity,
48   ck_lvalue,
49   ck_qual,
50   ck_std,
51   ck_ptr,
52   ck_pmem,
53   ck_base,
54   ck_ref_bind,
55   ck_user,
56   ck_ambig,
57   ck_list,
58   ck_aggr,
59   ck_rvalue
60 } conversion_kind;
61 
62 /* The rank of the conversion.  Order of the enumerals matters; better
63    conversions should come earlier in the list.  */
64 
65 typedef enum conversion_rank {
66   cr_identity,
67   cr_exact,
68   cr_promotion,
69   cr_std,
70   cr_pbool,
71   cr_user,
72   cr_ellipsis,
73   cr_bad
74 } conversion_rank;
75 
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77    The first conversion to be performed is at the end of the chain.
78    That conversion is always a cr_identity conversion.  */
79 
80 typedef struct conversion conversion;
81 struct conversion {
82   /* The kind of conversion represented by this step.  */
83   conversion_kind kind;
84   /* The rank of this conversion.  */
85   conversion_rank rank;
86   BOOL_BITFIELD user_conv_p : 1;
87   BOOL_BITFIELD ellipsis_p : 1;
88   BOOL_BITFIELD this_p : 1;
89   BOOL_BITFIELD bad_p : 1;
90   /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
91      temporary should be created to hold the result of the
92      conversion.  */
93   BOOL_BITFIELD need_temporary_p : 1;
94   /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
95      from a pointer-to-derived to pointer-to-base is being performed.  */
96   BOOL_BITFIELD base_p : 1;
97   /* If KIND is ck_ref_bind, true when either an lvalue reference is
98      being bound to an lvalue expression or an rvalue reference is
99      being bound to an rvalue expression. */
100   BOOL_BITFIELD rvaluedness_matches_p: 1;
101   BOOL_BITFIELD check_narrowing: 1;
102   /* The type of the expression resulting from the conversion.  */
103   tree type;
104   union {
105     /* The next conversion in the chain.  Since the conversions are
106        arranged from outermost to innermost, the NEXT conversion will
107        actually be performed before this conversion.  This variant is
108        used only when KIND is neither ck_identity nor ck_ambig.  */
109     conversion *next;
110     /* The expression at the beginning of the conversion chain.  This
111        variant is used only if KIND is ck_identity or ck_ambig.  */
112     tree expr;
113     /* The array of conversions for an initializer_list.  */
114     conversion **list;
115   } u;
116   /* The function candidate corresponding to this conversion
117      sequence.  This field is only used if KIND is ck_user.  */
118   struct z_candidate *cand;
119 };
120 
121 #define CONVERSION_RANK(NODE)			\
122   ((NODE)->bad_p ? cr_bad			\
123    : (NODE)->ellipsis_p ? cr_ellipsis		\
124    : (NODE)->user_conv_p ? cr_user		\
125    : (NODE)->rank)
126 
127 static struct obstack conversion_obstack;
128 static bool conversion_obstack_initialized;
129 
130 static struct z_candidate * tourney (struct z_candidate *);
131 static int equal_functions (tree, tree);
132 static int joust (struct z_candidate *, struct z_candidate *, bool);
133 static int compare_ics (conversion *, conversion *);
134 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
135 static tree build_java_interface_fn_ref (tree, tree);
136 #define convert_like(CONV, EXPR, COMPLAIN)			\
137   convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0,		\
138 		     /*issue_conversion_warnings=*/true,	\
139 		     /*c_cast_p=*/false, (COMPLAIN))
140 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN )	\
141   convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0,			\
142 		     /*issue_conversion_warnings=*/true,		\
143 		     /*c_cast_p=*/false, (COMPLAIN))
144 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
145 			       bool, tsubst_flags_t);
146 static void op_error (enum tree_code, enum tree_code, tree, tree,
147 		      tree, bool);
148 static VEC(tree,gc) *resolve_args (VEC(tree,gc) *);
149 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
150 static void print_z_candidate (const char *, struct z_candidate *);
151 static void print_z_candidates (struct z_candidate *);
152 static tree build_this (tree);
153 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
154 static bool any_strictly_viable (struct z_candidate *);
155 static struct z_candidate *add_template_candidate
156 	(struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
157 	 tree, tree, tree, int, unification_kind_t);
158 static struct z_candidate *add_template_candidate_real
159 	(struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
160 	 tree, tree, tree, int, tree, unification_kind_t);
161 static struct z_candidate *add_template_conv_candidate
162 	(struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
163 	 tree, tree);
164 static void add_builtin_candidates
165 	(struct z_candidate **, enum tree_code, enum tree_code,
166 	 tree, tree *, int);
167 static void add_builtin_candidate
168 	(struct z_candidate **, enum tree_code, enum tree_code,
169 	 tree, tree, tree, tree *, tree *, int);
170 static bool is_complete (tree);
171 static void build_builtin_candidate
172 	(struct z_candidate **, tree, tree, tree, tree *, tree *,
173 	 int);
174 static struct z_candidate *add_conv_candidate
175 	(struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
176 	 tree);
177 static struct z_candidate *add_function_candidate
178 	(struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
179 	 tree, int);
180 static conversion *implicit_conversion (tree, tree, tree, bool, int);
181 static conversion *standard_conversion (tree, tree, tree, bool, int);
182 static conversion *reference_binding (tree, tree, tree, bool, int);
183 static conversion *build_conv (conversion_kind, tree, conversion *);
184 static conversion *build_list_conv (tree, tree, int);
185 static bool is_subseq (conversion *, conversion *);
186 static conversion *maybe_handle_ref_bind (conversion **);
187 static void maybe_handle_implicit_object (conversion **);
188 static struct z_candidate *add_candidate
189 	(struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
190 	 conversion **, tree, tree, int);
191 static tree source_type (conversion *);
192 static void add_warning (struct z_candidate *, struct z_candidate *);
193 static bool reference_compatible_p (tree, tree);
194 static conversion *convert_class_to_reference (tree, tree, tree, int);
195 static conversion *direct_reference_binding (tree, conversion *);
196 static bool promoted_arithmetic_type_p (tree);
197 static conversion *conditional_conversion (tree, tree);
198 static char *name_as_c_string (tree, tree, bool *);
199 static tree prep_operand (tree);
200 static void add_candidates (tree, const VEC(tree,gc) *, tree, bool, tree, tree,
201 			    int, struct z_candidate **);
202 static conversion *merge_conversion_sequences (conversion *, conversion *);
203 static bool magic_varargs_p (tree);
204 static tree build_temp (tree, tree, int, diagnostic_t *);
205 
206 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
207    NAME can take many forms...  */
208 
209 bool
210 check_dtor_name (tree basetype, tree name)
211 {
212   /* Just accept something we've already complained about.  */
213   if (name == error_mark_node)
214     return true;
215 
216   if (TREE_CODE (name) == TYPE_DECL)
217     name = TREE_TYPE (name);
218   else if (TYPE_P (name))
219     /* OK */;
220   else if (TREE_CODE (name) == IDENTIFIER_NODE)
221     {
222       if ((MAYBE_CLASS_TYPE_P (basetype)
223 	   && name == constructor_name (basetype))
224 	  || (TREE_CODE (basetype) == ENUMERAL_TYPE
225 	      && name == TYPE_IDENTIFIER (basetype)))
226 	return true;
227       else
228 	name = get_type_value (name);
229     }
230   else
231     {
232       /* In the case of:
233 
234 	 template <class T> struct S { ~S(); };
235 	 int i;
236 	 i.~S();
237 
238 	 NAME will be a class template.  */
239       gcc_assert (DECL_CLASS_TEMPLATE_P (name));
240       return false;
241     }
242 
243   if (!name || name == error_mark_node)
244     return false;
245   return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
246 }
247 
248 /* We want the address of a function or method.  We avoid creating a
249    pointer-to-member function.  */
250 
251 tree
252 build_addr_func (tree function)
253 {
254   tree type = TREE_TYPE (function);
255 
256   /* We have to do these by hand to avoid real pointer to member
257      functions.  */
258   if (TREE_CODE (type) == METHOD_TYPE)
259     {
260       if (TREE_CODE (function) == OFFSET_REF)
261 	{
262 	  tree object = build_address (TREE_OPERAND (function, 0));
263 	  return get_member_function_from_ptrfunc (&object,
264 						   TREE_OPERAND (function, 1));
265 	}
266       function = build_address (function);
267     }
268   else
269     function = decay_conversion (function);
270 
271   return function;
272 }
273 
274 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
275    POINTER_TYPE to those.  Note, pointer to member function types
276    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  There are
277    two variants.  build_call_a is the primitive taking an array of
278    arguments, while build_call_n is a wrapper that handles varargs.  */
279 
280 tree
281 build_call_n (tree function, int n, ...)
282 {
283   if (n == 0)
284     return build_call_a (function, 0, NULL);
285   else
286     {
287       tree *argarray = (tree *) alloca (n * sizeof (tree));
288       va_list ap;
289       int i;
290 
291       va_start (ap, n);
292       for (i = 0; i < n; i++)
293 	argarray[i] = va_arg (ap, tree);
294       va_end (ap);
295       return build_call_a (function, n, argarray);
296     }
297 }
298 
299 tree
300 build_call_a (tree function, int n, tree *argarray)
301 {
302   int is_constructor = 0;
303   int nothrow;
304   tree decl;
305   tree result_type;
306   tree fntype;
307   int i;
308 
309   function = build_addr_func (function);
310 
311   gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
312   fntype = TREE_TYPE (TREE_TYPE (function));
313   gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
314 	      || TREE_CODE (fntype) == METHOD_TYPE);
315   result_type = TREE_TYPE (fntype);
316   /* An rvalue has no cv-qualifiers.  */
317   if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
318     result_type = cv_unqualified (result_type);
319 
320   if (TREE_CODE (function) == ADDR_EXPR
321       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
322     {
323       decl = TREE_OPERAND (function, 0);
324       if (!TREE_USED (decl))
325 	{
326 	  /* We invoke build_call directly for several library
327 	     functions.  These may have been declared normally if
328 	     we're building libgcc, so we can't just check
329 	     DECL_ARTIFICIAL.  */
330 	  gcc_assert (DECL_ARTIFICIAL (decl)
331 		      || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
332 				   "__", 2));
333 	  mark_used (decl);
334 	}
335     }
336   else
337     decl = NULL_TREE;
338 
339   /* We check both the decl and the type; a function may be known not to
340      throw without being declared throw().  */
341   nothrow = ((decl && TREE_NOTHROW (decl))
342 	     || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
343 
344   if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
345     current_function_returns_abnormally = 1;
346 
347   if (decl && TREE_DEPRECATED (decl))
348     warn_deprecated_use (decl, NULL_TREE);
349   require_complete_eh_spec_types (fntype, decl);
350 
351   if (decl && DECL_CONSTRUCTOR_P (decl))
352     is_constructor = 1;
353 
354   /* Don't pass empty class objects by value.  This is useful
355      for tags in STL, which are used to control overload resolution.
356      We don't need to handle other cases of copying empty classes.  */
357   if (! decl || ! DECL_BUILT_IN (decl))
358     for (i = 0; i < n; i++)
359       if (is_empty_class (TREE_TYPE (argarray[i]))
360 	  && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
361 	{
362 	  tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
363 	  argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
364 				argarray[i], t);
365 	}
366 
367   function = build_call_array_loc (input_location,
368 				   result_type, function, n, argarray);
369   TREE_HAS_CONSTRUCTOR (function) = is_constructor;
370   TREE_NOTHROW (function) = nothrow;
371 
372   return function;
373 }
374 
375 /* Build something of the form ptr->method (args)
376    or object.method (args).  This can also build
377    calls to constructors, and find friends.
378 
379    Member functions always take their class variable
380    as a pointer.
381 
382    INSTANCE is a class instance.
383 
384    NAME is the name of the method desired, usually an IDENTIFIER_NODE.
385 
386    PARMS help to figure out what that NAME really refers to.
387 
388    BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
389    down to the real instance type to use for access checking.  We need this
390    information to get protected accesses correct.
391 
392    FLAGS is the logical disjunction of zero or more LOOKUP_
393    flags.  See cp-tree.h for more info.
394 
395    If this is all OK, calls build_function_call with the resolved
396    member function.
397 
398    This function must also handle being called to perform
399    initialization, promotion/coercion of arguments, and
400    instantiation of default parameters.
401 
402    Note that NAME may refer to an instance variable name.  If
403    `operator()()' is defined for the type of that field, then we return
404    that result.  */
405 
406 /* New overloading code.  */
407 
408 typedef struct z_candidate z_candidate;
409 
410 typedef struct candidate_warning candidate_warning;
411 struct candidate_warning {
412   z_candidate *loser;
413   candidate_warning *next;
414 };
415 
416 struct z_candidate {
417   /* The FUNCTION_DECL that will be called if this candidate is
418      selected by overload resolution.  */
419   tree fn;
420   /* If not NULL_TREE, the first argument to use when calling this
421      function.  */
422   tree first_arg;
423   /* The rest of the arguments to use when calling this function.  If
424      there are no further arguments this may be NULL or it may be an
425      empty vector.  */
426   const VEC(tree,gc) *args;
427   /* The implicit conversion sequences for each of the arguments to
428      FN.  */
429   conversion **convs;
430   /* The number of implicit conversion sequences.  */
431   size_t num_convs;
432   /* If FN is a user-defined conversion, the standard conversion
433      sequence from the type returned by FN to the desired destination
434      type.  */
435   conversion *second_conv;
436   int viable;
437   /* If FN is a member function, the binfo indicating the path used to
438      qualify the name of FN at the call site.  This path is used to
439      determine whether or not FN is accessible if it is selected by
440      overload resolution.  The DECL_CONTEXT of FN will always be a
441      (possibly improper) base of this binfo.  */
442   tree access_path;
443   /* If FN is a non-static member function, the binfo indicating the
444      subobject to which the `this' pointer should be converted if FN
445      is selected by overload resolution.  The type pointed to the by
446      the `this' pointer must correspond to the most derived class
447      indicated by the CONVERSION_PATH.  */
448   tree conversion_path;
449   tree template_decl;
450   tree explicit_targs;
451   candidate_warning *warnings;
452   z_candidate *next;
453 };
454 
455 /* Returns true iff T is a null pointer constant in the sense of
456    [conv.ptr].  */
457 
458 bool
459 null_ptr_cst_p (tree t)
460 {
461   /* [conv.ptr]
462 
463      A null pointer constant is an integral constant expression
464      (_expr.const_) rvalue of integer type that evaluates to zero.  */
465   t = integral_constant_value (t);
466   if (t == null_node)
467     return true;
468   if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t))
469     {
470       STRIP_NOPS (t);
471       if (!TREE_OVERFLOW (t))
472 	return true;
473     }
474   return false;
475 }
476 
477 /* Returns nonzero if PARMLIST consists of only default parms and/or
478    ellipsis.  */
479 
480 bool
481 sufficient_parms_p (const_tree parmlist)
482 {
483   for (; parmlist && parmlist != void_list_node;
484        parmlist = TREE_CHAIN (parmlist))
485     if (!TREE_PURPOSE (parmlist))
486       return false;
487   return true;
488 }
489 
490 /* Allocate N bytes of memory from the conversion obstack.  The memory
491    is zeroed before being returned.  */
492 
493 static void *
494 conversion_obstack_alloc (size_t n)
495 {
496   void *p;
497   if (!conversion_obstack_initialized)
498     {
499       gcc_obstack_init (&conversion_obstack);
500       conversion_obstack_initialized = true;
501     }
502   p = obstack_alloc (&conversion_obstack, n);
503   memset (p, 0, n);
504   return p;
505 }
506 
507 /* Dynamically allocate a conversion.  */
508 
509 static conversion *
510 alloc_conversion (conversion_kind kind)
511 {
512   conversion *c;
513   c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
514   c->kind = kind;
515   return c;
516 }
517 
518 #ifdef ENABLE_CHECKING
519 
520 /* Make sure that all memory on the conversion obstack has been
521    freed.  */
522 
523 void
524 validate_conversion_obstack (void)
525 {
526   if (conversion_obstack_initialized)
527     gcc_assert ((obstack_next_free (&conversion_obstack)
528 		 == obstack_base (&conversion_obstack)));
529 }
530 
531 #endif /* ENABLE_CHECKING */
532 
533 /* Dynamically allocate an array of N conversions.  */
534 
535 static conversion **
536 alloc_conversions (size_t n)
537 {
538   return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
539 }
540 
541 static conversion *
542 build_conv (conversion_kind code, tree type, conversion *from)
543 {
544   conversion *t;
545   conversion_rank rank = CONVERSION_RANK (from);
546 
547   /* Note that the caller is responsible for filling in t->cand for
548      user-defined conversions.  */
549   t = alloc_conversion (code);
550   t->type = type;
551   t->u.next = from;
552 
553   switch (code)
554     {
555     case ck_ptr:
556     case ck_pmem:
557     case ck_base:
558     case ck_std:
559       if (rank < cr_std)
560 	rank = cr_std;
561       break;
562 
563     case ck_qual:
564       if (rank < cr_exact)
565 	rank = cr_exact;
566       break;
567 
568     default:
569       break;
570     }
571   t->rank = rank;
572   t->user_conv_p = (code == ck_user || from->user_conv_p);
573   t->bad_p = from->bad_p;
574   t->base_p = false;
575   return t;
576 }
577 
578 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
579    specialization of std::initializer_list<T>, if such a conversion is
580    possible.  */
581 
582 static conversion *
583 build_list_conv (tree type, tree ctor, int flags)
584 {
585   tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
586   unsigned len = CONSTRUCTOR_NELTS (ctor);
587   conversion **subconvs = alloc_conversions (len);
588   conversion *t;
589   unsigned i;
590   tree val;
591 
592   /* Within a list-initialization we can have more user-defined
593      conversions.  */
594   flags &= ~LOOKUP_NO_CONVERSION;
595   /* But no narrowing conversions.  */
596   flags |= LOOKUP_NO_NARROWING;
597 
598   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
599     {
600       conversion *sub
601 	= implicit_conversion (elttype, TREE_TYPE (val), val,
602 			       false, flags);
603       if (sub == NULL)
604 	return NULL;
605 
606       subconvs[i] = sub;
607     }
608 
609   t = alloc_conversion (ck_list);
610   t->type = type;
611   t->u.list = subconvs;
612   t->rank = cr_exact;
613 
614   for (i = 0; i < len; ++i)
615     {
616       conversion *sub = subconvs[i];
617       if (sub->rank > t->rank)
618 	t->rank = sub->rank;
619       if (sub->user_conv_p)
620 	t->user_conv_p = true;
621       if (sub->bad_p)
622 	t->bad_p = true;
623     }
624 
625   return t;
626 }
627 
628 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
629    aggregate class, if such a conversion is possible.  */
630 
631 static conversion *
632 build_aggr_conv (tree type, tree ctor, int flags)
633 {
634   unsigned HOST_WIDE_INT i = 0;
635   conversion *c;
636   tree field = next_initializable_field (TYPE_FIELDS (type));
637 
638   for (; field; field = next_initializable_field (TREE_CHAIN (field)))
639     {
640       if (i < CONSTRUCTOR_NELTS (ctor))
641 	{
642 	  constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
643 	  if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
644 				ce->value, flags))
645 	    return NULL;
646 	  ++i;
647 	  if (TREE_CODE (type) == UNION_TYPE)
648 	    break;
649 	}
650       else if (build_value_init (TREE_TYPE (field)) == error_mark_node)
651 	return NULL;
652     }
653 
654   if (i < CONSTRUCTOR_NELTS (ctor))
655     return NULL;
656 
657   c = alloc_conversion (ck_aggr);
658   c->type = type;
659   c->rank = cr_exact;
660   c->user_conv_p = true;
661   c->u.next = NULL;
662   return c;
663 }
664 
665 /* Build a representation of the identity conversion from EXPR to
666    itself.  The TYPE should match the type of EXPR, if EXPR is non-NULL.  */
667 
668 static conversion *
669 build_identity_conv (tree type, tree expr)
670 {
671   conversion *c;
672 
673   c = alloc_conversion (ck_identity);
674   c->type = type;
675   c->u.expr = expr;
676 
677   return c;
678 }
679 
680 /* Converting from EXPR to TYPE was ambiguous in the sense that there
681    were multiple user-defined conversions to accomplish the job.
682    Build a conversion that indicates that ambiguity.  */
683 
684 static conversion *
685 build_ambiguous_conv (tree type, tree expr)
686 {
687   conversion *c;
688 
689   c = alloc_conversion (ck_ambig);
690   c->type = type;
691   c->u.expr = expr;
692 
693   return c;
694 }
695 
696 tree
697 strip_top_quals (tree t)
698 {
699   if (TREE_CODE (t) == ARRAY_TYPE)
700     return t;
701   return cp_build_qualified_type (t, 0);
702 }
703 
704 /* Returns the standard conversion path (see [conv]) from type FROM to type
705    TO, if any.  For proper handling of null pointer constants, you must
706    also pass the expression EXPR to convert from.  If C_CAST_P is true,
707    this conversion is coming from a C-style cast.  */
708 
709 static conversion *
710 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
711 		     int flags)
712 {
713   enum tree_code fcode, tcode;
714   conversion *conv;
715   bool fromref = false;
716 
717   to = non_reference (to);
718   if (TREE_CODE (from) == REFERENCE_TYPE)
719     {
720       fromref = true;
721       from = TREE_TYPE (from);
722     }
723   to = strip_top_quals (to);
724   from = strip_top_quals (from);
725 
726   if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
727       && expr && type_unknown_p (expr))
728     {
729       tsubst_flags_t tflags = tf_conv;
730       if (!(flags & LOOKUP_PROTECT))
731 	tflags |= tf_no_access_control;
732       expr = instantiate_type (to, expr, tflags);
733       if (expr == error_mark_node)
734 	return NULL;
735       from = TREE_TYPE (expr);
736     }
737 
738   fcode = TREE_CODE (from);
739   tcode = TREE_CODE (to);
740 
741   conv = build_identity_conv (from, expr);
742   if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
743     {
744       from = type_decays_to (from);
745       fcode = TREE_CODE (from);
746       conv = build_conv (ck_lvalue, from, conv);
747     }
748   else if (fromref || (expr && lvalue_p (expr)))
749     {
750       if (expr)
751 	{
752 	  tree bitfield_type;
753 	  bitfield_type = is_bitfield_expr_with_lowered_type (expr);
754 	  if (bitfield_type)
755 	    {
756 	      from = strip_top_quals (bitfield_type);
757 	      fcode = TREE_CODE (from);
758 	    }
759 	}
760       conv = build_conv (ck_rvalue, from, conv);
761     }
762 
763    /* Allow conversion between `__complex__' data types.  */
764   if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
765     {
766       /* The standard conversion sequence to convert FROM to TO is
767 	 the standard conversion sequence to perform componentwise
768 	 conversion.  */
769       conversion *part_conv = standard_conversion
770 	(TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
771 
772       if (part_conv)
773 	{
774 	  conv = build_conv (part_conv->kind, to, conv);
775 	  conv->rank = part_conv->rank;
776 	}
777       else
778 	conv = NULL;
779 
780       return conv;
781     }
782 
783   if (same_type_p (from, to))
784     return conv;
785 
786   if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
787       && expr && null_ptr_cst_p (expr))
788     conv = build_conv (ck_std, to, conv);
789   else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
790 	   || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
791     {
792       /* For backwards brain damage compatibility, allow interconversion of
793 	 pointers and integers with a pedwarn.  */
794       conv = build_conv (ck_std, to, conv);
795       conv->bad_p = true;
796     }
797   else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
798     {
799       /* For backwards brain damage compatibility, allow interconversion of
800 	 enums and integers with a pedwarn.  */
801       conv = build_conv (ck_std, to, conv);
802       conv->bad_p = true;
803     }
804   else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
805 	   || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
806     {
807       tree to_pointee;
808       tree from_pointee;
809 
810       if (tcode == POINTER_TYPE
811 	  && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
812 							TREE_TYPE (to)))
813 	;
814       else if (VOID_TYPE_P (TREE_TYPE (to))
815 	       && !TYPE_PTRMEM_P (from)
816 	       && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
817 	{
818 	  from = build_pointer_type
819 	    (cp_build_qualified_type (void_type_node,
820 				      cp_type_quals (TREE_TYPE (from))));
821 	  conv = build_conv (ck_ptr, from, conv);
822 	}
823       else if (TYPE_PTRMEM_P (from))
824 	{
825 	  tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
826 	  tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
827 
828 	  if (DERIVED_FROM_P (fbase, tbase)
829 	      && (same_type_ignoring_top_level_qualifiers_p
830 		  (TYPE_PTRMEM_POINTED_TO_TYPE (from),
831 		   TYPE_PTRMEM_POINTED_TO_TYPE (to))))
832 	    {
833 	      from = build_ptrmem_type (tbase,
834 					TYPE_PTRMEM_POINTED_TO_TYPE (from));
835 	      conv = build_conv (ck_pmem, from, conv);
836 	    }
837 	  else if (!same_type_p (fbase, tbase))
838 	    return NULL;
839 	}
840       else if (CLASS_TYPE_P (TREE_TYPE (from))
841 	       && CLASS_TYPE_P (TREE_TYPE (to))
842 	       /* [conv.ptr]
843 
844 		  An rvalue of type "pointer to cv D," where D is a
845 		  class type, can be converted to an rvalue of type
846 		  "pointer to cv B," where B is a base class (clause
847 		  _class.derived_) of D.  If B is an inaccessible
848 		  (clause _class.access_) or ambiguous
849 		  (_class.member.lookup_) base class of D, a program
850 		  that necessitates this conversion is ill-formed.
851 		  Therefore, we use DERIVED_FROM_P, and do not check
852 		  access or uniqueness.  */
853 	       && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
854 	{
855 	  from =
856 	    cp_build_qualified_type (TREE_TYPE (to),
857 				     cp_type_quals (TREE_TYPE (from)));
858 	  from = build_pointer_type (from);
859 	  conv = build_conv (ck_ptr, from, conv);
860 	  conv->base_p = true;
861 	}
862 
863       if (tcode == POINTER_TYPE)
864 	{
865 	  to_pointee = TREE_TYPE (to);
866 	  from_pointee = TREE_TYPE (from);
867 	}
868       else
869 	{
870 	  to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
871 	  from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
872 	}
873 
874       if (same_type_p (from, to))
875 	/* OK */;
876       else if (c_cast_p && comp_ptr_ttypes_const (to, from))
877 	/* In a C-style cast, we ignore CV-qualification because we
878 	   are allowed to perform a static_cast followed by a
879 	   const_cast.  */
880 	conv = build_conv (ck_qual, to, conv);
881       else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
882 	conv = build_conv (ck_qual, to, conv);
883       else if (expr && string_conv_p (to, expr, 0))
884 	/* converting from string constant to char *.  */
885 	conv = build_conv (ck_qual, to, conv);
886       else if (ptr_reasonably_similar (to_pointee, from_pointee))
887 	{
888 	  conv = build_conv (ck_ptr, to, conv);
889 	  conv->bad_p = true;
890 	}
891       else
892 	return NULL;
893 
894       from = to;
895     }
896   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
897     {
898       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
899       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
900       tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
901       tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
902 
903       if (!DERIVED_FROM_P (fbase, tbase)
904 	  || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
905 	  || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
906 			 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
907 	  || cp_type_quals (fbase) != cp_type_quals (tbase))
908 	return NULL;
909 
910       from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
911       from = build_ptrmemfunc_type (build_pointer_type (from));
912       conv = build_conv (ck_pmem, from, conv);
913       conv->base_p = true;
914     }
915   else if (tcode == BOOLEAN_TYPE)
916     {
917       /* [conv.bool]
918 
919 	  An rvalue of arithmetic, unscoped enumeration, pointer, or
920 	  pointer to member type can be converted to an rvalue of type
921 	  bool.  */
922       if (ARITHMETIC_TYPE_P (from)
923 	  || UNSCOPED_ENUM_P (from)
924 	  || fcode == POINTER_TYPE
925 	  || TYPE_PTR_TO_MEMBER_P (from))
926 	{
927 	  conv = build_conv (ck_std, to, conv);
928 	  if (fcode == POINTER_TYPE
929 	      || TYPE_PTRMEM_P (from)
930 	      || (TYPE_PTRMEMFUNC_P (from)
931 		  && conv->rank < cr_pbool))
932 	    conv->rank = cr_pbool;
933 	  return conv;
934 	}
935 
936       return NULL;
937     }
938   /* We don't check for ENUMERAL_TYPE here because there are no standard
939      conversions to enum type.  */
940   /* As an extension, allow conversion to complex type.  */
941   else if (ARITHMETIC_TYPE_P (to))
942     {
943       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
944           || SCOPED_ENUM_P (from))
945 	return NULL;
946       conv = build_conv (ck_std, to, conv);
947 
948       /* Give this a better rank if it's a promotion.  */
949       if (same_type_p (to, type_promotes_to (from))
950 	  && conv->u.next->rank <= cr_promotion)
951 	conv->rank = cr_promotion;
952     }
953   else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
954 	   && vector_types_convertible_p (from, to, false))
955     return build_conv (ck_std, to, conv);
956   else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
957 	   && is_properly_derived_from (from, to))
958     {
959       if (conv->kind == ck_rvalue)
960 	conv = conv->u.next;
961       conv = build_conv (ck_base, to, conv);
962       /* The derived-to-base conversion indicates the initialization
963 	 of a parameter with base type from an object of a derived
964 	 type.  A temporary object is created to hold the result of
965 	 the conversion unless we're binding directly to a reference.  */
966       conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
967     }
968   else
969     return NULL;
970 
971   if (flags & LOOKUP_NO_NARROWING)
972     conv->check_narrowing = true;
973 
974   return conv;
975 }
976 
977 /* Returns nonzero if T1 is reference-related to T2.  */
978 
979 bool
980 reference_related_p (tree t1, tree t2)
981 {
982   t1 = TYPE_MAIN_VARIANT (t1);
983   t2 = TYPE_MAIN_VARIANT (t2);
984 
985   /* [dcl.init.ref]
986 
987      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
988      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
989      of T2.  */
990   return (same_type_p (t1, t2)
991 	  || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
992 	      && DERIVED_FROM_P (t1, t2)));
993 }
994 
995 /* Returns nonzero if T1 is reference-compatible with T2.  */
996 
997 static bool
998 reference_compatible_p (tree t1, tree t2)
999 {
1000   /* [dcl.init.ref]
1001 
1002      "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1003      reference-related to T2 and cv1 is the same cv-qualification as,
1004      or greater cv-qualification than, cv2.  */
1005   return (reference_related_p (t1, t2)
1006 	  && at_least_as_qualified_p (t1, t2));
1007 }
1008 
1009 /* Determine whether or not the EXPR (of class type S) can be
1010    converted to T as in [over.match.ref].  */
1011 
1012 static conversion *
1013 convert_class_to_reference (tree reference_type, tree s, tree expr, int flags)
1014 {
1015   tree conversions;
1016   tree first_arg;
1017   conversion *conv;
1018   tree t;
1019   struct z_candidate *candidates;
1020   struct z_candidate *cand;
1021   bool any_viable_p;
1022 
1023   if (!expr)
1024     return NULL;
1025 
1026   conversions = lookup_conversions (s);
1027   if (!conversions)
1028     return NULL;
1029 
1030   /* [over.match.ref]
1031 
1032      Assuming that "cv1 T" is the underlying type of the reference
1033      being initialized, and "cv S" is the type of the initializer
1034      expression, with S a class type, the candidate functions are
1035      selected as follows:
1036 
1037      --The conversion functions of S and its base classes are
1038        considered.  Those that are not hidden within S and yield type
1039        "reference to cv2 T2", where "cv1 T" is reference-compatible
1040        (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1041 
1042      The argument list has one argument, which is the initializer
1043      expression.  */
1044 
1045   candidates = 0;
1046 
1047   /* Conceptually, we should take the address of EXPR and put it in
1048      the argument list.  Unfortunately, however, that can result in
1049      error messages, which we should not issue now because we are just
1050      trying to find a conversion operator.  Therefore, we use NULL,
1051      cast to the appropriate type.  */
1052   first_arg = build_int_cst (build_pointer_type (s), 0);
1053 
1054   t = TREE_TYPE (reference_type);
1055 
1056   for (; conversions; conversions = TREE_CHAIN (conversions))
1057     {
1058       tree fns = TREE_VALUE (conversions);
1059 
1060       for (; fns; fns = OVL_NEXT (fns))
1061 	{
1062 	  tree f = OVL_CURRENT (fns);
1063 	  tree t2 = TREE_TYPE (TREE_TYPE (f));
1064 
1065 	  if (DECL_NONCONVERTING_P (f)
1066 	      && (flags & LOOKUP_ONLYCONVERTING))
1067 	    continue;
1068 
1069 	  cand = NULL;
1070 
1071 	  /* If this is a template function, try to get an exact
1072 	     match.  */
1073 	  if (TREE_CODE (f) == TEMPLATE_DECL)
1074 	    {
1075 	      cand = add_template_candidate (&candidates,
1076 					     f, s,
1077 					     NULL_TREE,
1078 					     first_arg,
1079 					     NULL,
1080 					     reference_type,
1081 					     TYPE_BINFO (s),
1082 					     TREE_PURPOSE (conversions),
1083 					     LOOKUP_NORMAL,
1084 					     DEDUCE_CONV);
1085 
1086 	      if (cand)
1087 		{
1088 		  /* Now, see if the conversion function really returns
1089 		     an lvalue of the appropriate type.  From the
1090 		     point of view of unification, simply returning an
1091 		     rvalue of the right type is good enough.  */
1092 		  f = cand->fn;
1093 		  t2 = TREE_TYPE (TREE_TYPE (f));
1094 		  if (TREE_CODE (t2) != REFERENCE_TYPE
1095 		      || !reference_compatible_p (t, TREE_TYPE (t2)))
1096 		    {
1097 		      candidates = candidates->next;
1098 		      cand = NULL;
1099 		    }
1100 		}
1101 	    }
1102 	  else if (TREE_CODE (t2) == REFERENCE_TYPE
1103 		   && reference_compatible_p (t, TREE_TYPE (t2)))
1104 	    cand = add_function_candidate (&candidates, f, s, first_arg,
1105 					   NULL, TYPE_BINFO (s),
1106 					   TREE_PURPOSE (conversions),
1107 					   LOOKUP_NORMAL);
1108 
1109 	  if (cand)
1110 	    {
1111 	      conversion *identity_conv;
1112 	      /* Build a standard conversion sequence indicating the
1113 		 binding from the reference type returned by the
1114 		 function to the desired REFERENCE_TYPE.  */
1115 	      identity_conv
1116 		= build_identity_conv (TREE_TYPE (TREE_TYPE
1117 						  (TREE_TYPE (cand->fn))),
1118 				       NULL_TREE);
1119 	      cand->second_conv
1120 		= (direct_reference_binding
1121 		   (reference_type, identity_conv));
1122 	      cand->second_conv->rvaluedness_matches_p
1123 		= TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1124 		  == TYPE_REF_IS_RVALUE (reference_type);
1125 	      cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1126 
1127               /* Don't allow binding of lvalues to rvalue references.  */
1128               if (TYPE_REF_IS_RVALUE (reference_type)
1129                   && !TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn))))
1130                 cand->second_conv->bad_p = true;
1131 	    }
1132 	}
1133     }
1134 
1135   candidates = splice_viable (candidates, pedantic, &any_viable_p);
1136   /* If none of the conversion functions worked out, let our caller
1137      know.  */
1138   if (!any_viable_p)
1139     return NULL;
1140 
1141   cand = tourney (candidates);
1142   if (!cand)
1143     return NULL;
1144 
1145   /* Now that we know that this is the function we're going to use fix
1146      the dummy first argument.  */
1147   gcc_assert (cand->first_arg == NULL_TREE
1148 	      || integer_zerop (cand->first_arg));
1149   cand->first_arg = build_this (expr);
1150 
1151   /* Build a user-defined conversion sequence representing the
1152      conversion.  */
1153   conv = build_conv (ck_user,
1154 		     TREE_TYPE (TREE_TYPE (cand->fn)),
1155 		     build_identity_conv (TREE_TYPE (expr), expr));
1156   conv->cand = cand;
1157 
1158   if (cand->viable == -1)
1159     conv->bad_p = true;
1160 
1161   /* Merge it with the standard conversion sequence from the
1162      conversion function's return type to the desired type.  */
1163   cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1164 
1165   return cand->second_conv;
1166 }
1167 
1168 /* A reference of the indicated TYPE is being bound directly to the
1169    expression represented by the implicit conversion sequence CONV.
1170    Return a conversion sequence for this binding.  */
1171 
1172 static conversion *
1173 direct_reference_binding (tree type, conversion *conv)
1174 {
1175   tree t;
1176 
1177   gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1178   gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1179 
1180   t = TREE_TYPE (type);
1181 
1182   /* [over.ics.rank]
1183 
1184      When a parameter of reference type binds directly
1185      (_dcl.init.ref_) to an argument expression, the implicit
1186      conversion sequence is the identity conversion, unless the
1187      argument expression has a type that is a derived class of the
1188      parameter type, in which case the implicit conversion sequence is
1189      a derived-to-base Conversion.
1190 
1191      If the parameter binds directly to the result of applying a
1192      conversion function to the argument expression, the implicit
1193      conversion sequence is a user-defined conversion sequence
1194      (_over.ics.user_), with the second standard conversion sequence
1195      either an identity conversion or, if the conversion function
1196      returns an entity of a type that is a derived class of the
1197      parameter type, a derived-to-base conversion.  */
1198   if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1199     {
1200       /* Represent the derived-to-base conversion.  */
1201       conv = build_conv (ck_base, t, conv);
1202       /* We will actually be binding to the base-class subobject in
1203 	 the derived class, so we mark this conversion appropriately.
1204 	 That way, convert_like knows not to generate a temporary.  */
1205       conv->need_temporary_p = false;
1206     }
1207   return build_conv (ck_ref_bind, type, conv);
1208 }
1209 
1210 /* Returns the conversion path from type FROM to reference type TO for
1211    purposes of reference binding.  For lvalue binding, either pass a
1212    reference type to FROM or an lvalue expression to EXPR.  If the
1213    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1214    the conversion returned.  If C_CAST_P is true, this
1215    conversion is coming from a C-style cast.  */
1216 
1217 static conversion *
1218 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1219 {
1220   conversion *conv = NULL;
1221   tree to = TREE_TYPE (rto);
1222   tree from = rfrom;
1223   tree tfrom;
1224   bool related_p;
1225   bool compatible_p;
1226   cp_lvalue_kind is_lvalue = clk_none;
1227 
1228   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1229     {
1230       expr = instantiate_type (to, expr, tf_none);
1231       if (expr == error_mark_node)
1232 	return NULL;
1233       from = TREE_TYPE (expr);
1234     }
1235 
1236   if (TREE_CODE (from) == REFERENCE_TYPE)
1237     {
1238       /* Anything with reference type is an lvalue.  */
1239       is_lvalue = clk_ordinary;
1240       from = TREE_TYPE (from);
1241     }
1242 
1243   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1244     {
1245       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1246       conv = implicit_conversion (to, from, expr, c_cast_p,
1247 				  flags);
1248       if (!CLASS_TYPE_P (to)
1249 	  && CONSTRUCTOR_NELTS (expr) == 1)
1250 	{
1251 	  expr = CONSTRUCTOR_ELT (expr, 0)->value;
1252 	  if (error_operand_p (expr))
1253 	    return NULL;
1254 	  from = TREE_TYPE (expr);
1255 	}
1256     }
1257 
1258   if (is_lvalue == clk_none && expr)
1259     is_lvalue = real_lvalue_p (expr);
1260 
1261   tfrom = from;
1262   if ((is_lvalue & clk_bitfield) != 0)
1263     tfrom = unlowered_expr_type (expr);
1264 
1265   /* Figure out whether or not the types are reference-related and
1266      reference compatible.  We have do do this after stripping
1267      references from FROM.  */
1268   related_p = reference_related_p (to, tfrom);
1269   /* If this is a C cast, first convert to an appropriately qualified
1270      type, so that we can later do a const_cast to the desired type.  */
1271   if (related_p && c_cast_p
1272       && !at_least_as_qualified_p (to, tfrom))
1273     to = build_qualified_type (to, cp_type_quals (tfrom));
1274   compatible_p = reference_compatible_p (to, tfrom);
1275 
1276   /* Directly bind reference when target expression's type is compatible with
1277      the reference and expression is an lvalue. In DR391, the wording in
1278      [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1279      const and rvalue references to rvalues of compatible class type.
1280      We should also do direct bindings for non-class "rvalues" derived from
1281      rvalue references.  */
1282   if (compatible_p
1283       && (is_lvalue
1284 	  || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1285 		&& !(flags & LOOKUP_NO_TEMP_BIND))
1286 	       || TYPE_REF_IS_RVALUE (rto))
1287 	      && (CLASS_TYPE_P (from) || (expr && lvalue_p (expr))))))
1288     {
1289       /* [dcl.init.ref]
1290 
1291 	 If the initializer expression
1292 
1293 	 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1294 	    is reference-compatible with "cv2 T2,"
1295 
1296 	 the reference is bound directly to the initializer expression
1297 	 lvalue.
1298 
1299 	 [...]
1300 	 If the initializer expression is an rvalue, with T2 a class type,
1301 	 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1302 	 is bound to the object represented by the rvalue or to a sub-object
1303 	 within that object.  */
1304 
1305       conv = build_identity_conv (tfrom, expr);
1306       conv = direct_reference_binding (rto, conv);
1307 
1308       if (flags & LOOKUP_PREFER_RVALUE)
1309 	/* The top-level caller requested that we pretend that the lvalue
1310 	   be treated as an rvalue.  */
1311 	conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1312       else
1313 	conv->rvaluedness_matches_p
1314           = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1315 
1316       if ((is_lvalue & clk_bitfield) != 0
1317 	  || ((is_lvalue & clk_packed) != 0 && !TYPE_PACKED (to)))
1318 	/* For the purposes of overload resolution, we ignore the fact
1319 	   this expression is a bitfield or packed field. (In particular,
1320 	   [over.ics.ref] says specifically that a function with a
1321 	   non-const reference parameter is viable even if the
1322 	   argument is a bitfield.)
1323 
1324 	   However, when we actually call the function we must create
1325 	   a temporary to which to bind the reference.  If the
1326 	   reference is volatile, or isn't const, then we cannot make
1327 	   a temporary, so we just issue an error when the conversion
1328 	   actually occurs.  */
1329 	conv->need_temporary_p = true;
1330 
1331       /* Don't allow binding of lvalues to rvalue references.  */
1332       if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1333           && !(flags & LOOKUP_PREFER_RVALUE))
1334 	conv->bad_p = true;
1335 
1336       return conv;
1337     }
1338   /* [class.conv.fct] A conversion function is never used to convert a
1339      (possibly cv-qualified) object to the (possibly cv-qualified) same
1340      object type (or a reference to it), to a (possibly cv-qualified) base
1341      class of that type (or a reference to it).... */
1342   else if (CLASS_TYPE_P (from) && !related_p
1343 	   && !(flags & LOOKUP_NO_CONVERSION))
1344     {
1345       /* [dcl.init.ref]
1346 
1347 	 If the initializer expression
1348 
1349 	 -- has a class type (i.e., T2 is a class type) can be
1350 	    implicitly converted to an lvalue of type "cv3 T3," where
1351 	    "cv1 T1" is reference-compatible with "cv3 T3".  (this
1352 	    conversion is selected by enumerating the applicable
1353 	    conversion functions (_over.match.ref_) and choosing the
1354 	    best one through overload resolution.  (_over.match_).
1355 
1356 	the reference is bound to the lvalue result of the conversion
1357 	in the second case.  */
1358       conv = convert_class_to_reference (rto, from, expr, flags);
1359       if (conv)
1360 	return conv;
1361     }
1362 
1363   /* From this point on, we conceptually need temporaries, even if we
1364      elide them.  Only the cases above are "direct bindings".  */
1365   if (flags & LOOKUP_NO_TEMP_BIND)
1366     return NULL;
1367 
1368   /* [over.ics.rank]
1369 
1370      When a parameter of reference type is not bound directly to an
1371      argument expression, the conversion sequence is the one required
1372      to convert the argument expression to the underlying type of the
1373      reference according to _over.best.ics_.  Conceptually, this
1374      conversion sequence corresponds to copy-initializing a temporary
1375      of the underlying type with the argument expression.  Any
1376      difference in top-level cv-qualification is subsumed by the
1377      initialization itself and does not constitute a conversion.  */
1378 
1379   /* [dcl.init.ref]
1380 
1381      Otherwise, the reference shall be to a non-volatile const type.
1382 
1383      Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1384   if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1385     return NULL;
1386 
1387   /* [dcl.init.ref]
1388 
1389      Otherwise, a temporary of type "cv1 T1" is created and
1390      initialized from the initializer expression using the rules for a
1391      non-reference copy initialization.  If T1 is reference-related to
1392      T2, cv1 must be the same cv-qualification as, or greater
1393      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1394   if (related_p && !at_least_as_qualified_p (to, from))
1395     return NULL;
1396 
1397   /* We're generating a temporary now, but don't bind any more in the
1398      conversion (specifically, don't slice the temporary returned by a
1399      conversion operator).  */
1400   flags |= LOOKUP_NO_TEMP_BIND;
1401 
1402   /* Temporaries are copy-initialized, except for this hack to allow
1403      explicit conversion ops to the copy ctor.  See also
1404      add_function_candidate.  */
1405   if (!(flags & LOOKUP_COPY_PARM))
1406     flags |= LOOKUP_ONLYCONVERTING;
1407 
1408   if (!conv)
1409     conv = implicit_conversion (to, from, expr, c_cast_p,
1410 				flags);
1411   if (!conv)
1412     return NULL;
1413 
1414   conv = build_conv (ck_ref_bind, rto, conv);
1415   /* This reference binding, unlike those above, requires the
1416      creation of a temporary.  */
1417   conv->need_temporary_p = true;
1418   conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1419 
1420   return conv;
1421 }
1422 
1423 /* Returns the implicit conversion sequence (see [over.ics]) from type
1424    FROM to type TO.  The optional expression EXPR may affect the
1425    conversion.  FLAGS are the usual overloading flags.  If C_CAST_P is
1426    true, this conversion is coming from a C-style cast.  */
1427 
1428 static conversion *
1429 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1430 		     int flags)
1431 {
1432   conversion *conv;
1433 
1434   if (from == error_mark_node || to == error_mark_node
1435       || expr == error_mark_node)
1436     return NULL;
1437 
1438   if (TREE_CODE (to) == REFERENCE_TYPE)
1439     conv = reference_binding (to, from, expr, c_cast_p, flags);
1440   else
1441     conv = standard_conversion (to, from, expr, c_cast_p, flags);
1442 
1443   if (conv)
1444     return conv;
1445 
1446   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1447     {
1448       if (is_std_init_list (to))
1449 	return build_list_conv (to, expr, flags);
1450 
1451       /* Allow conversion from an initializer-list with one element to a
1452 	 scalar type.  */
1453       if (SCALAR_TYPE_P (to))
1454 	{
1455 	  int nelts = CONSTRUCTOR_NELTS (expr);
1456 	  tree elt;
1457 
1458 	  if (nelts == 0)
1459 	    elt = integer_zero_node;
1460 	  else if (nelts == 1)
1461 	    elt = CONSTRUCTOR_ELT (expr, 0)->value;
1462 	  else
1463 	    elt = error_mark_node;
1464 
1465 	  conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1466 				      c_cast_p, flags);
1467 	  if (conv)
1468 	    {
1469 	      conv->check_narrowing = true;
1470 	      if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1471 		/* Too many levels of braces, i.e. '{{1}}'.  */
1472 		conv->bad_p = true;
1473 	      return conv;
1474 	    }
1475 	}
1476     }
1477 
1478   if (expr != NULL_TREE
1479       && (MAYBE_CLASS_TYPE_P (from)
1480 	  || MAYBE_CLASS_TYPE_P (to))
1481       && (flags & LOOKUP_NO_CONVERSION) == 0)
1482     {
1483       struct z_candidate *cand;
1484       int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING));
1485 
1486       if (CLASS_TYPE_P (to)
1487 	  && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1488 	  && BRACE_ENCLOSED_INITIALIZER_P (expr))
1489 	return build_aggr_conv (to, expr, flags);
1490 
1491       cand = build_user_type_conversion_1 (to, expr, convflags);
1492       if (cand)
1493 	conv = cand->second_conv;
1494 
1495       /* We used to try to bind a reference to a temporary here, but that
1496 	 is now handled after the recursive call to this function at the end
1497 	 of reference_binding.  */
1498       return conv;
1499     }
1500 
1501   return NULL;
1502 }
1503 
1504 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1505    functions.  ARGS will not be changed until a single candidate is
1506    selected.  */
1507 
1508 static struct z_candidate *
1509 add_candidate (struct z_candidate **candidates,
1510 	       tree fn, tree first_arg, const VEC(tree,gc) *args,
1511 	       size_t num_convs, conversion **convs,
1512 	       tree access_path, tree conversion_path,
1513 	       int viable)
1514 {
1515   struct z_candidate *cand = (struct z_candidate *)
1516     conversion_obstack_alloc (sizeof (struct z_candidate));
1517 
1518   cand->fn = fn;
1519   cand->first_arg = first_arg;
1520   cand->args = args;
1521   cand->convs = convs;
1522   cand->num_convs = num_convs;
1523   cand->access_path = access_path;
1524   cand->conversion_path = conversion_path;
1525   cand->viable = viable;
1526   cand->next = *candidates;
1527   *candidates = cand;
1528 
1529   return cand;
1530 }
1531 
1532 /* Create an overload candidate for the function or method FN called
1533    with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1534    FLAGS is passed on to implicit_conversion.
1535 
1536    This does not change ARGS.
1537 
1538    CTYPE, if non-NULL, is the type we want to pretend this function
1539    comes from for purposes of overload resolution.  */
1540 
1541 static struct z_candidate *
1542 add_function_candidate (struct z_candidate **candidates,
1543 			tree fn, tree ctype, tree first_arg,
1544 			const VEC(tree,gc) *args, tree access_path,
1545 			tree conversion_path, int flags)
1546 {
1547   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1548   int i, len;
1549   conversion **convs;
1550   tree parmnode;
1551   tree orig_first_arg = first_arg;
1552   int skip;
1553   int viable = 1;
1554 
1555   /* At this point we should not see any functions which haven't been
1556      explicitly declared, except for friend functions which will have
1557      been found using argument dependent lookup.  */
1558   gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1559 
1560   /* The `this', `in_chrg' and VTT arguments to constructors are not
1561      considered in overload resolution.  */
1562   if (DECL_CONSTRUCTOR_P (fn))
1563     {
1564       parmlist = skip_artificial_parms_for (fn, parmlist);
1565       skip = num_artificial_parms_for (fn);
1566       if (skip > 0 && first_arg != NULL_TREE)
1567 	{
1568 	  --skip;
1569 	  first_arg = NULL_TREE;
1570 	}
1571     }
1572   else
1573     skip = 0;
1574 
1575   len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1576   convs = alloc_conversions (len);
1577 
1578   /* 13.3.2 - Viable functions [over.match.viable]
1579      First, to be a viable function, a candidate function shall have enough
1580      parameters to agree in number with the arguments in the list.
1581 
1582      We need to check this first; otherwise, checking the ICSes might cause
1583      us to produce an ill-formed template instantiation.  */
1584 
1585   parmnode = parmlist;
1586   for (i = 0; i < len; ++i)
1587     {
1588       if (parmnode == NULL_TREE || parmnode == void_list_node)
1589 	break;
1590       parmnode = TREE_CHAIN (parmnode);
1591     }
1592 
1593   if (i < len && parmnode)
1594     viable = 0;
1595 
1596   /* Make sure there are default args for the rest of the parms.  */
1597   else if (!sufficient_parms_p (parmnode))
1598     viable = 0;
1599 
1600   if (! viable)
1601     goto out;
1602 
1603   /* Second, for F to be a viable function, there shall exist for each
1604      argument an implicit conversion sequence that converts that argument
1605      to the corresponding parameter of F.  */
1606 
1607   parmnode = parmlist;
1608 
1609   for (i = 0; i < len; ++i)
1610     {
1611       tree arg, argtype;
1612       conversion *t;
1613       int is_this;
1614 
1615       if (parmnode == void_list_node)
1616 	break;
1617 
1618       if (i == 0 && first_arg != NULL_TREE)
1619 	arg = first_arg;
1620       else
1621 	arg = VEC_index (tree, args,
1622 			 i + skip - (first_arg != NULL_TREE ? 1 : 0));
1623       argtype = lvalue_type (arg);
1624 
1625       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1626 		 && ! DECL_CONSTRUCTOR_P (fn));
1627 
1628       if (parmnode)
1629 	{
1630 	  tree parmtype = TREE_VALUE (parmnode);
1631 	  int lflags = flags;
1632 
1633 	  /* The type of the implicit object parameter ('this') for
1634 	     overload resolution is not always the same as for the
1635 	     function itself; conversion functions are considered to
1636 	     be members of the class being converted, and functions
1637 	     introduced by a using-declaration are considered to be
1638 	     members of the class that uses them.
1639 
1640 	     Since build_over_call ignores the ICS for the `this'
1641 	     parameter, we can just change the parm type.  */
1642 	  if (ctype && is_this)
1643 	    {
1644 	      parmtype
1645 		= build_qualified_type (ctype,
1646 					TYPE_QUALS (TREE_TYPE (parmtype)));
1647 	      parmtype = build_pointer_type (parmtype);
1648 	    }
1649 
1650 	  if (ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn)
1651 	      && (len-skip == 1))
1652 	    {
1653 	      /* Hack: Direct-initialize copy parm (i.e. suppress
1654 		 LOOKUP_ONLYCONVERTING) to make explicit conversion ops
1655 		 work.  See also reference_binding.  */
1656 	      lflags |= LOOKUP_COPY_PARM;
1657 	      if (flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1658 		lflags |= LOOKUP_NO_CONVERSION;
1659 	    }
1660 	  else
1661 	    lflags |= LOOKUP_ONLYCONVERTING;
1662 
1663 	  t = implicit_conversion (parmtype, argtype, arg,
1664 				   /*c_cast_p=*/false, lflags);
1665 	}
1666       else
1667 	{
1668 	  t = build_identity_conv (argtype, arg);
1669 	  t->ellipsis_p = true;
1670 	}
1671 
1672       if (t && is_this)
1673 	t->this_p = true;
1674 
1675       convs[i] = t;
1676       if (! t)
1677 	{
1678 	  viable = 0;
1679 	  break;
1680 	}
1681 
1682       if (t->bad_p)
1683 	viable = -1;
1684 
1685       if (parmnode)
1686 	parmnode = TREE_CHAIN (parmnode);
1687     }
1688 
1689  out:
1690   return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
1691 			access_path, conversion_path, viable);
1692 }
1693 
1694 /* Create an overload candidate for the conversion function FN which will
1695    be invoked for expression OBJ, producing a pointer-to-function which
1696    will in turn be called with the argument list FIRST_ARG/ARGLIST,
1697    and add it to CANDIDATES.  This does not change ARGLIST.  FLAGS is
1698    passed on to implicit_conversion.
1699 
1700    Actually, we don't really care about FN; we care about the type it
1701    converts to.  There may be multiple conversion functions that will
1702    convert to that type, and we rely on build_user_type_conversion_1 to
1703    choose the best one; so when we create our candidate, we record the type
1704    instead of the function.  */
1705 
1706 static struct z_candidate *
1707 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1708 		    tree first_arg, const VEC(tree,gc) *arglist,
1709 		    tree access_path, tree conversion_path)
1710 {
1711   tree totype = TREE_TYPE (TREE_TYPE (fn));
1712   int i, len, viable, flags;
1713   tree parmlist, parmnode;
1714   conversion **convs;
1715 
1716   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1717     parmlist = TREE_TYPE (parmlist);
1718   parmlist = TYPE_ARG_TYPES (parmlist);
1719 
1720   len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
1721   convs = alloc_conversions (len);
1722   parmnode = parmlist;
1723   viable = 1;
1724   flags = LOOKUP_IMPLICIT;
1725 
1726   /* Don't bother looking up the same type twice.  */
1727   if (*candidates && (*candidates)->fn == totype)
1728     return NULL;
1729 
1730   for (i = 0; i < len; ++i)
1731     {
1732       tree arg, argtype;
1733       conversion *t;
1734 
1735       if (i == 0)
1736 	arg = obj;
1737       else if (i == 1 && first_arg != NULL_TREE)
1738 	arg = first_arg;
1739       else
1740 	arg = VEC_index (tree, arglist,
1741 			 i - (first_arg != NULL_TREE ? 1 : 0) - 1);
1742       argtype = lvalue_type (arg);
1743 
1744       if (i == 0)
1745 	t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1746 				 flags);
1747       else if (parmnode == void_list_node)
1748 	break;
1749       else if (parmnode)
1750 	t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1751 				 /*c_cast_p=*/false, flags);
1752       else
1753 	{
1754 	  t = build_identity_conv (argtype, arg);
1755 	  t->ellipsis_p = true;
1756 	}
1757 
1758       convs[i] = t;
1759       if (! t)
1760 	break;
1761 
1762       if (t->bad_p)
1763 	viable = -1;
1764 
1765       if (i == 0)
1766 	continue;
1767 
1768       if (parmnode)
1769 	parmnode = TREE_CHAIN (parmnode);
1770     }
1771 
1772   if (i < len)
1773     viable = 0;
1774 
1775   if (!sufficient_parms_p (parmnode))
1776     viable = 0;
1777 
1778   return add_candidate (candidates, totype, first_arg, arglist, len, convs,
1779 			access_path, conversion_path, viable);
1780 }
1781 
1782 static void
1783 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1784 			 tree type1, tree type2, tree *args, tree *argtypes,
1785 			 int flags)
1786 {
1787   conversion *t;
1788   conversion **convs;
1789   size_t num_convs;
1790   int viable = 1, i;
1791   tree types[2];
1792 
1793   types[0] = type1;
1794   types[1] = type2;
1795 
1796   num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
1797   convs = alloc_conversions (num_convs);
1798 
1799   /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
1800      conversion ops are allowed.  We handle that here by just checking for
1801      boolean_type_node because other operators don't ask for it.  COND_EXPR
1802      also does contextual conversion to bool for the first operand, but we
1803      handle that in build_conditional_expr, and type1 here is operand 2.  */
1804   if (type1 != boolean_type_node)
1805     flags |= LOOKUP_ONLYCONVERTING;
1806 
1807   for (i = 0; i < 2; ++i)
1808     {
1809       if (! args[i])
1810 	break;
1811 
1812       t = implicit_conversion (types[i], argtypes[i], args[i],
1813 			       /*c_cast_p=*/false, flags);
1814       if (! t)
1815 	{
1816 	  viable = 0;
1817 	  /* We need something for printing the candidate.  */
1818 	  t = build_identity_conv (types[i], NULL_TREE);
1819 	}
1820       else if (t->bad_p)
1821 	viable = 0;
1822       convs[i] = t;
1823     }
1824 
1825   /* For COND_EXPR we rearranged the arguments; undo that now.  */
1826   if (args[2])
1827     {
1828       convs[2] = convs[1];
1829       convs[1] = convs[0];
1830       t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1831 			       /*c_cast_p=*/false, flags);
1832       if (t)
1833 	convs[0] = t;
1834       else
1835 	viable = 0;
1836     }
1837 
1838   add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
1839 		 num_convs, convs,
1840 		 /*access_path=*/NULL_TREE,
1841 		 /*conversion_path=*/NULL_TREE,
1842 		 viable);
1843 }
1844 
1845 static bool
1846 is_complete (tree t)
1847 {
1848   return COMPLETE_TYPE_P (complete_type (t));
1849 }
1850 
1851 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
1852 
1853 static bool
1854 promoted_arithmetic_type_p (tree type)
1855 {
1856   /* [over.built]
1857 
1858      In this section, the term promoted integral type is used to refer
1859      to those integral types which are preserved by integral promotion
1860      (including e.g.  int and long but excluding e.g.  char).
1861      Similarly, the term promoted arithmetic type refers to promoted
1862      integral types plus floating types.  */
1863   return ((CP_INTEGRAL_TYPE_P (type)
1864 	   && same_type_p (type_promotes_to (type), type))
1865 	  || TREE_CODE (type) == REAL_TYPE);
1866 }
1867 
1868 /* Create any builtin operator overload candidates for the operator in
1869    question given the converted operand types TYPE1 and TYPE2.  The other
1870    args are passed through from add_builtin_candidates to
1871    build_builtin_candidate.
1872 
1873    TYPE1 and TYPE2 may not be permissible, and we must filter them.
1874    If CODE is requires candidates operands of the same type of the kind
1875    of which TYPE1 and TYPE2 are, we add both candidates
1876    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
1877 
1878 static void
1879 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1880 		       enum tree_code code2, tree fnname, tree type1,
1881 		       tree type2, tree *args, tree *argtypes, int flags)
1882 {
1883   switch (code)
1884     {
1885     case POSTINCREMENT_EXPR:
1886     case POSTDECREMENT_EXPR:
1887       args[1] = integer_zero_node;
1888       type2 = integer_type_node;
1889       break;
1890     default:
1891       break;
1892     }
1893 
1894   switch (code)
1895     {
1896 
1897 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
1898      and  VQ  is  either  volatile or empty, there exist candidate operator
1899      functions of the form
1900 	     VQ T&   operator++(VQ T&);
1901 	     T       operator++(VQ T&, int);
1902    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1903      type  other than bool, and VQ is either volatile or empty, there exist
1904      candidate operator functions of the form
1905 	     VQ T&   operator--(VQ T&);
1906 	     T       operator--(VQ T&, int);
1907    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
1908      complete  object type, and VQ is either volatile or empty, there exist
1909      candidate operator functions of the form
1910 	     T*VQ&   operator++(T*VQ&);
1911 	     T*VQ&   operator--(T*VQ&);
1912 	     T*      operator++(T*VQ&, int);
1913 	     T*      operator--(T*VQ&, int);  */
1914 
1915     case POSTDECREMENT_EXPR:
1916     case PREDECREMENT_EXPR:
1917       if (TREE_CODE (type1) == BOOLEAN_TYPE)
1918 	return;
1919     case POSTINCREMENT_EXPR:
1920     case PREINCREMENT_EXPR:
1921       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1922 	{
1923 	  type1 = build_reference_type (type1);
1924 	  break;
1925 	}
1926       return;
1927 
1928 /* 7 For every cv-qualified or cv-unqualified object type T, there
1929      exist candidate operator functions of the form
1930 
1931 	     T&      operator*(T*);
1932 
1933    8 For every function type T, there exist candidate operator functions of
1934      the form
1935 	     T&      operator*(T*);  */
1936 
1937     case INDIRECT_REF:
1938       if (TREE_CODE (type1) == POINTER_TYPE
1939 	  && !uses_template_parms (TREE_TYPE (type1))
1940 	  && (TYPE_PTROB_P (type1)
1941 	      || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1942 	break;
1943       return;
1944 
1945 /* 9 For every type T, there exist candidate operator functions of the form
1946 	     T*      operator+(T*);
1947 
1948    10For  every  promoted arithmetic type T, there exist candidate operator
1949      functions of the form
1950 	     T       operator+(T);
1951 	     T       operator-(T);  */
1952 
1953     case UNARY_PLUS_EXPR: /* unary + */
1954       if (TREE_CODE (type1) == POINTER_TYPE)
1955 	break;
1956     case NEGATE_EXPR:
1957       if (ARITHMETIC_TYPE_P (type1))
1958 	break;
1959       return;
1960 
1961 /* 11For every promoted integral type T,  there  exist  candidate  operator
1962      functions of the form
1963 	     T       operator~(T);  */
1964 
1965     case BIT_NOT_EXPR:
1966       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
1967 	break;
1968       return;
1969 
1970 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1971      is the same type as C2 or is a derived class of C2, T  is  a  complete
1972      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1973      there exist candidate operator functions of the form
1974 	     CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1975      where CV12 is the union of CV1 and CV2.  */
1976 
1977     case MEMBER_REF:
1978       if (TREE_CODE (type1) == POINTER_TYPE
1979 	  && TYPE_PTR_TO_MEMBER_P (type2))
1980 	{
1981 	  tree c1 = TREE_TYPE (type1);
1982 	  tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1983 
1984 	  if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
1985 	      && (TYPE_PTRMEMFUNC_P (type2)
1986 		  || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1987 	    break;
1988 	}
1989       return;
1990 
1991 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
1992      didate operator functions of the form
1993 	     LR      operator*(L, R);
1994 	     LR      operator/(L, R);
1995 	     LR      operator+(L, R);
1996 	     LR      operator-(L, R);
1997 	     bool    operator<(L, R);
1998 	     bool    operator>(L, R);
1999 	     bool    operator<=(L, R);
2000 	     bool    operator>=(L, R);
2001 	     bool    operator==(L, R);
2002 	     bool    operator!=(L, R);
2003      where  LR  is  the  result of the usual arithmetic conversions between
2004      types L and R.
2005 
2006    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
2007      unqualified  complete  object  type and I is a promoted integral type,
2008      there exist candidate operator functions of the form
2009 	     T*      operator+(T*, I);
2010 	     T&      operator[](T*, I);
2011 	     T*      operator-(T*, I);
2012 	     T*      operator+(I, T*);
2013 	     T&      operator[](I, T*);
2014 
2015    15For every T, where T is a pointer to complete object type, there exist
2016      candidate operator functions of the form112)
2017 	     ptrdiff_t operator-(T, T);
2018 
2019    16For every pointer or enumeration type T, there exist candidate operator
2020      functions of the form
2021 	     bool    operator<(T, T);
2022 	     bool    operator>(T, T);
2023 	     bool    operator<=(T, T);
2024 	     bool    operator>=(T, T);
2025 	     bool    operator==(T, T);
2026 	     bool    operator!=(T, T);
2027 
2028    17For every pointer to member type T,  there  exist  candidate  operator
2029      functions of the form
2030 	     bool    operator==(T, T);
2031 	     bool    operator!=(T, T);  */
2032 
2033     case MINUS_EXPR:
2034       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2035 	break;
2036       if (TYPE_PTROB_P (type1)
2037 	  && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2038 	{
2039 	  type2 = ptrdiff_type_node;
2040 	  break;
2041 	}
2042     case MULT_EXPR:
2043     case TRUNC_DIV_EXPR:
2044       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2045 	break;
2046       return;
2047 
2048     case EQ_EXPR:
2049     case NE_EXPR:
2050       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2051 	  || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
2052 	break;
2053       if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2054 	{
2055 	  type2 = type1;
2056 	  break;
2057 	}
2058       if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2059 	{
2060 	  type1 = type2;
2061 	  break;
2062 	}
2063       /* Fall through.  */
2064     case LT_EXPR:
2065     case GT_EXPR:
2066     case LE_EXPR:
2067     case GE_EXPR:
2068     case MAX_EXPR:
2069     case MIN_EXPR:
2070       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2071 	break;
2072       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2073 	break;
2074       if (TREE_CODE (type1) == ENUMERAL_TYPE
2075 	  && TREE_CODE (type2) == ENUMERAL_TYPE)
2076 	break;
2077       if (TYPE_PTR_P (type1)
2078 	  && null_ptr_cst_p (args[1])
2079 	  && !uses_template_parms (type1))
2080 	{
2081 	  type2 = type1;
2082 	  break;
2083 	}
2084       if (null_ptr_cst_p (args[0])
2085 	  && TYPE_PTR_P (type2)
2086 	  && !uses_template_parms (type2))
2087 	{
2088 	  type1 = type2;
2089 	  break;
2090 	}
2091       return;
2092 
2093     case PLUS_EXPR:
2094       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2095 	break;
2096     case ARRAY_REF:
2097       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2098 	{
2099 	  type1 = ptrdiff_type_node;
2100 	  break;
2101 	}
2102       if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2103 	{
2104 	  type2 = ptrdiff_type_node;
2105 	  break;
2106 	}
2107       return;
2108 
2109 /* 18For  every pair of promoted integral types L and R, there exist candi-
2110      date operator functions of the form
2111 	     LR      operator%(L, R);
2112 	     LR      operator&(L, R);
2113 	     LR      operator^(L, R);
2114 	     LR      operator|(L, R);
2115 	     L       operator<<(L, R);
2116 	     L       operator>>(L, R);
2117      where LR is the result of the  usual  arithmetic  conversions  between
2118      types L and R.  */
2119 
2120     case TRUNC_MOD_EXPR:
2121     case BIT_AND_EXPR:
2122     case BIT_IOR_EXPR:
2123     case BIT_XOR_EXPR:
2124     case LSHIFT_EXPR:
2125     case RSHIFT_EXPR:
2126       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2127 	break;
2128       return;
2129 
2130 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
2131      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
2132      type, there exist candidate operator functions of the form
2133 	     VQ L&   operator=(VQ L&, R);
2134 	     VQ L&   operator*=(VQ L&, R);
2135 	     VQ L&   operator/=(VQ L&, R);
2136 	     VQ L&   operator+=(VQ L&, R);
2137 	     VQ L&   operator-=(VQ L&, R);
2138 
2139    20For  every  pair T, VQ), where T is any type and VQ is either volatile
2140      or empty, there exist candidate operator functions of the form
2141 	     T*VQ&   operator=(T*VQ&, T*);
2142 
2143    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
2144      either  volatile or empty, there exist candidate operator functions of
2145      the form
2146 	     VQ T&   operator=(VQ T&, T);
2147 
2148    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
2149      unqualified  complete object type, VQ is either volatile or empty, and
2150      I is a promoted integral type, there exist  candidate  operator  func-
2151      tions of the form
2152 	     T*VQ&   operator+=(T*VQ&, I);
2153 	     T*VQ&   operator-=(T*VQ&, I);
2154 
2155    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
2156      type, VQ is either volatile or empty, and R  is  a  promoted  integral
2157      type, there exist candidate operator functions of the form
2158 
2159 	     VQ L&   operator%=(VQ L&, R);
2160 	     VQ L&   operator<<=(VQ L&, R);
2161 	     VQ L&   operator>>=(VQ L&, R);
2162 	     VQ L&   operator&=(VQ L&, R);
2163 	     VQ L&   operator^=(VQ L&, R);
2164 	     VQ L&   operator|=(VQ L&, R);  */
2165 
2166     case MODIFY_EXPR:
2167       switch (code2)
2168 	{
2169 	case PLUS_EXPR:
2170 	case MINUS_EXPR:
2171 	  if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2172 	    {
2173 	      type2 = ptrdiff_type_node;
2174 	      break;
2175 	    }
2176 	case MULT_EXPR:
2177 	case TRUNC_DIV_EXPR:
2178 	  if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2179 	    break;
2180 	  return;
2181 
2182 	case TRUNC_MOD_EXPR:
2183 	case BIT_AND_EXPR:
2184 	case BIT_IOR_EXPR:
2185 	case BIT_XOR_EXPR:
2186 	case LSHIFT_EXPR:
2187 	case RSHIFT_EXPR:
2188 	  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2189 	    break;
2190 	  return;
2191 
2192 	case NOP_EXPR:
2193 	  if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2194 	    break;
2195 	  if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2196 	      || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2197 	      || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2198 	      || ((TYPE_PTRMEMFUNC_P (type1)
2199 		   || TREE_CODE (type1) == POINTER_TYPE)
2200 		  && null_ptr_cst_p (args[1])))
2201 	    {
2202 	      type2 = type1;
2203 	      break;
2204 	    }
2205 	  return;
2206 
2207 	default:
2208 	  gcc_unreachable ();
2209 	}
2210       type1 = build_reference_type (type1);
2211       break;
2212 
2213     case COND_EXPR:
2214       /* [over.built]
2215 
2216 	 For every pair of promoted arithmetic types L and R, there
2217 	 exist candidate operator functions of the form
2218 
2219 	 LR operator?(bool, L, R);
2220 
2221 	 where LR is the result of the usual arithmetic conversions
2222 	 between types L and R.
2223 
2224 	 For every type T, where T is a pointer or pointer-to-member
2225 	 type, there exist candidate operator functions of the form T
2226 	 operator?(bool, T, T);  */
2227 
2228       if (promoted_arithmetic_type_p (type1)
2229 	  && promoted_arithmetic_type_p (type2))
2230 	/* That's OK.  */
2231 	break;
2232 
2233       /* Otherwise, the types should be pointers.  */
2234       if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2235 	  || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2236 	return;
2237 
2238       /* We don't check that the two types are the same; the logic
2239 	 below will actually create two candidates; one in which both
2240 	 parameter types are TYPE1, and one in which both parameter
2241 	 types are TYPE2.  */
2242       break;
2243 
2244     default:
2245       gcc_unreachable ();
2246     }
2247 
2248   /* If we're dealing with two pointer types or two enumeral types,
2249      we need candidates for both of them.  */
2250   if (type2 && !same_type_p (type1, type2)
2251       && TREE_CODE (type1) == TREE_CODE (type2)
2252       && (TREE_CODE (type1) == REFERENCE_TYPE
2253 	  || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2254 	  || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2255 	  || TYPE_PTRMEMFUNC_P (type1)
2256 	  || MAYBE_CLASS_TYPE_P (type1)
2257 	  || TREE_CODE (type1) == ENUMERAL_TYPE))
2258     {
2259       build_builtin_candidate
2260 	(candidates, fnname, type1, type1, args, argtypes, flags);
2261       build_builtin_candidate
2262 	(candidates, fnname, type2, type2, args, argtypes, flags);
2263       return;
2264     }
2265 
2266   build_builtin_candidate
2267     (candidates, fnname, type1, type2, args, argtypes, flags);
2268 }
2269 
2270 tree
2271 type_decays_to (tree type)
2272 {
2273   if (TREE_CODE (type) == ARRAY_TYPE)
2274     return build_pointer_type (TREE_TYPE (type));
2275   if (TREE_CODE (type) == FUNCTION_TYPE)
2276     return build_pointer_type (type);
2277   return type;
2278 }
2279 
2280 /* There are three conditions of builtin candidates:
2281 
2282    1) bool-taking candidates.  These are the same regardless of the input.
2283    2) pointer-pair taking candidates.  These are generated for each type
2284       one of the input types converts to.
2285    3) arithmetic candidates.  According to the standard, we should generate
2286       all of these, but I'm trying not to...
2287 
2288    Here we generate a superset of the possible candidates for this particular
2289    case.  That is a subset of the full set the standard defines, plus some
2290    other cases which the standard disallows. add_builtin_candidate will
2291    filter out the invalid set.  */
2292 
2293 static void
2294 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2295 			enum tree_code code2, tree fnname, tree *args,
2296 			int flags)
2297 {
2298   int ref1, i;
2299   int enum_p = 0;
2300   tree type, argtypes[3];
2301   /* TYPES[i] is the set of possible builtin-operator parameter types
2302      we will consider for the Ith argument.  These are represented as
2303      a TREE_LIST; the TREE_VALUE of each node is the potential
2304      parameter type.  */
2305   tree types[2];
2306 
2307   for (i = 0; i < 3; ++i)
2308     {
2309       if (args[i])
2310 	argtypes[i] = unlowered_expr_type (args[i]);
2311       else
2312 	argtypes[i] = NULL_TREE;
2313     }
2314 
2315   switch (code)
2316     {
2317 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2318      and  VQ  is  either  volatile or empty, there exist candidate operator
2319      functions of the form
2320 		 VQ T&   operator++(VQ T&);  */
2321 
2322     case POSTINCREMENT_EXPR:
2323     case PREINCREMENT_EXPR:
2324     case POSTDECREMENT_EXPR:
2325     case PREDECREMENT_EXPR:
2326     case MODIFY_EXPR:
2327       ref1 = 1;
2328       break;
2329 
2330 /* 24There also exist candidate operator functions of the form
2331 	     bool    operator!(bool);
2332 	     bool    operator&&(bool, bool);
2333 	     bool    operator||(bool, bool);  */
2334 
2335     case TRUTH_NOT_EXPR:
2336       build_builtin_candidate
2337 	(candidates, fnname, boolean_type_node,
2338 	 NULL_TREE, args, argtypes, flags);
2339       return;
2340 
2341     case TRUTH_ORIF_EXPR:
2342     case TRUTH_ANDIF_EXPR:
2343       build_builtin_candidate
2344 	(candidates, fnname, boolean_type_node,
2345 	 boolean_type_node, args, argtypes, flags);
2346       return;
2347 
2348     case ADDR_EXPR:
2349     case COMPOUND_EXPR:
2350     case COMPONENT_REF:
2351       return;
2352 
2353     case COND_EXPR:
2354     case EQ_EXPR:
2355     case NE_EXPR:
2356     case LT_EXPR:
2357     case LE_EXPR:
2358     case GT_EXPR:
2359     case GE_EXPR:
2360       enum_p = 1;
2361       /* Fall through.  */
2362 
2363     default:
2364       ref1 = 0;
2365     }
2366 
2367   types[0] = types[1] = NULL_TREE;
2368 
2369   for (i = 0; i < 2; ++i)
2370     {
2371       if (! args[i])
2372 	;
2373       else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2374 	{
2375 	  tree convs;
2376 
2377 	  if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2378 	    return;
2379 
2380 	  convs = lookup_conversions (argtypes[i]);
2381 
2382 	  if (code == COND_EXPR)
2383 	    {
2384 	      if (real_lvalue_p (args[i]))
2385 		types[i] = tree_cons
2386 		  (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2387 
2388 	      types[i] = tree_cons
2389 		(NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2390 	    }
2391 
2392 	  else if (! convs)
2393 	    return;
2394 
2395 	  for (; convs; convs = TREE_CHAIN (convs))
2396 	    {
2397 	      type = TREE_TYPE (convs);
2398 
2399 	      if (i == 0 && ref1
2400 		  && (TREE_CODE (type) != REFERENCE_TYPE
2401 		      || CP_TYPE_CONST_P (TREE_TYPE (type))))
2402 		continue;
2403 
2404 	      if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2405 		types[i] = tree_cons (NULL_TREE, type, types[i]);
2406 
2407 	      type = non_reference (type);
2408 	      if (i != 0 || ! ref1)
2409 		{
2410 		  type = TYPE_MAIN_VARIANT (type_decays_to (type));
2411 		  if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2412 		    types[i] = tree_cons (NULL_TREE, type, types[i]);
2413 		  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2414 		    type = type_promotes_to (type);
2415 		}
2416 
2417 	      if (! value_member (type, types[i]))
2418 		types[i] = tree_cons (NULL_TREE, type, types[i]);
2419 	    }
2420 	}
2421       else
2422 	{
2423 	  if (code == COND_EXPR && real_lvalue_p (args[i]))
2424 	    types[i] = tree_cons
2425 	      (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2426 	  type = non_reference (argtypes[i]);
2427 	  if (i != 0 || ! ref1)
2428 	    {
2429 	      type = TYPE_MAIN_VARIANT (type_decays_to (type));
2430 	      if (enum_p && UNSCOPED_ENUM_P (type))
2431 		types[i] = tree_cons (NULL_TREE, type, types[i]);
2432 	      if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2433 		type = type_promotes_to (type);
2434 	    }
2435 	  types[i] = tree_cons (NULL_TREE, type, types[i]);
2436 	}
2437     }
2438 
2439   /* Run through the possible parameter types of both arguments,
2440      creating candidates with those parameter types.  */
2441   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2442     {
2443       if (types[1])
2444 	for (type = types[1]; type; type = TREE_CHAIN (type))
2445 	  add_builtin_candidate
2446 	    (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2447 	     TREE_VALUE (type), args, argtypes, flags);
2448       else
2449 	add_builtin_candidate
2450 	  (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2451 	   NULL_TREE, args, argtypes, flags);
2452     }
2453 }
2454 
2455 
2456 /* If TMPL can be successfully instantiated as indicated by
2457    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2458 
2459    TMPL is the template.  EXPLICIT_TARGS are any explicit template
2460    arguments.  ARGLIST is the arguments provided at the call-site.
2461    This does not change ARGLIST.  The RETURN_TYPE is the desired type
2462    for conversion operators.  If OBJ is NULL_TREE, FLAGS and CTYPE are
2463    as for add_function_candidate.  If an OBJ is supplied, FLAGS and
2464    CTYPE are ignored, and OBJ is as for add_conv_candidate.  */
2465 
2466 static struct z_candidate*
2467 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2468 			     tree ctype, tree explicit_targs, tree first_arg,
2469 			     const VEC(tree,gc) *arglist, tree return_type,
2470 			     tree access_path, tree conversion_path,
2471 			     int flags, tree obj, unification_kind_t strict)
2472 {
2473   int ntparms = DECL_NTPARMS (tmpl);
2474   tree targs = make_tree_vec (ntparms);
2475   unsigned int len = VEC_length (tree, arglist);
2476   unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2477   unsigned int skip_without_in_chrg = 0;
2478   tree first_arg_without_in_chrg = first_arg;
2479   tree *args_without_in_chrg;
2480   unsigned int nargs_without_in_chrg;
2481   unsigned int ia, ix;
2482   tree arg;
2483   struct z_candidate *cand;
2484   int i;
2485   tree fn;
2486 
2487   /* We don't do deduction on the in-charge parameter, the VTT
2488      parameter or 'this'.  */
2489   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2490     {
2491       if (first_arg_without_in_chrg != NULL_TREE)
2492 	first_arg_without_in_chrg = NULL_TREE;
2493       else
2494 	++skip_without_in_chrg;
2495     }
2496 
2497   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2498        || DECL_BASE_CONSTRUCTOR_P (tmpl))
2499       && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2500     {
2501       if (first_arg_without_in_chrg != NULL_TREE)
2502 	first_arg_without_in_chrg = NULL_TREE;
2503       else
2504 	++skip_without_in_chrg;
2505     }
2506 
2507   if (len < skip_without_in_chrg)
2508     return NULL;
2509 
2510   nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2511 			   + (len - skip_without_in_chrg));
2512   args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2513   ia = 0;
2514   if (first_arg_without_in_chrg != NULL_TREE)
2515     {
2516       args_without_in_chrg[ia] = first_arg_without_in_chrg;
2517       ++ia;
2518     }
2519   for (ix = skip_without_in_chrg;
2520        VEC_iterate (tree, arglist, ix, arg);
2521        ++ix)
2522     {
2523       args_without_in_chrg[ia] = arg;
2524       ++ia;
2525     }
2526   gcc_assert (ia == nargs_without_in_chrg);
2527 
2528   i = fn_type_unification (tmpl, explicit_targs, targs,
2529 			   args_without_in_chrg,
2530 			   nargs_without_in_chrg,
2531 			   return_type, strict, flags);
2532 
2533   if (i != 0)
2534     return NULL;
2535 
2536   fn = instantiate_template (tmpl, targs, tf_none);
2537   if (fn == error_mark_node)
2538     return NULL;
2539 
2540   /* In [class.copy]:
2541 
2542        A member function template is never instantiated to perform the
2543        copy of a class object to an object of its class type.
2544 
2545      It's a little unclear what this means; the standard explicitly
2546      does allow a template to be used to copy a class.  For example,
2547      in:
2548 
2549        struct A {
2550 	 A(A&);
2551 	 template <class T> A(const T&);
2552        };
2553        const A f ();
2554        void g () { A a (f ()); }
2555 
2556      the member template will be used to make the copy.  The section
2557      quoted above appears in the paragraph that forbids constructors
2558      whose only parameter is (a possibly cv-qualified variant of) the
2559      class type, and a logical interpretation is that the intent was
2560      to forbid the instantiation of member templates which would then
2561      have that form.  */
2562   if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2563     {
2564       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2565       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2566 				    ctype))
2567 	return NULL;
2568     }
2569 
2570   if (obj != NULL_TREE)
2571     /* Aha, this is a conversion function.  */
2572     cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2573 			       access_path, conversion_path);
2574   else
2575     cand = add_function_candidate (candidates, fn, ctype,
2576 				   first_arg, arglist, access_path,
2577 				   conversion_path, flags);
2578   if (DECL_TI_TEMPLATE (fn) != tmpl)
2579     /* This situation can occur if a member template of a template
2580        class is specialized.  Then, instantiate_template might return
2581        an instantiation of the specialization, in which case the
2582        DECL_TI_TEMPLATE field will point at the original
2583        specialization.  For example:
2584 
2585 	 template <class T> struct S { template <class U> void f(U);
2586 				       template <> void f(int) {}; };
2587 	 S<double> sd;
2588 	 sd.f(3);
2589 
2590        Here, TMPL will be template <class U> S<double>::f(U).
2591        And, instantiate template will give us the specialization
2592        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
2593        for this will point at template <class T> template <> S<T>::f(int),
2594        so that we can find the definition.  For the purposes of
2595        overload resolution, however, we want the original TMPL.  */
2596     cand->template_decl = build_template_info (tmpl, targs);
2597   else
2598     cand->template_decl = DECL_TEMPLATE_INFO (fn);
2599   cand->explicit_targs = explicit_targs;
2600 
2601   return cand;
2602 }
2603 
2604 
2605 static struct z_candidate *
2606 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2607 			tree explicit_targs, tree first_arg,
2608 			const VEC(tree,gc) *arglist, tree return_type,
2609 			tree access_path, tree conversion_path, int flags,
2610 			unification_kind_t strict)
2611 {
2612   return
2613     add_template_candidate_real (candidates, tmpl, ctype,
2614 				 explicit_targs, first_arg, arglist,
2615 				 return_type, access_path, conversion_path,
2616 				 flags, NULL_TREE, strict);
2617 }
2618 
2619 
2620 static struct z_candidate *
2621 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2622 			     tree obj, tree first_arg,
2623 			     const VEC(tree,gc) *arglist,
2624 			     tree return_type, tree access_path,
2625 			     tree conversion_path)
2626 {
2627   return
2628     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2629 				 first_arg, arglist, return_type, access_path,
2630 				 conversion_path, 0, obj, DEDUCE_CONV);
2631 }
2632 
2633 /* The CANDS are the set of candidates that were considered for
2634    overload resolution.  Return the set of viable candidates.  If none
2635    of the candidates were viable, set *ANY_VIABLE_P to true.  STRICT_P
2636    is true if a candidate should be considered viable only if it is
2637    strictly viable.  */
2638 
2639 static struct z_candidate*
2640 splice_viable (struct z_candidate *cands,
2641 	       bool strict_p,
2642 	       bool *any_viable_p)
2643 {
2644   struct z_candidate *viable;
2645   struct z_candidate **last_viable;
2646   struct z_candidate **cand;
2647 
2648   viable = NULL;
2649   last_viable = &viable;
2650   *any_viable_p = false;
2651 
2652   cand = &cands;
2653   while (*cand)
2654     {
2655       struct z_candidate *c = *cand;
2656       if (strict_p ? c->viable == 1 : c->viable)
2657 	{
2658 	  *last_viable = c;
2659 	  *cand = c->next;
2660 	  c->next = NULL;
2661 	  last_viable = &c->next;
2662 	  *any_viable_p = true;
2663 	}
2664       else
2665 	cand = &c->next;
2666     }
2667 
2668   return viable ? viable : cands;
2669 }
2670 
2671 static bool
2672 any_strictly_viable (struct z_candidate *cands)
2673 {
2674   for (; cands; cands = cands->next)
2675     if (cands->viable == 1)
2676       return true;
2677   return false;
2678 }
2679 
2680 /* OBJ is being used in an expression like "OBJ.f (...)".  In other
2681    words, it is about to become the "this" pointer for a member
2682    function call.  Take the address of the object.  */
2683 
2684 static tree
2685 build_this (tree obj)
2686 {
2687   /* In a template, we are only concerned about the type of the
2688      expression, so we can take a shortcut.  */
2689   if (processing_template_decl)
2690     return build_address (obj);
2691 
2692   return cp_build_unary_op (ADDR_EXPR, obj, 0, tf_warning_or_error);
2693 }
2694 
2695 /* Returns true iff functions are equivalent. Equivalent functions are
2696    not '==' only if one is a function-local extern function or if
2697    both are extern "C".  */
2698 
2699 static inline int
2700 equal_functions (tree fn1, tree fn2)
2701 {
2702   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2703       || DECL_EXTERN_C_FUNCTION_P (fn1))
2704     return decls_match (fn1, fn2);
2705   return fn1 == fn2;
2706 }
2707 
2708 /* Print information about one overload candidate CANDIDATE.  MSGSTR
2709    is the text to print before the candidate itself.
2710 
2711    NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2712    to have been run through gettext by the caller.  This wart makes
2713    life simpler in print_z_candidates and for the translators.  */
2714 
2715 static void
2716 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2717 {
2718   if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2719     {
2720       if (candidate->num_convs == 3)
2721 	inform (input_location, "%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2722 		candidate->convs[0]->type,
2723 		candidate->convs[1]->type,
2724 		candidate->convs[2]->type);
2725       else if (candidate->num_convs == 2)
2726 	inform (input_location, "%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2727 		candidate->convs[0]->type,
2728 		candidate->convs[1]->type);
2729       else
2730 	inform (input_location, "%s %D(%T) <built-in>", msgstr, candidate->fn,
2731 		candidate->convs[0]->type);
2732     }
2733   else if (TYPE_P (candidate->fn))
2734     inform (input_location, "%s %T <conversion>", msgstr, candidate->fn);
2735   else if (candidate->viable == -1)
2736     inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn);
2737   else if (DECL_DELETED_FN (candidate->fn))
2738     inform (input_location, "%s %+#D <deleted>", msgstr, candidate->fn);
2739   else
2740     inform (input_location, "%s %+#D", msgstr, candidate->fn);
2741 }
2742 
2743 static void
2744 print_z_candidates (struct z_candidate *candidates)
2745 {
2746   const char *str;
2747   struct z_candidate *cand1;
2748   struct z_candidate **cand2;
2749   char *spaces;
2750 
2751   if (!candidates)
2752     return;
2753 
2754   /* Remove deleted candidates.  */
2755   cand1 = candidates;
2756   for (cand2 = &cand1; *cand2; )
2757     {
2758       if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2759 	  && DECL_DELETED_FN ((*cand2)->fn))
2760 	*cand2 = (*cand2)->next;
2761       else
2762 	cand2 = &(*cand2)->next;
2763     }
2764   /* ...if there are any non-deleted ones.  */
2765   if (cand1)
2766     candidates = cand1;
2767 
2768   /* There may be duplicates in the set of candidates.  We put off
2769      checking this condition as long as possible, since we have no way
2770      to eliminate duplicates from a set of functions in less than n^2
2771      time.  Now we are about to emit an error message, so it is more
2772      permissible to go slowly.  */
2773   for (cand1 = candidates; cand1; cand1 = cand1->next)
2774     {
2775       tree fn = cand1->fn;
2776       /* Skip builtin candidates and conversion functions.  */
2777       if (TREE_CODE (fn) != FUNCTION_DECL)
2778 	continue;
2779       cand2 = &cand1->next;
2780       while (*cand2)
2781 	{
2782 	  if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2783 	      && equal_functions (fn, (*cand2)->fn))
2784 	    *cand2 = (*cand2)->next;
2785 	  else
2786 	    cand2 = &(*cand2)->next;
2787 	}
2788     }
2789 
2790   str = candidates->next ? _("candidates are:") :  _("candidate is:");
2791   spaces = NULL;
2792   for (; candidates; candidates = candidates->next)
2793     {
2794       print_z_candidate (spaces ? spaces : str, candidates);
2795       spaces = spaces ? spaces : get_spaces (str);
2796     }
2797   free (spaces);
2798 }
2799 
2800 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2801    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
2802    the result of the conversion function to convert it to the final
2803    desired type.  Merge the two sequences into a single sequence,
2804    and return the merged sequence.  */
2805 
2806 static conversion *
2807 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2808 {
2809   conversion **t;
2810 
2811   gcc_assert (user_seq->kind == ck_user);
2812 
2813   /* Find the end of the second conversion sequence.  */
2814   t = &(std_seq);
2815   while ((*t)->kind != ck_identity)
2816     t = &((*t)->u.next);
2817 
2818   /* Replace the identity conversion with the user conversion
2819      sequence.  */
2820   *t = user_seq;
2821 
2822   /* The entire sequence is a user-conversion sequence.  */
2823   std_seq->user_conv_p = true;
2824 
2825   return std_seq;
2826 }
2827 
2828 /* Returns the best overload candidate to perform the requested
2829    conversion.  This function is used for three the overloading situations
2830    described in [over.match.copy], [over.match.conv], and [over.match.ref].
2831    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2832    per [dcl.init.ref], so we ignore temporary bindings.  */
2833 
2834 static struct z_candidate *
2835 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2836 {
2837   struct z_candidate *candidates, *cand;
2838   tree fromtype = TREE_TYPE (expr);
2839   tree ctors = NULL_TREE;
2840   tree conv_fns = NULL_TREE;
2841   conversion *conv = NULL;
2842   tree first_arg = NULL_TREE;
2843   VEC(tree,gc) *args = NULL;
2844   bool any_viable_p;
2845   int convflags;
2846 
2847   /* We represent conversion within a hierarchy using RVALUE_CONV and
2848      BASE_CONV, as specified by [over.best.ics]; these become plain
2849      constructor calls, as specified in [dcl.init].  */
2850   gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
2851 	      || !DERIVED_FROM_P (totype, fromtype));
2852 
2853   if (MAYBE_CLASS_TYPE_P (totype))
2854     ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2855 
2856   if (MAYBE_CLASS_TYPE_P (fromtype))
2857     {
2858       tree to_nonref = non_reference (totype);
2859       if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
2860 	  (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
2861 	   && DERIVED_FROM_P (to_nonref, fromtype)))
2862 	{
2863 	  /* [class.conv.fct] A conversion function is never used to
2864 	     convert a (possibly cv-qualified) object to the (possibly
2865 	     cv-qualified) same object type (or a reference to it), to a
2866 	     (possibly cv-qualified) base class of that type (or a
2867 	     reference to it)...  */
2868 	}
2869       else
2870 	conv_fns = lookup_conversions (fromtype);
2871     }
2872 
2873   candidates = 0;
2874   flags |= LOOKUP_NO_CONVERSION;
2875 
2876   /* It's OK to bind a temporary for converting constructor arguments, but
2877      not in converting the return value of a conversion operator.  */
2878   convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
2879   flags &= ~LOOKUP_NO_TEMP_BIND;
2880 
2881   if (ctors)
2882     {
2883       ctors = BASELINK_FUNCTIONS (ctors);
2884 
2885       first_arg = build_int_cst (build_pointer_type (totype), 0);
2886       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
2887 	  && !TYPE_HAS_LIST_CTOR (totype))
2888 	{
2889 	  args = ctor_to_vec (expr);
2890 	  /* We still allow more conversions within an init-list.  */
2891 	  flags = ((flags & ~LOOKUP_NO_CONVERSION)
2892 		   /* But not for the copy ctor.  */
2893 		   |LOOKUP_NO_COPY_CTOR_CONVERSION
2894 		   |LOOKUP_NO_NARROWING);
2895 	}
2896       else
2897 	args = make_tree_vector_single (expr);
2898 
2899       /* We should never try to call the abstract or base constructor
2900 	 from here.  */
2901       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2902 		  && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2903     }
2904   for (; ctors; ctors = OVL_NEXT (ctors))
2905     {
2906       tree ctor = OVL_CURRENT (ctors);
2907       if (DECL_NONCONVERTING_P (ctor)
2908 	  && !BRACE_ENCLOSED_INITIALIZER_P (expr))
2909 	continue;
2910 
2911       if (TREE_CODE (ctor) == TEMPLATE_DECL)
2912 	cand = add_template_candidate (&candidates, ctor, totype,
2913 				       NULL_TREE, first_arg, args, NULL_TREE,
2914 				       TYPE_BINFO (totype),
2915 				       TYPE_BINFO (totype),
2916 				       flags,
2917 				       DEDUCE_CALL);
2918       else
2919 	cand = add_function_candidate (&candidates, ctor, totype,
2920 				       first_arg, args, TYPE_BINFO (totype),
2921 				       TYPE_BINFO (totype),
2922 				       flags);
2923 
2924       if (cand)
2925 	{
2926 	  cand->second_conv = build_identity_conv (totype, NULL_TREE);
2927 
2928 	  /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2929 	     set, then this is copy-initialization.  In that case, "The
2930 	     result of the call is then used to direct-initialize the
2931 	     object that is the destination of the copy-initialization."
2932 	     [dcl.init]
2933 
2934 	     We represent this in the conversion sequence with an
2935 	     rvalue conversion, which means a constructor call.  */
2936 	  if (TREE_CODE (totype) != REFERENCE_TYPE
2937 	      && !(convflags & LOOKUP_NO_TEMP_BIND))
2938 	    cand->second_conv
2939 	      = build_conv (ck_rvalue, totype, cand->second_conv);
2940 	}
2941     }
2942 
2943   if (conv_fns)
2944     first_arg = build_this (expr);
2945 
2946   for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2947     {
2948       tree fns;
2949       tree conversion_path = TREE_PURPOSE (conv_fns);
2950 
2951       /* If we are called to convert to a reference type, we are trying to
2952 	 find an lvalue binding, so don't even consider temporaries.  If
2953 	 we don't find an lvalue binding, the caller will try again to
2954 	 look for a temporary binding.  */
2955       if (TREE_CODE (totype) == REFERENCE_TYPE)
2956 	convflags |= LOOKUP_NO_TEMP_BIND;
2957 
2958       for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2959 	{
2960 	  tree fn = OVL_CURRENT (fns);
2961 
2962 	  if (DECL_NONCONVERTING_P (fn)
2963 	      && (flags & LOOKUP_ONLYCONVERTING))
2964 	    continue;
2965 
2966 	  /* [over.match.funcs] For conversion functions, the function
2967 	     is considered to be a member of the class of the implicit
2968 	     object argument for the purpose of defining the type of
2969 	     the implicit object parameter.
2970 
2971 	     So we pass fromtype as CTYPE to add_*_candidate.  */
2972 
2973 	  if (TREE_CODE (fn) == TEMPLATE_DECL)
2974 	    cand = add_template_candidate (&candidates, fn, fromtype,
2975 					   NULL_TREE,
2976 					   first_arg, NULL, totype,
2977 					   TYPE_BINFO (fromtype),
2978 					   conversion_path,
2979 					   flags,
2980 					   DEDUCE_CONV);
2981 	  else
2982 	    cand = add_function_candidate (&candidates, fn, fromtype,
2983 					   first_arg, NULL,
2984 					   TYPE_BINFO (fromtype),
2985 					   conversion_path,
2986 					   flags);
2987 
2988 	  if (cand)
2989 	    {
2990 	      conversion *ics
2991 		= implicit_conversion (totype,
2992 				       TREE_TYPE (TREE_TYPE (cand->fn)),
2993 				       0,
2994 				       /*c_cast_p=*/false, convflags);
2995 
2996 	      /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
2997 		 copy-initialization.  In that case, "The result of the
2998 		 call is then used to direct-initialize the object that is
2999 		 the destination of the copy-initialization."  [dcl.init]
3000 
3001 		 We represent this in the conversion sequence with an
3002 		 rvalue conversion, which means a constructor call.  But
3003 		 don't add a second rvalue conversion if there's already
3004 		 one there.  Which there really shouldn't be, but it's
3005 		 harmless since we'd add it here anyway. */
3006 	      if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3007 		  && !(convflags & LOOKUP_NO_TEMP_BIND))
3008 		ics = build_conv (ck_rvalue, totype, ics);
3009 
3010 	      cand->second_conv = ics;
3011 
3012 	      if (!ics)
3013 		cand->viable = 0;
3014 	      else if (candidates->viable == 1 && ics->bad_p)
3015 		cand->viable = -1;
3016 	    }
3017 	}
3018     }
3019 
3020   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3021   if (!any_viable_p)
3022     return NULL;
3023 
3024   cand = tourney (candidates);
3025   if (cand == 0)
3026     {
3027       if (flags & LOOKUP_COMPLAIN)
3028 	{
3029 	  error ("conversion from %qT to %qT is ambiguous",
3030 		    fromtype, totype);
3031 	  print_z_candidates (candidates);
3032 	}
3033 
3034       cand = candidates;	/* any one will do */
3035       cand->second_conv = build_ambiguous_conv (totype, expr);
3036       cand->second_conv->user_conv_p = true;
3037       if (!any_strictly_viable (candidates))
3038 	cand->second_conv->bad_p = true;
3039       /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3040 	 ambiguous conversion is no worse than another user-defined
3041 	 conversion.  */
3042 
3043       return cand;
3044     }
3045 
3046   /* Build the user conversion sequence.  */
3047   conv = build_conv
3048     (ck_user,
3049      (DECL_CONSTRUCTOR_P (cand->fn)
3050       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3051      build_identity_conv (TREE_TYPE (expr), expr));
3052   conv->cand = cand;
3053 
3054   /* Remember that this was a list-initialization.  */
3055   if (flags & LOOKUP_NO_NARROWING)
3056     conv->check_narrowing = true;
3057 
3058   /* Combine it with the second conversion sequence.  */
3059   cand->second_conv = merge_conversion_sequences (conv,
3060 						  cand->second_conv);
3061 
3062   if (cand->viable == -1)
3063     cand->second_conv->bad_p = true;
3064 
3065   return cand;
3066 }
3067 
3068 tree
3069 build_user_type_conversion (tree totype, tree expr, int flags)
3070 {
3071   struct z_candidate *cand
3072     = build_user_type_conversion_1 (totype, expr, flags);
3073 
3074   if (cand)
3075     {
3076       if (cand->second_conv->kind == ck_ambig)
3077 	return error_mark_node;
3078       expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
3079       return convert_from_reference (expr);
3080     }
3081   return NULL_TREE;
3082 }
3083 
3084 /* Do any initial processing on the arguments to a function call.  */
3085 
3086 static VEC(tree,gc) *
3087 resolve_args (VEC(tree,gc) *args)
3088 {
3089   unsigned int ix;
3090   tree arg;
3091 
3092   for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
3093     {
3094       if (error_operand_p (arg))
3095 	return NULL;
3096       else if (VOID_TYPE_P (TREE_TYPE (arg)))
3097 	{
3098 	  error ("invalid use of void expression");
3099 	  return NULL;
3100 	}
3101       else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
3102 	return NULL;
3103     }
3104   return args;
3105 }
3106 
3107 /* Perform overload resolution on FN, which is called with the ARGS.
3108 
3109    Return the candidate function selected by overload resolution, or
3110    NULL if the event that overload resolution failed.  In the case
3111    that overload resolution fails, *CANDIDATES will be the set of
3112    candidates considered, and ANY_VIABLE_P will be set to true or
3113    false to indicate whether or not any of the candidates were
3114    viable.
3115 
3116    The ARGS should already have gone through RESOLVE_ARGS before this
3117    function is called.  */
3118 
3119 static struct z_candidate *
3120 perform_overload_resolution (tree fn,
3121 			     const VEC(tree,gc) *args,
3122 			     struct z_candidate **candidates,
3123 			     bool *any_viable_p)
3124 {
3125   struct z_candidate *cand;
3126   tree explicit_targs = NULL_TREE;
3127   int template_only = 0;
3128 
3129   *candidates = NULL;
3130   *any_viable_p = true;
3131 
3132   /* Check FN.  */
3133   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3134 	      || TREE_CODE (fn) == TEMPLATE_DECL
3135 	      || TREE_CODE (fn) == OVERLOAD
3136 	      || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3137 
3138   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3139     {
3140       explicit_targs = TREE_OPERAND (fn, 1);
3141       fn = TREE_OPERAND (fn, 0);
3142       template_only = 1;
3143     }
3144 
3145   /* Add the various candidate functions.  */
3146   add_candidates (fn, args, explicit_targs, template_only,
3147 		  /*conversion_path=*/NULL_TREE,
3148 		  /*access_path=*/NULL_TREE,
3149 		  LOOKUP_NORMAL,
3150 		  candidates);
3151 
3152   *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3153   if (!*any_viable_p)
3154     return NULL;
3155 
3156   cand = tourney (*candidates);
3157   return cand;
3158 }
3159 
3160 /* Return an expression for a call to FN (a namespace-scope function,
3161    or a static member function) with the ARGS.  This may change
3162    ARGS.  */
3163 
3164 tree
3165 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p,
3166 			 tsubst_flags_t complain)
3167 {
3168   struct z_candidate *candidates, *cand;
3169   bool any_viable_p;
3170   void *p;
3171   tree result;
3172 
3173   if (args != NULL && *args != NULL)
3174     {
3175       *args = resolve_args (*args);
3176       if (*args == NULL)
3177 	return error_mark_node;
3178     }
3179 
3180   /* If this function was found without using argument dependent
3181      lookup, then we want to ignore any undeclared friend
3182      functions.  */
3183   if (!koenig_p)
3184     {
3185       tree orig_fn = fn;
3186 
3187       fn = remove_hidden_names (fn);
3188       if (!fn)
3189 	{
3190 	  if (complain & tf_error)
3191 	    error ("no matching function for call to %<%D(%A)%>",
3192 		   DECL_NAME (OVL_CURRENT (orig_fn)),
3193 		   build_tree_list_vec (*args));
3194 	  return error_mark_node;
3195 	}
3196     }
3197 
3198   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3199   p = conversion_obstack_alloc (0);
3200 
3201   cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p);
3202 
3203   if (!cand)
3204     {
3205       if (complain & tf_error)
3206 	{
3207 	  if (!any_viable_p && candidates && ! candidates->next)
3208 	    return cp_build_function_call_vec (candidates->fn, args, complain);
3209 	  if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3210 	    fn = TREE_OPERAND (fn, 0);
3211 	  if (!any_viable_p)
3212 	    error ("no matching function for call to %<%D(%A)%>",
3213 		   DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3214 	  else
3215 	    error ("call of overloaded %<%D(%A)%> is ambiguous",
3216 		   DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3217 	  if (candidates)
3218 	    print_z_candidates (candidates);
3219 	}
3220       result = error_mark_node;
3221     }
3222   else
3223     result = build_over_call (cand, LOOKUP_NORMAL, complain);
3224 
3225   /* Free all the conversions we allocated.  */
3226   obstack_free (&conversion_obstack, p);
3227 
3228   return result;
3229 }
3230 
3231 /* Build a call to a global operator new.  FNNAME is the name of the
3232    operator (either "operator new" or "operator new[]") and ARGS are
3233    the arguments provided.  This may change ARGS.  *SIZE points to the
3234    total number of bytes required by the allocation, and is updated if
3235    that is changed here.  *COOKIE_SIZE is non-NULL if a cookie should
3236    be used.  If this function determines that no cookie should be
3237    used, after all, *COOKIE_SIZE is set to NULL_TREE.  If FN is
3238    non-NULL, it will be set, upon return, to the allocation function
3239    called.  */
3240 
3241 tree
3242 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3243 			 tree *size, tree *cookie_size,
3244 			 tree *fn)
3245 {
3246   tree fns;
3247   struct z_candidate *candidates;
3248   struct z_candidate *cand;
3249   bool any_viable_p;
3250 
3251   if (fn)
3252     *fn = NULL_TREE;
3253   VEC_safe_insert (tree, gc, *args, 0, *size);
3254   *args = resolve_args (*args);
3255   if (*args == NULL)
3256     return error_mark_node;
3257 
3258   /* Based on:
3259 
3260        [expr.new]
3261 
3262        If this lookup fails to find the name, or if the allocated type
3263        is not a class type, the allocation function's name is looked
3264        up in the global scope.
3265 
3266      we disregard block-scope declarations of "operator new".  */
3267   fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3268 
3269   /* Figure out what function is being called.  */
3270   cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p);
3271 
3272   /* If no suitable function could be found, issue an error message
3273      and give up.  */
3274   if (!cand)
3275     {
3276       if (!any_viable_p)
3277 	error ("no matching function for call to %<%D(%A)%>",
3278 	       DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3279       else
3280 	error ("call of overloaded %<%D(%A)%> is ambiguous",
3281 	       DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3282       if (candidates)
3283 	print_z_candidates (candidates);
3284       return error_mark_node;
3285     }
3286 
3287    /* If a cookie is required, add some extra space.  Whether
3288       or not a cookie is required cannot be determined until
3289       after we know which function was called.  */
3290    if (*cookie_size)
3291      {
3292        bool use_cookie = true;
3293        if (!abi_version_at_least (2))
3294 	 {
3295 	   /* In G++ 3.2, the check was implemented incorrectly; it
3296 	      looked at the placement expression, rather than the
3297 	      type of the function.  */
3298 	   if (VEC_length (tree, *args) == 2
3299 	       && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
3300 			       ptr_type_node))
3301 	     use_cookie = false;
3302 	 }
3303        else
3304 	 {
3305 	   tree arg_types;
3306 
3307 	   arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3308 	   /* Skip the size_t parameter.  */
3309 	   arg_types = TREE_CHAIN (arg_types);
3310 	   /* Check the remaining parameters (if any).  */
3311 	   if (arg_types
3312 	       && TREE_CHAIN (arg_types) == void_list_node
3313 	       && same_type_p (TREE_VALUE (arg_types),
3314 			       ptr_type_node))
3315 	     use_cookie = false;
3316 	 }
3317        /* If we need a cookie, adjust the number of bytes allocated.  */
3318        if (use_cookie)
3319 	 {
3320 	   /* Update the total size.  */
3321 	   *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3322 	   /* Update the argument list to reflect the adjusted size.  */
3323 	   VEC_replace (tree, *args, 0, *size);
3324 	 }
3325        else
3326 	 *cookie_size = NULL_TREE;
3327      }
3328 
3329    /* Tell our caller which function we decided to call.  */
3330    if (fn)
3331      *fn = cand->fn;
3332 
3333    /* Build the CALL_EXPR.  */
3334    return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
3335 }
3336 
3337 /* Build a new call to operator().  This may change ARGS.  */
3338 
3339 tree
3340 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
3341 {
3342   struct z_candidate *candidates = 0, *cand;
3343   tree fns, convs, first_mem_arg = NULL_TREE;
3344   tree type = TREE_TYPE (obj);
3345   bool any_viable_p;
3346   tree result = NULL_TREE;
3347   void *p;
3348 
3349   if (error_operand_p (obj))
3350     return error_mark_node;
3351 
3352   obj = prep_operand (obj);
3353 
3354   if (TYPE_PTRMEMFUNC_P (type))
3355     {
3356       if (complain & tf_error)
3357         /* It's no good looking for an overloaded operator() on a
3358            pointer-to-member-function.  */
3359         error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3360       return error_mark_node;
3361     }
3362 
3363   if (TYPE_BINFO (type))
3364     {
3365       fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3366       if (fns == error_mark_node)
3367 	return error_mark_node;
3368     }
3369   else
3370     fns = NULL_TREE;
3371 
3372   if (args != NULL && *args != NULL)
3373     {
3374       *args = resolve_args (*args);
3375       if (*args == NULL)
3376 	return error_mark_node;
3377     }
3378 
3379   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3380   p = conversion_obstack_alloc (0);
3381 
3382   if (fns)
3383     {
3384       tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3385       first_mem_arg = build_this (obj);
3386 
3387       for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3388 	{
3389 	  tree fn = OVL_CURRENT (fns);
3390 
3391 	  if (TREE_CODE (fn) == TEMPLATE_DECL)
3392 	    add_template_candidate (&candidates, fn, base, NULL_TREE,
3393 				    first_mem_arg, *args, NULL_TREE,
3394 				    TYPE_BINFO (type),
3395 				    TYPE_BINFO (type),
3396 				    LOOKUP_NORMAL, DEDUCE_CALL);
3397 	  else
3398 	    add_function_candidate
3399 	      (&candidates, fn, base, first_mem_arg, *args, TYPE_BINFO (type),
3400 	       TYPE_BINFO (type), LOOKUP_NORMAL);
3401 	}
3402     }
3403 
3404   convs = lookup_conversions (type);
3405 
3406   for (; convs; convs = TREE_CHAIN (convs))
3407     {
3408       tree fns = TREE_VALUE (convs);
3409       tree totype = TREE_TYPE (convs);
3410 
3411       if ((TREE_CODE (totype) == POINTER_TYPE
3412 	   && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3413 	  || (TREE_CODE (totype) == REFERENCE_TYPE
3414 	      && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3415 	  || (TREE_CODE (totype) == REFERENCE_TYPE
3416 	      && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3417 	      && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3418 	for (; fns; fns = OVL_NEXT (fns))
3419 	  {
3420 	    tree fn = OVL_CURRENT (fns);
3421 
3422 	    if (DECL_NONCONVERTING_P (fn))
3423 	      continue;
3424 
3425 	    if (TREE_CODE (fn) == TEMPLATE_DECL)
3426 	      add_template_conv_candidate
3427 		(&candidates, fn, obj, NULL_TREE, *args, totype,
3428 		 /*access_path=*/NULL_TREE,
3429 		 /*conversion_path=*/NULL_TREE);
3430 	    else
3431 	      add_conv_candidate (&candidates, fn, obj, NULL_TREE,
3432 				  *args, /*conversion_path=*/NULL_TREE,
3433 				  /*access_path=*/NULL_TREE);
3434 	  }
3435     }
3436 
3437   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3438   if (!any_viable_p)
3439     {
3440       if (complain & tf_error)
3441         {
3442           error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
3443 		 build_tree_list_vec (*args));
3444           print_z_candidates (candidates);
3445         }
3446       result = error_mark_node;
3447     }
3448   else
3449     {
3450       cand = tourney (candidates);
3451       if (cand == 0)
3452 	{
3453           if (complain & tf_error)
3454             {
3455               error ("call of %<(%T) (%A)%> is ambiguous",
3456                      TREE_TYPE (obj), build_tree_list_vec (*args));
3457               print_z_candidates (candidates);
3458             }
3459 	  result = error_mark_node;
3460 	}
3461       /* Since cand->fn will be a type, not a function, for a conversion
3462 	 function, we must be careful not to unconditionally look at
3463 	 DECL_NAME here.  */
3464       else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3465 	       && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3466 	result = build_over_call (cand, LOOKUP_NORMAL, complain);
3467       else
3468 	{
3469 	  obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
3470 					   complain);
3471 	  obj = convert_from_reference (obj);
3472 	  result = cp_build_function_call_vec (obj, args, complain);
3473 	}
3474     }
3475 
3476   /* Free all the conversions we allocated.  */
3477   obstack_free (&conversion_obstack, p);
3478 
3479   return result;
3480 }
3481 
3482 static void
3483 op_error (enum tree_code code, enum tree_code code2,
3484 	  tree arg1, tree arg2, tree arg3, bool match)
3485 {
3486   const char *opname;
3487 
3488   if (code == MODIFY_EXPR)
3489     opname = assignment_operator_name_info[code2].name;
3490   else
3491     opname = operator_name_info[code].name;
3492 
3493   switch (code)
3494     {
3495     case COND_EXPR:
3496       if (match)
3497         error ("ambiguous overload for ternary %<operator?:%> "
3498                "in %<%E ? %E : %E%>", arg1, arg2, arg3);
3499       else
3500         error ("no match for ternary %<operator?:%> "
3501                "in %<%E ? %E : %E%>", arg1, arg2, arg3);
3502       break;
3503 
3504     case POSTINCREMENT_EXPR:
3505     case POSTDECREMENT_EXPR:
3506       if (match)
3507         error ("ambiguous overload for %<operator%s%> in %<%E%s%>",
3508                opname, arg1, opname);
3509       else
3510         error ("no match for %<operator%s%> in %<%E%s%>",
3511                opname, arg1, opname);
3512       break;
3513 
3514     case ARRAY_REF:
3515       if (match)
3516         error ("ambiguous overload for %<operator[]%> in %<%E[%E]%>",
3517                arg1, arg2);
3518       else
3519         error ("no match for %<operator[]%> in %<%E[%E]%>",
3520                arg1, arg2);
3521       break;
3522 
3523     case REALPART_EXPR:
3524     case IMAGPART_EXPR:
3525       if (match)
3526         error ("ambiguous overload for %qs in %<%s %E%>",
3527                opname, opname, arg1);
3528       else
3529         error ("no match for %qs in %<%s %E%>",
3530                opname, opname, arg1);
3531       break;
3532 
3533     default:
3534       if (arg2)
3535         if (match)
3536           error ("ambiguous overload for %<operator%s%> in %<%E %s %E%>",
3537                   opname, arg1, opname, arg2);
3538         else
3539           error ("no match for %<operator%s%> in %<%E %s %E%>",
3540                  opname, arg1, opname, arg2);
3541       else
3542         if (match)
3543           error ("ambiguous overload for %<operator%s%> in %<%s%E%>",
3544                  opname, opname, arg1);
3545         else
3546           error ("no match for %<operator%s%> in %<%s%E%>",
3547                  opname, opname, arg1);
3548       break;
3549     }
3550 }
3551 
3552 /* Return the implicit conversion sequence that could be used to
3553    convert E1 to E2 in [expr.cond].  */
3554 
3555 static conversion *
3556 conditional_conversion (tree e1, tree e2)
3557 {
3558   tree t1 = non_reference (TREE_TYPE (e1));
3559   tree t2 = non_reference (TREE_TYPE (e2));
3560   conversion *conv;
3561   bool good_base;
3562 
3563   /* [expr.cond]
3564 
3565      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3566      implicitly converted (clause _conv_) to the type "reference to
3567      T2", subject to the constraint that in the conversion the
3568      reference must bind directly (_dcl.init.ref_) to E1.  */
3569   if (real_lvalue_p (e2))
3570     {
3571       conv = implicit_conversion (build_reference_type (t2),
3572 				  t1,
3573 				  e1,
3574 				  /*c_cast_p=*/false,
3575 				  LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING);
3576       if (conv)
3577 	return conv;
3578     }
3579 
3580   /* [expr.cond]
3581 
3582      If E1 and E2 have class type, and the underlying class types are
3583      the same or one is a base class of the other: E1 can be converted
3584      to match E2 if the class of T2 is the same type as, or a base
3585      class of, the class of T1, and the cv-qualification of T2 is the
3586      same cv-qualification as, or a greater cv-qualification than, the
3587      cv-qualification of T1.  If the conversion is applied, E1 is
3588      changed to an rvalue of type T2 that still refers to the original
3589      source class object (or the appropriate subobject thereof).  */
3590   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3591       && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3592     {
3593       if (good_base && at_least_as_qualified_p (t2, t1))
3594 	{
3595 	  conv = build_identity_conv (t1, e1);
3596 	  if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3597 			    TYPE_MAIN_VARIANT (t2)))
3598 	    conv = build_conv (ck_base, t2, conv);
3599 	  else
3600 	    conv = build_conv (ck_rvalue, t2, conv);
3601 	  return conv;
3602 	}
3603       else
3604 	return NULL;
3605     }
3606   else
3607     /* [expr.cond]
3608 
3609        Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3610        converted to the type that expression E2 would have if E2 were
3611        converted to an rvalue (or the type it has, if E2 is an rvalue).  */
3612     return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3613 				LOOKUP_IMPLICIT);
3614 }
3615 
3616 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
3617    arguments to the conditional expression.  */
3618 
3619 tree
3620 build_conditional_expr (tree arg1, tree arg2, tree arg3,
3621                         tsubst_flags_t complain)
3622 {
3623   tree arg2_type;
3624   tree arg3_type;
3625   tree result = NULL_TREE;
3626   tree result_save;
3627   tree result_type = NULL_TREE;
3628   bool lvalue_p = true;
3629   struct z_candidate *candidates = 0;
3630   struct z_candidate *cand;
3631   void *p;
3632 
3633   /* As a G++ extension, the second argument to the conditional can be
3634      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
3635      c'.)  If the second operand is omitted, make sure it is
3636      calculated only once.  */
3637   if (!arg2)
3638     {
3639       if (complain & tf_error)
3640 	pedwarn (input_location, OPT_pedantic,
3641 		 "ISO C++ forbids omitting the middle term of a ?: expression");
3642 
3643       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
3644       if (real_lvalue_p (arg1))
3645 	arg2 = arg1 = stabilize_reference (arg1);
3646       else
3647 	arg2 = arg1 = save_expr (arg1);
3648     }
3649 
3650   /* [expr.cond]
3651 
3652      The first expression is implicitly converted to bool (clause
3653      _conv_).  */
3654   arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
3655 					    LOOKUP_NORMAL);
3656 
3657   /* If something has already gone wrong, just pass that fact up the
3658      tree.  */
3659   if (error_operand_p (arg1)
3660       || error_operand_p (arg2)
3661       || error_operand_p (arg3))
3662     return error_mark_node;
3663 
3664   /* [expr.cond]
3665 
3666      If either the second or the third operand has type (possibly
3667      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3668      array-to-pointer (_conv.array_), and function-to-pointer
3669      (_conv.func_) standard conversions are performed on the second
3670      and third operands.  */
3671   arg2_type = unlowered_expr_type (arg2);
3672   arg3_type = unlowered_expr_type (arg3);
3673   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3674     {
3675       /* Do the conversions.  We don't these for `void' type arguments
3676 	 since it can't have any effect and since decay_conversion
3677 	 does not handle that case gracefully.  */
3678       if (!VOID_TYPE_P (arg2_type))
3679 	arg2 = decay_conversion (arg2);
3680       if (!VOID_TYPE_P (arg3_type))
3681 	arg3 = decay_conversion (arg3);
3682       arg2_type = TREE_TYPE (arg2);
3683       arg3_type = TREE_TYPE (arg3);
3684 
3685       /* [expr.cond]
3686 
3687 	 One of the following shall hold:
3688 
3689 	 --The second or the third operand (but not both) is a
3690 	   throw-expression (_except.throw_); the result is of the
3691 	   type of the other and is an rvalue.
3692 
3693 	 --Both the second and the third operands have type void; the
3694 	   result is of type void and is an rvalue.
3695 
3696 	 We must avoid calling force_rvalue for expressions of type
3697 	 "void" because it will complain that their value is being
3698 	 used.  */
3699       if (TREE_CODE (arg2) == THROW_EXPR
3700 	  && TREE_CODE (arg3) != THROW_EXPR)
3701 	{
3702 	  if (!VOID_TYPE_P (arg3_type))
3703 	    arg3 = force_rvalue (arg3);
3704 	  arg3_type = TREE_TYPE (arg3);
3705 	  result_type = arg3_type;
3706 	}
3707       else if (TREE_CODE (arg2) != THROW_EXPR
3708 	       && TREE_CODE (arg3) == THROW_EXPR)
3709 	{
3710 	  if (!VOID_TYPE_P (arg2_type))
3711 	    arg2 = force_rvalue (arg2);
3712 	  arg2_type = TREE_TYPE (arg2);
3713 	  result_type = arg2_type;
3714 	}
3715       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3716 	result_type = void_type_node;
3717       else
3718 	{
3719           if (complain & tf_error)
3720             {
3721               if (VOID_TYPE_P (arg2_type))
3722                 error ("second operand to the conditional operator "
3723                        "is of type %<void%>, "
3724                        "but the third operand is neither a throw-expression "
3725                        "nor of type %<void%>");
3726               else
3727                 error ("third operand to the conditional operator "
3728                        "is of type %<void%>, "
3729                        "but the second operand is neither a throw-expression "
3730                        "nor of type %<void%>");
3731             }
3732 	  return error_mark_node;
3733 	}
3734 
3735       lvalue_p = false;
3736       goto valid_operands;
3737     }
3738   /* [expr.cond]
3739 
3740      Otherwise, if the second and third operand have different types,
3741      and either has (possibly cv-qualified) class type, an attempt is
3742      made to convert each of those operands to the type of the other.  */
3743   else if (!same_type_p (arg2_type, arg3_type)
3744 	   && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3745     {
3746       conversion *conv2;
3747       conversion *conv3;
3748 
3749       /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3750       p = conversion_obstack_alloc (0);
3751 
3752       conv2 = conditional_conversion (arg2, arg3);
3753       conv3 = conditional_conversion (arg3, arg2);
3754 
3755       /* [expr.cond]
3756 
3757 	 If both can be converted, or one can be converted but the
3758 	 conversion is ambiguous, the program is ill-formed.  If
3759 	 neither can be converted, the operands are left unchanged and
3760 	 further checking is performed as described below.  If exactly
3761 	 one conversion is possible, that conversion is applied to the
3762 	 chosen operand and the converted operand is used in place of
3763 	 the original operand for the remainder of this section.  */
3764       if ((conv2 && !conv2->bad_p
3765 	   && conv3 && !conv3->bad_p)
3766 	  || (conv2 && conv2->kind == ck_ambig)
3767 	  || (conv3 && conv3->kind == ck_ambig))
3768 	{
3769 	  error ("operands to ?: have different types %qT and %qT",
3770 		 arg2_type, arg3_type);
3771 	  result = error_mark_node;
3772 	}
3773       else if (conv2 && (!conv2->bad_p || !conv3))
3774 	{
3775 	  arg2 = convert_like (conv2, arg2, complain);
3776 	  arg2 = convert_from_reference (arg2);
3777 	  arg2_type = TREE_TYPE (arg2);
3778 	  /* Even if CONV2 is a valid conversion, the result of the
3779 	     conversion may be invalid.  For example, if ARG3 has type
3780 	     "volatile X", and X does not have a copy constructor
3781 	     accepting a "volatile X&", then even if ARG2 can be
3782 	     converted to X, the conversion will fail.  */
3783 	  if (error_operand_p (arg2))
3784 	    result = error_mark_node;
3785 	}
3786       else if (conv3 && (!conv3->bad_p || !conv2))
3787 	{
3788 	  arg3 = convert_like (conv3, arg3, complain);
3789 	  arg3 = convert_from_reference (arg3);
3790 	  arg3_type = TREE_TYPE (arg3);
3791 	  if (error_operand_p (arg3))
3792 	    result = error_mark_node;
3793 	}
3794 
3795       /* Free all the conversions we allocated.  */
3796       obstack_free (&conversion_obstack, p);
3797 
3798       if (result)
3799 	return result;
3800 
3801       /* If, after the conversion, both operands have class type,
3802 	 treat the cv-qualification of both operands as if it were the
3803 	 union of the cv-qualification of the operands.
3804 
3805 	 The standard is not clear about what to do in this
3806 	 circumstance.  For example, if the first operand has type
3807 	 "const X" and the second operand has a user-defined
3808 	 conversion to "volatile X", what is the type of the second
3809 	 operand after this step?  Making it be "const X" (matching
3810 	 the first operand) seems wrong, as that discards the
3811 	 qualification without actually performing a copy.  Leaving it
3812 	 as "volatile X" seems wrong as that will result in the
3813 	 conditional expression failing altogether, even though,
3814 	 according to this step, the one operand could be converted to
3815 	 the type of the other.  */
3816       if ((conv2 || conv3)
3817 	  && CLASS_TYPE_P (arg2_type)
3818 	  && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3819 	arg2_type = arg3_type =
3820 	  cp_build_qualified_type (arg2_type,
3821 				   TYPE_QUALS (arg2_type)
3822 				   | TYPE_QUALS (arg3_type));
3823     }
3824 
3825   /* [expr.cond]
3826 
3827      If the second and third operands are lvalues and have the same
3828      type, the result is of that type and is an lvalue.  */
3829   if (real_lvalue_p (arg2)
3830       && real_lvalue_p (arg3)
3831       && same_type_p (arg2_type, arg3_type))
3832     {
3833       result_type = arg2_type;
3834       goto valid_operands;
3835     }
3836 
3837   /* [expr.cond]
3838 
3839      Otherwise, the result is an rvalue.  If the second and third
3840      operand do not have the same type, and either has (possibly
3841      cv-qualified) class type, overload resolution is used to
3842      determine the conversions (if any) to be applied to the operands
3843      (_over.match.oper_, _over.built_).  */
3844   lvalue_p = false;
3845   if (!same_type_p (arg2_type, arg3_type)
3846       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3847     {
3848       tree args[3];
3849       conversion *conv;
3850       bool any_viable_p;
3851 
3852       /* Rearrange the arguments so that add_builtin_candidate only has
3853 	 to know about two args.  In build_builtin_candidate, the
3854 	 arguments are unscrambled.  */
3855       args[0] = arg2;
3856       args[1] = arg3;
3857       args[2] = arg1;
3858       add_builtin_candidates (&candidates,
3859 			      COND_EXPR,
3860 			      NOP_EXPR,
3861 			      ansi_opname (COND_EXPR),
3862 			      args,
3863 			      LOOKUP_NORMAL);
3864 
3865       /* [expr.cond]
3866 
3867 	 If the overload resolution fails, the program is
3868 	 ill-formed.  */
3869       candidates = splice_viable (candidates, pedantic, &any_viable_p);
3870       if (!any_viable_p)
3871 	{
3872           if (complain & tf_error)
3873             {
3874               op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
3875               print_z_candidates (candidates);
3876             }
3877 	  return error_mark_node;
3878 	}
3879       cand = tourney (candidates);
3880       if (!cand)
3881 	{
3882           if (complain & tf_error)
3883             {
3884               op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
3885               print_z_candidates (candidates);
3886             }
3887 	  return error_mark_node;
3888 	}
3889 
3890       /* [expr.cond]
3891 
3892 	 Otherwise, the conversions thus determined are applied, and
3893 	 the converted operands are used in place of the original
3894 	 operands for the remainder of this section.  */
3895       conv = cand->convs[0];
3896       arg1 = convert_like (conv, arg1, complain);
3897       conv = cand->convs[1];
3898       arg2 = convert_like (conv, arg2, complain);
3899       arg2_type = TREE_TYPE (arg2);
3900       conv = cand->convs[2];
3901       arg3 = convert_like (conv, arg3, complain);
3902       arg3_type = TREE_TYPE (arg3);
3903     }
3904 
3905   /* [expr.cond]
3906 
3907      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3908      and function-to-pointer (_conv.func_) standard conversions are
3909      performed on the second and third operands.
3910 
3911      We need to force the lvalue-to-rvalue conversion here for class types,
3912      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3913      that isn't wrapped with a TARGET_EXPR plays havoc with exception
3914      regions.  */
3915 
3916   arg2 = force_rvalue (arg2);
3917   if (!CLASS_TYPE_P (arg2_type))
3918     arg2_type = TREE_TYPE (arg2);
3919 
3920   arg3 = force_rvalue (arg3);
3921   if (!CLASS_TYPE_P (arg3_type))
3922     arg3_type = TREE_TYPE (arg3);
3923 
3924   if (arg2 == error_mark_node || arg3 == error_mark_node)
3925     return error_mark_node;
3926 
3927   /* [expr.cond]
3928 
3929      After those conversions, one of the following shall hold:
3930 
3931      --The second and third operands have the same type; the result  is  of
3932        that type.  */
3933   if (same_type_p (arg2_type, arg3_type))
3934     result_type = arg2_type;
3935   /* [expr.cond]
3936 
3937      --The second and third operands have arithmetic or enumeration
3938        type; the usual arithmetic conversions are performed to bring
3939        them to a common type, and the result is of that type.  */
3940   else if ((ARITHMETIC_TYPE_P (arg2_type)
3941 	    || UNSCOPED_ENUM_P (arg2_type))
3942 	   && (ARITHMETIC_TYPE_P (arg3_type)
3943 	       || UNSCOPED_ENUM_P (arg3_type)))
3944     {
3945       /* In this case, there is always a common type.  */
3946       result_type = type_after_usual_arithmetic_conversions (arg2_type,
3947 							     arg3_type);
3948 
3949       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3950 	  && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3951         {
3952           if (complain & tf_warning)
3953             warning (0,
3954                      "enumeral mismatch in conditional expression: %qT vs %qT",
3955                      arg2_type, arg3_type);
3956         }
3957       else if (extra_warnings
3958 	       && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3959 		    && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3960 		   || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3961 		       && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3962         {
3963           if (complain & tf_warning)
3964             warning (0,
3965                      "enumeral and non-enumeral type in conditional expression");
3966         }
3967 
3968       arg2 = perform_implicit_conversion (result_type, arg2, complain);
3969       arg3 = perform_implicit_conversion (result_type, arg3, complain);
3970     }
3971   /* [expr.cond]
3972 
3973      --The second and third operands have pointer type, or one has
3974        pointer type and the other is a null pointer constant; pointer
3975        conversions (_conv.ptr_) and qualification conversions
3976        (_conv.qual_) are performed to bring them to their composite
3977        pointer type (_expr.rel_).  The result is of the composite
3978        pointer type.
3979 
3980      --The second and third operands have pointer to member type, or
3981        one has pointer to member type and the other is a null pointer
3982        constant; pointer to member conversions (_conv.mem_) and
3983        qualification conversions (_conv.qual_) are performed to bring
3984        them to a common type, whose cv-qualification shall match the
3985        cv-qualification of either the second or the third operand.
3986        The result is of the common type.  */
3987   else if ((null_ptr_cst_p (arg2)
3988 	    && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3989 	   || (null_ptr_cst_p (arg3)
3990 	       && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3991 	   || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3992 	   || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3993 	   || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3994     {
3995       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3996 					    arg3, CPO_CONDITIONAL_EXPR,
3997 					    complain);
3998       if (result_type == error_mark_node)
3999 	return error_mark_node;
4000       arg2 = perform_implicit_conversion (result_type, arg2, complain);
4001       arg3 = perform_implicit_conversion (result_type, arg3, complain);
4002     }
4003 
4004   if (!result_type)
4005     {
4006       if (complain & tf_error)
4007         error ("operands to ?: have different types %qT and %qT",
4008                arg2_type, arg3_type);
4009       return error_mark_node;
4010     }
4011 
4012  valid_operands:
4013   result_save = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4014   result = fold_if_not_in_template (result_save);
4015 
4016   if (cp_unevaluated_operand && TREE_CODE (result) == CALL_EXPR)
4017     /* Avoid folding to a CALL_EXPR within decltype (c++/42013).  */
4018     result = result_save;
4019 
4020   /* We can't use result_type below, as fold might have returned a
4021      throw_expr.  */
4022 
4023   if (!lvalue_p)
4024     {
4025       /* Expand both sides into the same slot, hopefully the target of
4026 	 the ?: expression.  We used to check for TARGET_EXPRs here,
4027 	 but now we sometimes wrap them in NOP_EXPRs so the test would
4028 	 fail.  */
4029       if (CLASS_TYPE_P (TREE_TYPE (result)))
4030 	result = get_target_expr (result);
4031       /* If this expression is an rvalue, but might be mistaken for an
4032 	 lvalue, we must add a NON_LVALUE_EXPR.  */
4033       result = rvalue (result);
4034     }
4035 
4036   return result;
4037 }
4038 
4039 /* OPERAND is an operand to an expression.  Perform necessary steps
4040    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
4041    returned.  */
4042 
4043 static tree
4044 prep_operand (tree operand)
4045 {
4046   if (operand)
4047     {
4048       if (CLASS_TYPE_P (TREE_TYPE (operand))
4049 	  && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4050 	/* Make sure the template type is instantiated now.  */
4051 	instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4052     }
4053 
4054   return operand;
4055 }
4056 
4057 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4058    OVERLOAD) to the CANDIDATES, returning an updated list of
4059    CANDIDATES.  The ARGS are the arguments provided to the call,
4060    without any implicit object parameter.  This may change ARGS.  The
4061    EXPLICIT_TARGS are explicit template arguments provided.
4062    TEMPLATE_ONLY is true if only template functions should be
4063    considered.  CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4064    add_function_candidate.  */
4065 
4066 static void
4067 add_candidates (tree fns, const VEC(tree,gc) *args,
4068 		tree explicit_targs, bool template_only,
4069 		tree conversion_path, tree access_path,
4070 		int flags,
4071 		struct z_candidate **candidates)
4072 {
4073   tree ctype;
4074   VEC(tree,gc) *non_static_args;
4075   tree first_arg;
4076 
4077   ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4078   /* Delay creating the implicit this parameter until it is needed.  */
4079   non_static_args = NULL;
4080   first_arg = NULL_TREE;
4081 
4082   while (fns)
4083     {
4084       tree fn;
4085       tree fn_first_arg;
4086       const VEC(tree,gc) *fn_args;
4087 
4088       fn = OVL_CURRENT (fns);
4089       /* Figure out which set of arguments to use.  */
4090       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4091 	{
4092 	  /* If this function is a non-static member, prepend the implicit
4093 	     object parameter.  */
4094 	  if (non_static_args == NULL)
4095 	    {
4096 	      unsigned int ix;
4097 	      tree arg;
4098 
4099 	      non_static_args = VEC_alloc (tree, gc,
4100 					   VEC_length (tree, args) - 1);
4101 	      for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4102 		VEC_quick_push (tree, non_static_args, arg);
4103 	    }
4104 	  if (first_arg == NULL_TREE)
4105 	    first_arg = build_this (VEC_index (tree, args, 0));
4106 	  fn_first_arg = first_arg;
4107 	  fn_args = non_static_args;
4108 	}
4109       else
4110 	{
4111 	  /* Otherwise, just use the list of arguments provided.  */
4112 	  fn_first_arg = NULL_TREE;
4113 	  fn_args = args;
4114 	}
4115 
4116       if (TREE_CODE (fn) == TEMPLATE_DECL)
4117 	add_template_candidate (candidates,
4118 				fn,
4119 				ctype,
4120 				explicit_targs,
4121 				fn_first_arg,
4122 				fn_args,
4123 				NULL_TREE,
4124 				access_path,
4125 				conversion_path,
4126 				flags,
4127 				DEDUCE_CALL);
4128       else if (!template_only)
4129 	add_function_candidate (candidates,
4130 				fn,
4131 				ctype,
4132 				fn_first_arg,
4133 				fn_args,
4134 				access_path,
4135 				conversion_path,
4136 				flags);
4137       fns = OVL_NEXT (fns);
4138     }
4139 }
4140 
4141 /* Even unsigned enum types promote to signed int.  We don't want to
4142    issue -Wsign-compare warnings for this case.  Here ORIG_ARG is the
4143    original argument and ARG is the argument after any conversions
4144    have been applied.  We set TREE_NO_WARNING if we have added a cast
4145    from an unsigned enum type to a signed integer type.  */
4146 
4147 static void
4148 avoid_sign_compare_warnings (tree orig_arg, tree arg)
4149 {
4150   if (orig_arg != NULL_TREE
4151       && arg != NULL_TREE
4152       && orig_arg != arg
4153       && TREE_CODE (TREE_TYPE (orig_arg)) == ENUMERAL_TYPE
4154       && TYPE_UNSIGNED (TREE_TYPE (orig_arg))
4155       && INTEGRAL_TYPE_P (TREE_TYPE (arg))
4156       && !TYPE_UNSIGNED (TREE_TYPE (arg)))
4157     TREE_NO_WARNING (arg) = 1;
4158 }
4159 
4160 tree
4161 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
4162 	      bool *overloaded_p, tsubst_flags_t complain)
4163 {
4164   tree orig_arg1 = arg1;
4165   tree orig_arg2 = arg2;
4166   tree orig_arg3 = arg3;
4167   struct z_candidate *candidates = 0, *cand;
4168   VEC(tree,gc) *arglist;
4169   tree fnname;
4170   tree args[3];
4171   tree result = NULL_TREE;
4172   bool result_valid_p = false;
4173   enum tree_code code2 = NOP_EXPR;
4174   enum tree_code code_orig_arg1 = ERROR_MARK;
4175   enum tree_code code_orig_arg2 = ERROR_MARK;
4176   conversion *conv;
4177   void *p;
4178   bool strict_p;
4179   bool any_viable_p;
4180 
4181   if (error_operand_p (arg1)
4182       || error_operand_p (arg2)
4183       || error_operand_p (arg3))
4184     return error_mark_node;
4185 
4186   if (code == MODIFY_EXPR)
4187     {
4188       code2 = TREE_CODE (arg3);
4189       arg3 = NULL_TREE;
4190       fnname = ansi_assopname (code2);
4191     }
4192   else
4193     fnname = ansi_opname (code);
4194 
4195   arg1 = prep_operand (arg1);
4196 
4197   switch (code)
4198     {
4199     case NEW_EXPR:
4200     case VEC_NEW_EXPR:
4201     case VEC_DELETE_EXPR:
4202     case DELETE_EXPR:
4203       /* Use build_op_new_call and build_op_delete_call instead.  */
4204       gcc_unreachable ();
4205 
4206     case CALL_EXPR:
4207       /* Use build_op_call instead.  */
4208       gcc_unreachable ();
4209 
4210     case TRUTH_ORIF_EXPR:
4211     case TRUTH_ANDIF_EXPR:
4212     case TRUTH_AND_EXPR:
4213     case TRUTH_OR_EXPR:
4214       /* These are saved for the sake of warn_logical_operator.  */
4215       code_orig_arg1 = TREE_CODE (arg1);
4216       code_orig_arg2 = TREE_CODE (arg2);
4217 
4218     default:
4219       break;
4220     }
4221 
4222   arg2 = prep_operand (arg2);
4223   arg3 = prep_operand (arg3);
4224 
4225   if (code == COND_EXPR)
4226     /* Use build_conditional_expr instead.  */
4227     gcc_unreachable ();
4228   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4229 	   && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4230     goto builtin;
4231 
4232   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4233     arg2 = integer_zero_node;
4234 
4235   arglist = VEC_alloc (tree, gc, 3);
4236   VEC_quick_push (tree, arglist, arg1);
4237   if (arg2 != NULL_TREE)
4238     VEC_quick_push (tree, arglist, arg2);
4239   if (arg3 != NULL_TREE)
4240     VEC_quick_push (tree, arglist, arg3);
4241 
4242   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4243   p = conversion_obstack_alloc (0);
4244 
4245   /* Add namespace-scope operators to the list of functions to
4246      consider.  */
4247   add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
4248 		  arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
4249 		  flags, &candidates);
4250   /* Add class-member operators to the candidate set.  */
4251   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
4252     {
4253       tree fns;
4254 
4255       fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
4256       if (fns == error_mark_node)
4257 	{
4258 	  result = error_mark_node;
4259 	  goto user_defined_result_ready;
4260 	}
4261       if (fns)
4262 	add_candidates (BASELINK_FUNCTIONS (fns), arglist,
4263 			NULL_TREE, false,
4264 			BASELINK_BINFO (fns),
4265 			TYPE_BINFO (TREE_TYPE (arg1)),
4266 			flags, &candidates);
4267     }
4268 
4269   args[0] = arg1;
4270   args[1] = arg2;
4271   args[2] = NULL_TREE;
4272 
4273   add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
4274 
4275   switch (code)
4276     {
4277     case COMPOUND_EXPR:
4278     case ADDR_EXPR:
4279       /* For these, the built-in candidates set is empty
4280 	 [over.match.oper]/3.  We don't want non-strict matches
4281 	 because exact matches are always possible with built-in
4282 	 operators.  The built-in candidate set for COMPONENT_REF
4283 	 would be empty too, but since there are no such built-in
4284 	 operators, we accept non-strict matches for them.  */
4285       strict_p = true;
4286       break;
4287 
4288     default:
4289       strict_p = pedantic;
4290       break;
4291     }
4292 
4293   candidates = splice_viable (candidates, strict_p, &any_viable_p);
4294   if (!any_viable_p)
4295     {
4296       switch (code)
4297 	{
4298 	case POSTINCREMENT_EXPR:
4299 	case POSTDECREMENT_EXPR:
4300 	  /* Don't try anything fancy if we're not allowed to produce
4301 	     errors.  */
4302 	  if (!(complain & tf_error))
4303 	    return error_mark_node;
4304 
4305 	  /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
4306 	     distinguish between prefix and postfix ++ and
4307 	     operator++() was used for both, so we allow this with
4308 	     -fpermissive.  */
4309 	  if (flags & LOOKUP_COMPLAIN)
4310 	    {
4311 	      const char *msg = (flag_permissive)
4312 		? G_("no %<%D(int)%> declared for postfix %qs,"
4313 		     " trying prefix operator instead")
4314 		: G_("no %<%D(int)%> declared for postfix %qs");
4315 	      permerror (input_location, msg, fnname,
4316 			 operator_name_info[code].name);
4317 	    }
4318 
4319 	  if (!flag_permissive)
4320 	    return error_mark_node;
4321 
4322 	  if (code == POSTINCREMENT_EXPR)
4323 	    code = PREINCREMENT_EXPR;
4324 	  else
4325 	    code = PREDECREMENT_EXPR;
4326 	  result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
4327 				 overloaded_p, complain);
4328 	  break;
4329 
4330 	  /* The caller will deal with these.  */
4331 	case ADDR_EXPR:
4332 	case COMPOUND_EXPR:
4333 	case COMPONENT_REF:
4334 	  result = NULL_TREE;
4335 	  result_valid_p = true;
4336 	  break;
4337 
4338 	default:
4339 	  if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4340 	    {
4341 		/* If one of the arguments of the operator represents
4342 		   an invalid use of member function pointer, try to report
4343 		   a meaningful error ...  */
4344 		if (invalid_nonstatic_memfn_p (arg1, tf_error)
4345 		    || invalid_nonstatic_memfn_p (arg2, tf_error)
4346 		    || invalid_nonstatic_memfn_p (arg3, tf_error))
4347 		  /* We displayed the error message.  */;
4348 		else
4349 		  {
4350 		    /* ... Otherwise, report the more generic
4351 		       "no matching operator found" error */
4352 		    op_error (code, code2, arg1, arg2, arg3, FALSE);
4353 		    print_z_candidates (candidates);
4354 		  }
4355 	    }
4356 	  result = error_mark_node;
4357 	  break;
4358 	}
4359     }
4360   else
4361     {
4362       cand = tourney (candidates);
4363       if (cand == 0)
4364 	{
4365 	  if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4366 	    {
4367 	      op_error (code, code2, arg1, arg2, arg3, TRUE);
4368 	      print_z_candidates (candidates);
4369 	    }
4370 	  result = error_mark_node;
4371 	}
4372       else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4373 	{
4374 	  if (overloaded_p)
4375 	    *overloaded_p = true;
4376 
4377 	  if (resolve_args (arglist) == NULL)
4378 	    result = error_mark_node;
4379 	  else
4380 	    result = build_over_call (cand, LOOKUP_NORMAL, complain);
4381 	}
4382       else
4383 	{
4384 	  /* Give any warnings we noticed during overload resolution.  */
4385 	  if (cand->warnings && (complain & tf_warning))
4386 	    {
4387 	      struct candidate_warning *w;
4388 	      for (w = cand->warnings; w; w = w->next)
4389 		joust (cand, w->loser, 1);
4390 	    }
4391 
4392 	  /* Check for comparison of different enum types.  */
4393 	  switch (code)
4394 	    {
4395 	    case GT_EXPR:
4396 	    case LT_EXPR:
4397 	    case GE_EXPR:
4398 	    case LE_EXPR:
4399 	    case EQ_EXPR:
4400 	    case NE_EXPR:
4401 	      if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4402 		  && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4403 		  && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4404 		      != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
4405 		  && (complain & tf_warning))
4406 		{
4407 		  warning (OPT_Wenum_compare,
4408 			   "comparison between %q#T and %q#T",
4409 			   TREE_TYPE (arg1), TREE_TYPE (arg2));
4410 		}
4411 	      break;
4412 	    default:
4413 	      break;
4414 	    }
4415 
4416 	  /* We need to strip any leading REF_BIND so that bitfields
4417 	     don't cause errors.  This should not remove any important
4418 	     conversions, because builtins don't apply to class
4419 	     objects directly.  */
4420 	  conv = cand->convs[0];
4421 	  if (conv->kind == ck_ref_bind)
4422 	    conv = conv->u.next;
4423 	  arg1 = convert_like (conv, arg1, complain);
4424 
4425 	  if (arg2)
4426 	    {
4427 	      /* We need to call warn_logical_operator before
4428 		 converting arg2 to a boolean_type.  */
4429 	      if (complain & tf_warning)
4430 		warn_logical_operator (input_location, code, boolean_type_node,
4431 				       code_orig_arg1, arg1,
4432 				       code_orig_arg2, arg2);
4433 
4434 	      conv = cand->convs[1];
4435 	      if (conv->kind == ck_ref_bind)
4436 		conv = conv->u.next;
4437 	      arg2 = convert_like (conv, arg2, complain);
4438 	    }
4439 	  if (arg3)
4440 	    {
4441 	      conv = cand->convs[2];
4442 	      if (conv->kind == ck_ref_bind)
4443 		conv = conv->u.next;
4444 	      arg3 = convert_like (conv, arg3, complain);
4445 	    }
4446 
4447 	}
4448     }
4449 
4450  user_defined_result_ready:
4451 
4452   /* Free all the conversions we allocated.  */
4453   obstack_free (&conversion_obstack, p);
4454 
4455   if (result || result_valid_p)
4456     return result;
4457 
4458  builtin:
4459   avoid_sign_compare_warnings (orig_arg1, arg1);
4460   avoid_sign_compare_warnings (orig_arg2, arg2);
4461   avoid_sign_compare_warnings (orig_arg3, arg3);
4462 
4463   switch (code)
4464     {
4465     case MODIFY_EXPR:
4466       return cp_build_modify_expr (arg1, code2, arg2, complain);
4467 
4468     case INDIRECT_REF:
4469       return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
4470 
4471     case TRUTH_ANDIF_EXPR:
4472     case TRUTH_ORIF_EXPR:
4473     case TRUTH_AND_EXPR:
4474     case TRUTH_OR_EXPR:
4475       warn_logical_operator (input_location, code, boolean_type_node,
4476 			     code_orig_arg1, arg1, code_orig_arg2, arg2);
4477       /* Fall through.  */
4478     case PLUS_EXPR:
4479     case MINUS_EXPR:
4480     case MULT_EXPR:
4481     case TRUNC_DIV_EXPR:
4482     case GT_EXPR:
4483     case LT_EXPR:
4484     case GE_EXPR:
4485     case LE_EXPR:
4486     case EQ_EXPR:
4487     case NE_EXPR:
4488     case MAX_EXPR:
4489     case MIN_EXPR:
4490     case LSHIFT_EXPR:
4491     case RSHIFT_EXPR:
4492     case TRUNC_MOD_EXPR:
4493     case BIT_AND_EXPR:
4494     case BIT_IOR_EXPR:
4495     case BIT_XOR_EXPR:
4496       return cp_build_binary_op (input_location, code, arg1, arg2, complain);
4497 
4498     case UNARY_PLUS_EXPR:
4499     case NEGATE_EXPR:
4500     case BIT_NOT_EXPR:
4501     case TRUTH_NOT_EXPR:
4502     case PREINCREMENT_EXPR:
4503     case POSTINCREMENT_EXPR:
4504     case PREDECREMENT_EXPR:
4505     case POSTDECREMENT_EXPR:
4506     case REALPART_EXPR:
4507     case IMAGPART_EXPR:
4508       return cp_build_unary_op (code, arg1, candidates != 0, complain);
4509 
4510     case ARRAY_REF:
4511       return build_array_ref (input_location, arg1, arg2);
4512 
4513     case MEMBER_REF:
4514       return build_m_component_ref (cp_build_indirect_ref (arg1, RO_NULL,
4515                                                            complain),
4516                                     arg2);
4517 
4518       /* The caller will deal with these.  */
4519     case ADDR_EXPR:
4520     case COMPONENT_REF:
4521     case COMPOUND_EXPR:
4522       return NULL_TREE;
4523 
4524     default:
4525       gcc_unreachable ();
4526     }
4527   return NULL_TREE;
4528 }
4529 
4530 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
4531    deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]).  */
4532 
4533 static bool
4534 non_placement_deallocation_fn_p (tree t)
4535 {
4536   /* A template instance is never a usual deallocation function,
4537      regardless of its signature.  */
4538   if (TREE_CODE (t) == TEMPLATE_DECL
4539       || primary_template_instantiation_p (t))
4540     return false;
4541 
4542   /* If a class T has a member deallocation function named operator delete
4543      with exactly one parameter, then that function is a usual
4544      (non-placement) deallocation function. If class T does not declare
4545      such an operator delete but does declare a member deallocation
4546      function named operator delete with exactly two parameters, the second
4547      of which has type std::size_t (18.2), then this function is a usual
4548      deallocation function.  */
4549   t = FUNCTION_ARG_CHAIN (t);
4550   if (t == void_list_node
4551       || (t && same_type_p (TREE_VALUE (t), size_type_node)
4552 	  && TREE_CHAIN (t) == void_list_node))
4553     return true;
4554   return false;
4555 }
4556 
4557 /* Build a call to operator delete.  This has to be handled very specially,
4558    because the restrictions on what signatures match are different from all
4559    other call instances.  For a normal delete, only a delete taking (void *)
4560    or (void *, size_t) is accepted.  For a placement delete, only an exact
4561    match with the placement new is accepted.
4562 
4563    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4564    ADDR is the pointer to be deleted.
4565    SIZE is the size of the memory block to be deleted.
4566    GLOBAL_P is true if the delete-expression should not consider
4567    class-specific delete operators.
4568    PLACEMENT is the corresponding placement new call, or NULL_TREE.
4569 
4570    If this call to "operator delete" is being generated as part to
4571    deallocate memory allocated via a new-expression (as per [expr.new]
4572    which requires that if the initialization throws an exception then
4573    we call a deallocation function), then ALLOC_FN is the allocation
4574    function.  */
4575 
4576 tree
4577 build_op_delete_call (enum tree_code code, tree addr, tree size,
4578 		      bool global_p, tree placement,
4579 		      tree alloc_fn)
4580 {
4581   tree fn = NULL_TREE;
4582   tree fns, fnname, type, t;
4583 
4584   if (addr == error_mark_node)
4585     return error_mark_node;
4586 
4587   type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
4588 
4589   fnname = ansi_opname (code);
4590 
4591   if (CLASS_TYPE_P (type)
4592       && COMPLETE_TYPE_P (complete_type (type))
4593       && !global_p)
4594     /* In [class.free]
4595 
4596        If the result of the lookup is ambiguous or inaccessible, or if
4597        the lookup selects a placement deallocation function, the
4598        program is ill-formed.
4599 
4600        Therefore, we ask lookup_fnfields to complain about ambiguity.  */
4601     {
4602       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
4603       if (fns == error_mark_node)
4604 	return error_mark_node;
4605     }
4606   else
4607     fns = NULL_TREE;
4608 
4609   if (fns == NULL_TREE)
4610     fns = lookup_name_nonclass (fnname);
4611 
4612   /* Strip const and volatile from addr.  */
4613   addr = cp_convert (ptr_type_node, addr);
4614 
4615   if (placement)
4616     {
4617       /* "A declaration of a placement deallocation function matches the
4618 	 declaration of a placement allocation function if it has the same
4619 	 number of parameters and, after parameter transformations (8.3.5),
4620 	 all parameter types except the first are identical."
4621 
4622 	 So we build up the function type we want and ask instantiate_type
4623 	 to get it for us.  */
4624       t = FUNCTION_ARG_CHAIN (alloc_fn);
4625       t = tree_cons (NULL_TREE, ptr_type_node, t);
4626       t = build_function_type (void_type_node, t);
4627 
4628       fn = instantiate_type (t, fns, tf_none);
4629       if (fn == error_mark_node)
4630 	return NULL_TREE;
4631 
4632       if (BASELINK_P (fn))
4633 	fn = BASELINK_FUNCTIONS (fn);
4634 
4635       /* "If the lookup finds the two-parameter form of a usual deallocation
4636 	 function (3.7.4.2) and that function, considered as a placement
4637 	 deallocation function, would have been selected as a match for the
4638 	 allocation function, the program is ill-formed."  */
4639       if (non_placement_deallocation_fn_p (fn))
4640 	{
4641 	  /* But if the class has an operator delete (void *), then that is
4642 	     the usual deallocation function, so we shouldn't complain
4643 	     about using the operator delete (void *, size_t).  */
4644 	  for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4645 	       t; t = OVL_NEXT (t))
4646 	    {
4647 	      tree elt = OVL_CURRENT (t);
4648 	      if (non_placement_deallocation_fn_p (elt)
4649 		  && FUNCTION_ARG_CHAIN (elt) == void_list_node)
4650 		goto ok;
4651 	    }
4652 	  permerror (0, "non-placement deallocation function %q+D", fn);
4653 	  permerror (input_location, "selected for placement delete");
4654 	ok:;
4655 	}
4656     }
4657   else
4658     /* "Any non-placement deallocation function matches a non-placement
4659        allocation function. If the lookup finds a single matching
4660        deallocation function, that function will be called; otherwise, no
4661        deallocation function will be called."  */
4662     for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4663 	 t; t = OVL_NEXT (t))
4664       {
4665 	tree elt = OVL_CURRENT (t);
4666 	if (non_placement_deallocation_fn_p (elt))
4667 	  {
4668 	    fn = elt;
4669 	    /* "If a class T has a member deallocation function named
4670 	       operator delete with exactly one parameter, then that
4671 	       function is a usual (non-placement) deallocation
4672 	       function. If class T does not declare such an operator
4673 	       delete but does declare a member deallocation function named
4674 	       operator delete with exactly two parameters, the second of
4675 	       which has type std::size_t (18.2), then this function is a
4676 	       usual deallocation function."
4677 
4678 	       So (void*) beats (void*, size_t).  */
4679 	    if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
4680 	      break;
4681 	  }
4682       }
4683 
4684   /* If we have a matching function, call it.  */
4685   if (fn)
4686     {
4687       gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
4688 
4689       /* If the FN is a member function, make sure that it is
4690 	 accessible.  */
4691       if (BASELINK_P (fns))
4692 	perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn);
4693 
4694       /* Core issue 901: It's ok to new a type with deleted delete.  */
4695       if (DECL_DELETED_FN (fn) && alloc_fn)
4696 	return NULL_TREE;
4697 
4698       if (placement)
4699 	{
4700 	  /* The placement args might not be suitable for overload
4701 	     resolution at this point, so build the call directly.  */
4702 	  int nargs = call_expr_nargs (placement);
4703 	  tree *argarray = (tree *) alloca (nargs * sizeof (tree));
4704 	  int i;
4705 	  argarray[0] = addr;
4706 	  for (i = 1; i < nargs; i++)
4707 	    argarray[i] = CALL_EXPR_ARG (placement, i);
4708 	  mark_used (fn);
4709 	  return build_cxx_call (fn, nargs, argarray);
4710 	}
4711       else
4712 	{
4713 	  tree ret;
4714 	  VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
4715 	  VEC_quick_push (tree, args, addr);
4716 	  if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
4717 	    VEC_quick_push (tree, args, size);
4718 	  ret = cp_build_function_call_vec (fn, &args, tf_warning_or_error);
4719 	  VEC_free (tree, gc, args);
4720 	  return ret;
4721 	}
4722     }
4723 
4724   /* [expr.new]
4725 
4726      If no unambiguous matching deallocation function can be found,
4727      propagating the exception does not cause the object's memory to
4728      be freed.  */
4729   if (alloc_fn)
4730     {
4731       if (!placement)
4732 	warning (0, "no corresponding deallocation function for %qD",
4733 		 alloc_fn);
4734       return NULL_TREE;
4735     }
4736 
4737   error ("no suitable %<operator %s%> for %qT",
4738 	 operator_name_info[(int)code].name, type);
4739   return error_mark_node;
4740 }
4741 
4742 /* If the current scope isn't allowed to access DECL along
4743    BASETYPE_PATH, give an error.  The most derived class in
4744    BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4745    the declaration to use in the error diagnostic.  */
4746 
4747 bool
4748 enforce_access (tree basetype_path, tree decl, tree diag_decl)
4749 {
4750   gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4751 
4752   if (!accessible_p (basetype_path, decl, true))
4753     {
4754       if (TREE_PRIVATE (decl))
4755 	error ("%q+#D is private", diag_decl);
4756       else if (TREE_PROTECTED (decl))
4757 	error ("%q+#D is protected", diag_decl);
4758       else
4759 	error ("%q+#D is inaccessible", diag_decl);
4760       error ("within this context");
4761       return false;
4762     }
4763 
4764   return true;
4765 }
4766 
4767 /* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
4768    bitwise or of LOOKUP_* values.  If any errors are warnings are
4769    generated, set *DIAGNOSTIC_FN to "error" or "warning",
4770    respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
4771    to NULL.  */
4772 
4773 static tree
4774 build_temp (tree expr, tree type, int flags,
4775 	    diagnostic_t *diagnostic_kind)
4776 {
4777   int savew, savee;
4778   VEC(tree,gc) *args;
4779 
4780   savew = warningcount, savee = errorcount;
4781   args = make_tree_vector_single (expr);
4782   expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4783 				    &args, type, flags, tf_warning_or_error);
4784   release_tree_vector (args);
4785   if (warningcount > savew)
4786     *diagnostic_kind = DK_WARNING;
4787   else if (errorcount > savee)
4788     *diagnostic_kind = DK_ERROR;
4789   else
4790     *diagnostic_kind = DK_UNSPECIFIED;
4791   return expr;
4792 }
4793 
4794 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4795    EXPR is implicitly converted to type TOTYPE.
4796    FN and ARGNUM are used for diagnostics.  */
4797 
4798 static void
4799 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
4800 {
4801   tree t = non_reference (totype);
4802 
4803   /* Issue warnings about peculiar, but valid, uses of NULL.  */
4804   if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
4805     {
4806       if (fn)
4807 	warning_at (input_location, OPT_Wconversion_null,
4808 		    "passing NULL to non-pointer argument %P of %qD",
4809 		    argnum, fn);
4810       else
4811 	warning_at (input_location, OPT_Wconversion_null,
4812 		    "converting to non-pointer type %qT from NULL", t);
4813     }
4814 
4815   /* Issue warnings if "false" is converted to a NULL pointer */
4816   else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
4817     warning_at (input_location, OPT_Wconversion_null,
4818 		"converting %<false%> to pointer type for argument %P of %qD",
4819 		argnum, fn);
4820 }
4821 
4822 /* Perform the conversions in CONVS on the expression EXPR.  FN and
4823    ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
4824    indicates the `this' argument of a method.  INNER is nonzero when
4825    being called to continue a conversion chain. It is negative when a
4826    reference binding will be applied, positive otherwise.  If
4827    ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4828    conversions will be emitted if appropriate.  If C_CAST_P is true,
4829    this conversion is coming from a C-style cast; in that case,
4830    conversions to inaccessible bases are permitted.  */
4831 
4832 static tree
4833 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4834 		   int inner, bool issue_conversion_warnings,
4835 		   bool c_cast_p, tsubst_flags_t complain)
4836 {
4837   tree totype = convs->type;
4838   diagnostic_t diag_kind;
4839   int flags;
4840 
4841   if (convs->bad_p
4842       && convs->kind != ck_user
4843       && convs->kind != ck_list
4844       && convs->kind != ck_ambig
4845       && convs->kind != ck_ref_bind
4846       && convs->kind != ck_rvalue
4847       && convs->kind != ck_base)
4848     {
4849       conversion *t = convs;
4850 
4851       /* Give a helpful error if this is bad because of excess braces.  */
4852       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
4853 	  && SCALAR_TYPE_P (totype)
4854 	  && CONSTRUCTOR_NELTS (expr) > 0
4855 	  && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
4856 	permerror (input_location, "too many braces around initializer for %qT", totype);
4857 
4858       for (; t; t = convs->u.next)
4859 	{
4860 	  if (t->kind == ck_user || !t->bad_p)
4861 	    {
4862 	      expr = convert_like_real (t, expr, fn, argnum, 1,
4863 					/*issue_conversion_warnings=*/false,
4864 					/*c_cast_p=*/false,
4865 					complain);
4866 	      break;
4867 	    }
4868 	  else if (t->kind == ck_ambig)
4869 	    return convert_like_real (t, expr, fn, argnum, 1,
4870 				      /*issue_conversion_warnings=*/false,
4871 				      /*c_cast_p=*/false,
4872 				      complain);
4873 	  else if (t->kind == ck_identity)
4874 	    break;
4875 	}
4876       if (complain & tf_error)
4877 	{
4878 	  permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4879 	  if (fn)
4880 	    permerror (input_location, "  initializing argument %P of %qD", argnum, fn);
4881 	}
4882       else
4883 	return error_mark_node;
4884 
4885       return cp_convert (totype, expr);
4886     }
4887 
4888   if (issue_conversion_warnings && (complain & tf_warning))
4889     conversion_null_warnings (totype, expr, fn, argnum);
4890 
4891   switch (convs->kind)
4892     {
4893     case ck_user:
4894       {
4895 	struct z_candidate *cand = convs->cand;
4896 	tree convfn = cand->fn;
4897 	unsigned i;
4898 
4899 	/* When converting from an init list we consider explicit
4900 	   constructors, but actually trying to call one is an error.  */
4901 	if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn))
4902 	  {
4903 	    if (complain & tf_error)
4904 	      error ("converting to %qT from initializer list would use "
4905 		     "explicit constructor %qD", totype, convfn);
4906 	    else
4907 	      return error_mark_node;
4908 	  }
4909 
4910 	/* Set user_conv_p on the argument conversions, so rvalue/base
4911 	   handling knows not to allow any more UDCs.  */
4912 	for (i = 0; i < cand->num_convs; ++i)
4913 	  cand->convs[i]->user_conv_p = true;
4914 
4915 	expr = build_over_call (cand, LOOKUP_NORMAL, complain);
4916 
4917 	/* If this is a constructor or a function returning an aggr type,
4918 	   we need to build up a TARGET_EXPR.  */
4919 	if (DECL_CONSTRUCTOR_P (convfn))
4920 	  {
4921 	    expr = build_cplus_new (totype, expr);
4922 
4923 	    /* Remember that this was list-initialization.  */
4924 	    if (convs->check_narrowing)
4925 	      TARGET_EXPR_LIST_INIT_P (expr) = true;
4926 	  }
4927 
4928 	return expr;
4929       }
4930     case ck_identity:
4931       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
4932 	{
4933 	  int nelts = CONSTRUCTOR_NELTS (expr);
4934 	  if (nelts == 0)
4935 	    expr = integer_zero_node;
4936 	  else if (nelts == 1)
4937 	    expr = CONSTRUCTOR_ELT (expr, 0)->value;
4938 	  else
4939 	    gcc_unreachable ();
4940 	}
4941 
4942       if (type_unknown_p (expr))
4943 	expr = instantiate_type (totype, expr, complain);
4944       /* Convert a constant to its underlying value, unless we are
4945 	 about to bind it to a reference, in which case we need to
4946 	 leave it as an lvalue.  */
4947       if (inner >= 0)
4948         {
4949           expr = decl_constant_value (expr);
4950           if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
4951             /* If __null has been converted to an integer type, we do not
4952                want to warn about uses of EXPR as an integer, rather than
4953                as a pointer.  */
4954             expr = build_int_cst (totype, 0);
4955         }
4956       return expr;
4957     case ck_ambig:
4958       /* Call build_user_type_conversion again for the error.  */
4959       return build_user_type_conversion
4960 	(totype, convs->u.expr, LOOKUP_NORMAL);
4961 
4962     case ck_list:
4963       {
4964 	/* Conversion to std::initializer_list<T>.  */
4965 	tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
4966 	tree new_ctor = build_constructor (init_list_type_node, NULL);
4967 	unsigned len = CONSTRUCTOR_NELTS (expr);
4968 	tree array, val;
4969 	VEC(tree,gc) *parms;
4970 	unsigned ix;
4971 
4972 	/* Convert all the elements.  */
4973 	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
4974 	  {
4975 	    tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
4976 					  1, false, false, complain);
4977 	    if (sub == error_mark_node)
4978 	      return sub;
4979 	    check_narrowing (TREE_TYPE (sub), val);
4980 	    CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
4981 	  }
4982 	/* Build up the array.  */
4983 	elttype = cp_build_qualified_type
4984 	  (elttype, TYPE_QUALS (elttype) | TYPE_QUAL_CONST);
4985 	array = build_array_of_n_type (elttype, len);
4986 	array = finish_compound_literal (array, new_ctor);
4987 
4988 	parms = make_tree_vector ();
4989 	VEC_safe_push (tree, gc, parms, decay_conversion (array));
4990 	VEC_safe_push (tree, gc, parms, size_int (len));
4991 	/* Call the private constructor.  */
4992 	push_deferring_access_checks (dk_no_check);
4993 	new_ctor = build_special_member_call
4994 	  (NULL_TREE, complete_ctor_identifier, &parms, totype, 0, complain);
4995 	release_tree_vector (parms);
4996 	pop_deferring_access_checks ();
4997 	return build_cplus_new (totype, new_ctor);
4998       }
4999 
5000     case ck_aggr:
5001       return get_target_expr (digest_init (totype, expr));
5002 
5003     default:
5004       break;
5005     };
5006 
5007   expr = convert_like_real (convs->u.next, expr, fn, argnum,
5008 			    convs->kind == ck_ref_bind ? -1 : 1,
5009 			    convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
5010 			    c_cast_p,
5011 			    complain);
5012   if (expr == error_mark_node)
5013     return error_mark_node;
5014 
5015   switch (convs->kind)
5016     {
5017     case ck_rvalue:
5018       expr = decay_conversion (expr);
5019       if (! MAYBE_CLASS_TYPE_P (totype))
5020 	return expr;
5021       /* Else fall through.  */
5022     case ck_base:
5023       if (convs->kind == ck_base && !convs->need_temporary_p)
5024 	{
5025 	  /* We are going to bind a reference directly to a base-class
5026 	     subobject of EXPR.  */
5027 	  /* Build an expression for `*((base*) &expr)'.  */
5028 	  expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
5029 	  expr = convert_to_base (expr, build_pointer_type (totype),
5030 				  !c_cast_p, /*nonnull=*/true);
5031 	  expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
5032 	  return expr;
5033 	}
5034 
5035       /* Copy-initialization where the cv-unqualified version of the source
5036 	 type is the same class as, or a derived class of, the class of the
5037 	 destination [is treated as direct-initialization].  [dcl.init] */
5038       flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5039       if (convs->user_conv_p)
5040 	/* This conversion is being done in the context of a user-defined
5041 	   conversion (i.e. the second step of copy-initialization), so
5042 	   don't allow any more.  */
5043 	flags |= LOOKUP_NO_CONVERSION;
5044       expr = build_temp (expr, totype, flags, &diag_kind);
5045       if (diag_kind && fn)
5046 	{
5047 	  if ((complain & tf_error))
5048 	    emit_diagnostic (diag_kind, input_location, 0,
5049 			     "  initializing argument %P of %qD", argnum, fn);
5050 	  else if (diag_kind == DK_ERROR)
5051 	    return error_mark_node;
5052 	}
5053       return build_cplus_new (totype, expr);
5054 
5055     case ck_ref_bind:
5056       {
5057 	tree ref_type = totype;
5058 
5059 	if (convs->bad_p && TYPE_REF_IS_RVALUE (ref_type)
5060 	    && real_lvalue_p (expr))
5061 	  {
5062 	    if (complain & tf_error)
5063 	      {
5064 		error ("cannot bind %qT lvalue to %qT",
5065 		       TREE_TYPE (expr), totype);
5066 		if (fn)
5067 		  error ("  initializing argument %P of %q+D", argnum, fn);
5068 	      }
5069 	    return error_mark_node;
5070 	  }
5071 
5072 	/* If necessary, create a temporary.
5073 
5074            VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5075            that need temporaries, even when their types are reference
5076            compatible with the type of reference being bound, so the
5077            upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
5078            doesn't fail.  */
5079 	if (convs->need_temporary_p
5080 	    || TREE_CODE (expr) == CONSTRUCTOR
5081 	    || TREE_CODE (expr) == VA_ARG_EXPR)
5082 	  {
5083 	    tree type = convs->u.next->type;
5084 	    cp_lvalue_kind lvalue = real_lvalue_p (expr);
5085 
5086 	    if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
5087 		&& !TYPE_REF_IS_RVALUE (ref_type))
5088 	      {
5089 		if (complain & tf_error)
5090 		  {
5091 		    /* If the reference is volatile or non-const, we
5092 		       cannot create a temporary.  */
5093 		    if (lvalue & clk_bitfield)
5094 		      error ("cannot bind bitfield %qE to %qT",
5095 			     expr, ref_type);
5096 		    else if (lvalue & clk_packed)
5097 		      error ("cannot bind packed field %qE to %qT",
5098 			     expr, ref_type);
5099 		    else
5100 		      error ("cannot bind rvalue %qE to %qT", expr, ref_type);
5101 		  }
5102 		return error_mark_node;
5103 	      }
5104 	    /* If the source is a packed field, and we must use a copy
5105 	       constructor, then building the target expr will require
5106 	       binding the field to the reference parameter to the
5107 	       copy constructor, and we'll end up with an infinite
5108 	       loop.  If we can use a bitwise copy, then we'll be
5109 	       OK.  */
5110 	    if ((lvalue & clk_packed)
5111 		&& CLASS_TYPE_P (type)
5112 		&& !TYPE_HAS_TRIVIAL_INIT_REF (type))
5113 	      {
5114 		if (complain & tf_error)
5115 		  error ("cannot bind packed field %qE to %qT",
5116 			 expr, ref_type);
5117 		return error_mark_node;
5118 	      }
5119 	    if (lvalue & clk_bitfield)
5120 	      {
5121 		expr = convert_bitfield_to_declared_type (expr);
5122 		expr = fold_convert (type, expr);
5123 	      }
5124 	    expr = build_target_expr_with_type (expr, type);
5125 	  }
5126 
5127 	/* Take the address of the thing to which we will bind the
5128 	   reference.  */
5129 	expr = cp_build_unary_op (ADDR_EXPR, expr, 1, complain);
5130 	if (expr == error_mark_node)
5131 	  return error_mark_node;
5132 
5133 	/* Convert it to a pointer to the type referred to by the
5134 	   reference.  This will adjust the pointer if a derived to
5135 	   base conversion is being performed.  */
5136 	expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
5137 			   expr);
5138 	/* Convert the pointer to the desired reference type.  */
5139 	return build_nop (ref_type, expr);
5140       }
5141 
5142     case ck_lvalue:
5143       return decay_conversion (expr);
5144 
5145     case ck_qual:
5146       /* Warn about deprecated conversion if appropriate.  */
5147       string_conv_p (totype, expr, 1);
5148       break;
5149 
5150     case ck_ptr:
5151       if (convs->base_p)
5152 	expr = convert_to_base (expr, totype, !c_cast_p,
5153 				/*nonnull=*/false);
5154       return build_nop (totype, expr);
5155 
5156     case ck_pmem:
5157       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
5158 			     c_cast_p);
5159 
5160     default:
5161       break;
5162     }
5163 
5164   if (convs->check_narrowing)
5165     check_narrowing (totype, expr);
5166 
5167   if (issue_conversion_warnings && (complain & tf_warning))
5168     expr = convert_and_check (totype, expr);
5169   else
5170     expr = convert (totype, expr);
5171 
5172   return expr;
5173 }
5174 
5175 /* ARG is being passed to a varargs function.  Perform any conversions
5176    required.  Return the converted value.  */
5177 
5178 tree
5179 convert_arg_to_ellipsis (tree arg)
5180 {
5181   /* [expr.call]
5182 
5183      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5184      standard conversions are performed.  */
5185   arg = decay_conversion (arg);
5186   /* [expr.call]
5187 
5188      If the argument has integral or enumeration type that is subject
5189      to the integral promotions (_conv.prom_), or a floating point
5190      type that is subject to the floating point promotion
5191      (_conv.fpprom_), the value of the argument is converted to the
5192      promoted type before the call.  */
5193   if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
5194       && (TYPE_PRECISION (TREE_TYPE (arg))
5195 	  < TYPE_PRECISION (double_type_node))
5196       && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (arg))))
5197     arg = convert_to_real (double_type_node, arg);
5198   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
5199     arg = perform_integral_promotions (arg);
5200 
5201   arg = require_complete_type (arg);
5202 
5203   if (arg != error_mark_node
5204       && (type_has_nontrivial_copy_init (TREE_TYPE (arg))
5205 	  || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (arg))))
5206     {
5207       /* [expr.call] 5.2.2/7:
5208 	 Passing a potentially-evaluated argument of class type (Clause 9)
5209 	 with a non-trivial copy constructor or a non-trivial destructor
5210 	 with no corresponding parameter is conditionally-supported, with
5211 	 implementation-defined semantics.
5212 
5213 	 We used to just warn here and do a bitwise copy, but now
5214 	 cp_expr_size will abort if we try to do that.
5215 
5216 	 If the call appears in the context of a sizeof expression,
5217 	 it is not potentially-evaluated.  */
5218       if (cp_unevaluated_operand == 0)
5219 	error ("cannot pass objects of non-trivially-copyable "
5220 	       "type %q#T through %<...%>", TREE_TYPE (arg));
5221     }
5222 
5223   return arg;
5224 }
5225 
5226 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
5227 
5228 tree
5229 build_x_va_arg (tree expr, tree type)
5230 {
5231   if (processing_template_decl)
5232     return build_min (VA_ARG_EXPR, type, expr);
5233 
5234   type = complete_type_or_else (type, NULL_TREE);
5235 
5236   if (expr == error_mark_node || !type)
5237     return error_mark_node;
5238 
5239   if (type_has_nontrivial_copy_init (type)
5240       || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5241       || TREE_CODE (type) == REFERENCE_TYPE)
5242     {
5243       /* Remove reference types so we don't ICE later on.  */
5244       tree type1 = non_reference (type);
5245       /* conditionally-supported behavior [expr.call] 5.2.2/7.  */
5246       error ("cannot receive objects of non-trivially-copyable type %q#T "
5247 	     "through %<...%>; ", type);
5248       expr = convert (build_pointer_type (type1), null_node);
5249       expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
5250       return expr;
5251     }
5252 
5253   return build_va_arg (input_location, expr, type);
5254 }
5255 
5256 /* TYPE has been given to va_arg.  Apply the default conversions which
5257    would have happened when passed via ellipsis.  Return the promoted
5258    type, or the passed type if there is no change.  */
5259 
5260 tree
5261 cxx_type_promotes_to (tree type)
5262 {
5263   tree promote;
5264 
5265   /* Perform the array-to-pointer and function-to-pointer
5266      conversions.  */
5267   type = type_decays_to (type);
5268 
5269   promote = type_promotes_to (type);
5270   if (same_type_p (type, promote))
5271     promote = type;
5272 
5273   return promote;
5274 }
5275 
5276 /* ARG is a default argument expression being passed to a parameter of
5277    the indicated TYPE, which is a parameter to FN.  Do any required
5278    conversions.  Return the converted value.  */
5279 
5280 static GTY(()) VEC(tree,gc) *default_arg_context;
5281 
5282 tree
5283 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
5284 {
5285   int i;
5286   tree t;
5287 
5288   /* If the ARG is an unparsed default argument expression, the
5289      conversion cannot be performed.  */
5290   if (TREE_CODE (arg) == DEFAULT_ARG)
5291     {
5292       error ("the default argument for parameter %d of %qD has "
5293 	     "not yet been parsed",
5294 	     parmnum, fn);
5295       return error_mark_node;
5296     }
5297 
5298   /* Detect recursion.  */
5299   for (i = 0; VEC_iterate (tree, default_arg_context, i, t); ++i)
5300     if (t == fn)
5301       {
5302 	error ("recursive evaluation of default argument for %q#D", fn);
5303 	return error_mark_node;
5304       }
5305   VEC_safe_push (tree, gc, default_arg_context, fn);
5306 
5307   if (fn && DECL_TEMPLATE_INFO (fn))
5308     arg = tsubst_default_argument (fn, type, arg);
5309 
5310   /* Due to:
5311 
5312        [dcl.fct.default]
5313 
5314        The names in the expression are bound, and the semantic
5315        constraints are checked, at the point where the default
5316        expressions appears.
5317 
5318      we must not perform access checks here.  */
5319   push_deferring_access_checks (dk_no_check);
5320   arg = break_out_target_exprs (arg);
5321   if (TREE_CODE (arg) == CONSTRUCTOR)
5322     {
5323       arg = digest_init (type, arg);
5324       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5325 					"default argument", fn, parmnum,
5326                                         tf_warning_or_error);
5327     }
5328   else
5329     {
5330       /* We must make a copy of ARG, in case subsequent processing
5331 	 alters any part of it.  For example, during gimplification a
5332 	 cast of the form (T) &X::f (where "f" is a member function)
5333 	 will lead to replacing the PTRMEM_CST for &X::f with a
5334 	 VAR_DECL.  We can avoid the copy for constants, since they
5335 	 are never modified in place.  */
5336       if (!CONSTANT_CLASS_P (arg))
5337 	arg = unshare_expr (arg);
5338       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5339 					"default argument", fn, parmnum,
5340                                         tf_warning_or_error);
5341       arg = convert_for_arg_passing (type, arg);
5342     }
5343   pop_deferring_access_checks();
5344 
5345   VEC_pop (tree, default_arg_context);
5346 
5347   return arg;
5348 }
5349 
5350 /* Returns the type which will really be used for passing an argument of
5351    type TYPE.  */
5352 
5353 tree
5354 type_passed_as (tree type)
5355 {
5356   /* Pass classes with copy ctors by invisible reference.  */
5357   if (TREE_ADDRESSABLE (type))
5358     {
5359       type = build_reference_type (type);
5360       /* There are no other pointers to this temporary.  */
5361       type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
5362     }
5363   else if (targetm.calls.promote_prototypes (type)
5364 	   && INTEGRAL_TYPE_P (type)
5365 	   && COMPLETE_TYPE_P (type)
5366 	   && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5367 				   TYPE_SIZE (integer_type_node)))
5368     type = integer_type_node;
5369 
5370   return type;
5371 }
5372 
5373 /* Actually perform the appropriate conversion.  */
5374 
5375 tree
5376 convert_for_arg_passing (tree type, tree val)
5377 {
5378   tree bitfield_type;
5379 
5380   /* If VAL is a bitfield, then -- since it has already been converted
5381      to TYPE -- it cannot have a precision greater than TYPE.
5382 
5383      If it has a smaller precision, we must widen it here.  For
5384      example, passing "int f:3;" to a function expecting an "int" will
5385      not result in any conversion before this point.
5386 
5387      If the precision is the same we must not risk widening.  For
5388      example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5389      often have type "int", even though the C++ type for the field is
5390      "long long".  If the value is being passed to a function
5391      expecting an "int", then no conversions will be required.  But,
5392      if we call convert_bitfield_to_declared_type, the bitfield will
5393      be converted to "long long".  */
5394   bitfield_type = is_bitfield_expr_with_lowered_type (val);
5395   if (bitfield_type
5396       && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
5397     val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
5398 
5399   if (val == error_mark_node)
5400     ;
5401   /* Pass classes with copy ctors by invisible reference.  */
5402   else if (TREE_ADDRESSABLE (type))
5403     val = build1 (ADDR_EXPR, build_reference_type (type), val);
5404   else if (targetm.calls.promote_prototypes (type)
5405 	   && INTEGRAL_TYPE_P (type)
5406 	   && COMPLETE_TYPE_P (type)
5407 	   && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5408 				   TYPE_SIZE (integer_type_node)))
5409     val = perform_integral_promotions (val);
5410   if (warn_missing_format_attribute)
5411     {
5412       tree rhstype = TREE_TYPE (val);
5413       const enum tree_code coder = TREE_CODE (rhstype);
5414       const enum tree_code codel = TREE_CODE (type);
5415       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5416 	  && coder == codel
5417 	  && check_missing_format_attribute (type, rhstype))
5418 	warning (OPT_Wmissing_format_attribute,
5419 		 "argument of function call might be a candidate for a format attribute");
5420     }
5421   return val;
5422 }
5423 
5424 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5425    which no conversions at all should be done.  This is true for some
5426    builtins which don't act like normal functions.  */
5427 
5428 static bool
5429 magic_varargs_p (tree fn)
5430 {
5431   if (DECL_BUILT_IN (fn))
5432     switch (DECL_FUNCTION_CODE (fn))
5433       {
5434       case BUILT_IN_CLASSIFY_TYPE:
5435       case BUILT_IN_CONSTANT_P:
5436       case BUILT_IN_NEXT_ARG:
5437       case BUILT_IN_VA_START:
5438 	return true;
5439 
5440       default:;
5441 	return lookup_attribute ("type generic",
5442 				 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
5443       }
5444 
5445   return false;
5446 }
5447 
5448 /* Subroutine of the various build_*_call functions.  Overload resolution
5449    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5450    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
5451    bitmask of various LOOKUP_* flags which apply to the call itself.  */
5452 
5453 static tree
5454 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
5455 {
5456   tree fn = cand->fn;
5457   const VEC(tree,gc) *args = cand->args;
5458   tree first_arg = cand->first_arg;
5459   conversion **convs = cand->convs;
5460   conversion *conv;
5461   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5462   int parmlen;
5463   tree val;
5464   int i = 0;
5465   int j = 0;
5466   unsigned int arg_index = 0;
5467   int is_method = 0;
5468   int nargs;
5469   tree *argarray;
5470   bool already_used = false;
5471 
5472   /* In a template, there is no need to perform all of the work that
5473      is normally done.  We are only interested in the type of the call
5474      expression, i.e., the return type of the function.  Any semantic
5475      errors will be deferred until the template is instantiated.  */
5476   if (processing_template_decl)
5477     {
5478       tree expr;
5479       tree return_type;
5480       const tree *argarray;
5481       unsigned int nargs;
5482 
5483       return_type = TREE_TYPE (TREE_TYPE (fn));
5484       nargs = VEC_length (tree, args);
5485       if (first_arg == NULL_TREE)
5486 	argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
5487       else
5488 	{
5489 	  tree *alcarray;
5490 	  unsigned int ix;
5491 	  tree arg;
5492 
5493 	  ++nargs;
5494 	  alcarray = XALLOCAVEC (tree, nargs);
5495 	  alcarray[0] = first_arg;
5496 	  for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
5497 	    alcarray[ix + 1] = arg;
5498 	  argarray = alcarray;
5499 	}
5500       expr = build_call_array_loc (input_location,
5501 				   return_type, build_addr_func (fn), nargs,
5502 				   argarray);
5503       if (TREE_THIS_VOLATILE (fn) && cfun)
5504 	current_function_returns_abnormally = 1;
5505       if (!VOID_TYPE_P (return_type))
5506 	require_complete_type (return_type);
5507       return convert_from_reference (expr);
5508     }
5509 
5510   /* Give any warnings we noticed during overload resolution.  */
5511   if (cand->warnings)
5512     {
5513       struct candidate_warning *w;
5514       for (w = cand->warnings; w; w = w->next)
5515 	joust (cand, w->loser, 1);
5516     }
5517 
5518   /* Make =delete work with SFINAE.  */
5519   if (DECL_DELETED_FN (fn) && !(complain & tf_error))
5520     return error_mark_node;
5521 
5522   if (DECL_FUNCTION_MEMBER_P (fn))
5523     {
5524       /* If FN is a template function, two cases must be considered.
5525 	 For example:
5526 
5527 	   struct A {
5528 	     protected:
5529 	       template <class T> void f();
5530 	   };
5531 	   template <class T> struct B {
5532 	     protected:
5533 	       void g();
5534 	   };
5535 	   struct C : A, B<int> {
5536 	     using A::f;	// #1
5537 	     using B<int>::g;	// #2
5538 	   };
5539 
5540 	 In case #1 where `A::f' is a member template, DECL_ACCESS is
5541 	 recorded in the primary template but not in its specialization.
5542 	 We check access of FN using its primary template.
5543 
5544 	 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5545 	 because it is a member of class template B, DECL_ACCESS is
5546 	 recorded in the specialization `B<int>::g'.  We cannot use its
5547 	 primary template because `B<T>::g' and `B<int>::g' may have
5548 	 different access.  */
5549       if (DECL_TEMPLATE_INFO (fn)
5550 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
5551 	perform_or_defer_access_check (cand->access_path,
5552 				       DECL_TI_TEMPLATE (fn), fn);
5553       else
5554 	perform_or_defer_access_check (cand->access_path, fn, fn);
5555     }
5556 
5557   /* Find maximum size of vector to hold converted arguments.  */
5558   parmlen = list_length (parm);
5559   nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
5560   if (parmlen > nargs)
5561     nargs = parmlen;
5562   argarray = (tree *) alloca (nargs * sizeof (tree));
5563 
5564   /* The implicit parameters to a constructor are not considered by overload
5565      resolution, and must be of the proper type.  */
5566   if (DECL_CONSTRUCTOR_P (fn))
5567     {
5568       if (first_arg != NULL_TREE)
5569 	{
5570 	  argarray[j++] = first_arg;
5571 	  first_arg = NULL_TREE;
5572 	}
5573       else
5574 	{
5575 	  argarray[j++] = VEC_index (tree, args, arg_index);
5576 	  ++arg_index;
5577 	}
5578       parm = TREE_CHAIN (parm);
5579       /* We should never try to call the abstract constructor.  */
5580       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
5581 
5582       if (DECL_HAS_VTT_PARM_P (fn))
5583 	{
5584 	  argarray[j++] = VEC_index (tree, args, arg_index);
5585 	  ++arg_index;
5586 	  parm = TREE_CHAIN (parm);
5587 	}
5588     }
5589   /* Bypass access control for 'this' parameter.  */
5590   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5591     {
5592       tree parmtype = TREE_VALUE (parm);
5593       tree arg = (first_arg != NULL_TREE
5594 		  ? first_arg
5595 		  : VEC_index (tree, args, arg_index));
5596       tree argtype = TREE_TYPE (arg);
5597       tree converted_arg;
5598       tree base_binfo;
5599 
5600       if (convs[i]->bad_p)
5601 	{
5602 	  if (complain & tf_error)
5603 	    permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5604 		       TREE_TYPE (argtype), fn);
5605 	  else
5606 	    return error_mark_node;
5607 	}
5608 
5609       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5610 	 X is called for an object that is not of type X, or of a type
5611 	 derived from X, the behavior is undefined.
5612 
5613 	 So we can assume that anything passed as 'this' is non-null, and
5614 	 optimize accordingly.  */
5615       gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
5616       /* Convert to the base in which the function was declared.  */
5617       gcc_assert (cand->conversion_path != NULL_TREE);
5618       converted_arg = build_base_path (PLUS_EXPR,
5619 				       arg,
5620 				       cand->conversion_path,
5621 				       1);
5622       /* Check that the base class is accessible.  */
5623       if (!accessible_base_p (TREE_TYPE (argtype),
5624 			      BINFO_TYPE (cand->conversion_path), true))
5625 	error ("%qT is not an accessible base of %qT",
5626 	       BINFO_TYPE (cand->conversion_path),
5627 	       TREE_TYPE (argtype));
5628       /* If fn was found by a using declaration, the conversion path
5629 	 will be to the derived class, not the base declaring fn. We
5630 	 must convert from derived to base.  */
5631       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
5632 				TREE_TYPE (parmtype), ba_unique, NULL);
5633       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
5634 				       base_binfo, 1);
5635 
5636       argarray[j++] = converted_arg;
5637       parm = TREE_CHAIN (parm);
5638       if (first_arg != NULL_TREE)
5639 	first_arg = NULL_TREE;
5640       else
5641 	++arg_index;
5642       ++i;
5643       is_method = 1;
5644     }
5645 
5646   gcc_assert (first_arg == NULL_TREE);
5647   for (; arg_index < VEC_length (tree, args) && parm;
5648        parm = TREE_CHAIN (parm), ++arg_index, ++i)
5649     {
5650       tree type = TREE_VALUE (parm);
5651       tree arg = VEC_index (tree, args, arg_index);
5652 
5653       conv = convs[i];
5654 
5655       /* Don't make a copy here if build_call is going to.  */
5656       if (conv->kind == ck_rvalue
5657 	  && COMPLETE_TYPE_P (complete_type (type))
5658 	  && !TREE_ADDRESSABLE (type))
5659 	conv = conv->u.next;
5660 
5661       /* Warn about initializer_list deduction that isn't currently in the
5662 	 working draft.  */
5663       if (cxx_dialect > cxx98
5664 	  && flag_deduce_init_list
5665 	  && cand->template_decl
5666 	  && is_std_init_list (non_reference (type))
5667 	  && BRACE_ENCLOSED_INITIALIZER_P (arg))
5668 	{
5669 	  tree tmpl = TI_TEMPLATE (cand->template_decl);
5670 	  tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
5671 	  tree patparm = get_pattern_parm (realparm, tmpl);
5672 	  tree pattype = TREE_TYPE (patparm);
5673 	  if (PACK_EXPANSION_P (pattype))
5674 	    pattype = PACK_EXPANSION_PATTERN (pattype);
5675 	  pattype = non_reference (pattype);
5676 
5677 	  if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
5678 	      && (cand->explicit_targs == NULL_TREE
5679 		  || (TREE_VEC_LENGTH (cand->explicit_targs)
5680 		      <= TEMPLATE_TYPE_IDX (pattype))))
5681 	    {
5682 	      pedwarn (input_location, 0, "deducing %qT as %qT",
5683 		       non_reference (TREE_TYPE (patparm)),
5684 		       non_reference (type));
5685 	      pedwarn (input_location, 0, "  in call to %q+D", cand->fn);
5686 	      pedwarn (input_location, 0,
5687 		       "  (you can disable this with -fno-deduce-init-list)");
5688 	    }
5689 	}
5690 
5691       val = convert_like_with_context (conv, arg, fn, i-is_method, complain);
5692 
5693       val = convert_for_arg_passing (type, val);
5694       if (val == error_mark_node)
5695         return error_mark_node;
5696       else
5697         argarray[j++] = val;
5698     }
5699 
5700   /* Default arguments */
5701   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
5702     argarray[j++] = convert_default_arg (TREE_VALUE (parm),
5703 					 TREE_PURPOSE (parm),
5704 					 fn, i - is_method);
5705   /* Ellipsis */
5706   for (; arg_index < VEC_length (tree, args); ++arg_index)
5707     {
5708       tree a = VEC_index (tree, args, arg_index);
5709       if (magic_varargs_p (fn))
5710 	/* Do no conversions for magic varargs.  */;
5711       else
5712 	a = convert_arg_to_ellipsis (a);
5713       argarray[j++] = a;
5714     }
5715 
5716   gcc_assert (j <= nargs);
5717   nargs = j;
5718 
5719   check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
5720 			    nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
5721 
5722   /* Avoid actually calling copy constructors and copy assignment operators,
5723      if possible.  */
5724 
5725   if (! flag_elide_constructors)
5726     /* Do things the hard way.  */;
5727   else if (cand->num_convs == 1
5728            && (DECL_COPY_CONSTRUCTOR_P (fn)
5729                || DECL_MOVE_CONSTRUCTOR_P (fn)))
5730     {
5731       tree targ;
5732       tree arg = argarray[num_artificial_parms_for (fn)];
5733       tree fa;
5734 
5735       /* Pull out the real argument, disregarding const-correctness.  */
5736       targ = arg;
5737       while (CONVERT_EXPR_P (targ)
5738 	     || TREE_CODE (targ) == NON_LVALUE_EXPR)
5739 	targ = TREE_OPERAND (targ, 0);
5740       if (TREE_CODE (targ) == ADDR_EXPR)
5741 	{
5742 	  targ = TREE_OPERAND (targ, 0);
5743 	  if (!same_type_ignoring_top_level_qualifiers_p
5744 	      (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
5745 	    targ = NULL_TREE;
5746 	}
5747       else
5748 	targ = NULL_TREE;
5749 
5750       if (targ)
5751 	arg = targ;
5752       else
5753 	arg = cp_build_indirect_ref (arg, RO_NULL, complain);
5754 
5755       if (TREE_CODE (arg) == TARGET_EXPR
5756 	  && TARGET_EXPR_LIST_INIT_P (arg))
5757 	{
5758 	  /* Copy-list-initialization doesn't require the copy constructor
5759 	     to be defined.  */
5760 	}
5761       /* [class.copy]: the copy constructor is implicitly defined even if
5762 	 the implementation elided its use.  */
5763       else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn))
5764 	       || move_fn_p (fn))
5765 	{
5766 	  mark_used (fn);
5767 	  already_used = true;
5768 	}
5769 
5770       /* If we're creating a temp and we already have one, don't create a
5771 	 new one.  If we're not creating a temp but we get one, use
5772 	 INIT_EXPR to collapse the temp into our target.  Otherwise, if the
5773 	 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5774 	 temp or an INIT_EXPR otherwise.  */
5775       fa = (cand->first_arg != NULL_TREE
5776 	    ? cand->first_arg
5777 	    : VEC_index (tree, args, 0));
5778       if (integer_zerop (fa))
5779 	{
5780 	  if (TREE_CODE (arg) == TARGET_EXPR)
5781 	    return arg;
5782 	  else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
5783 		   && !move_fn_p (fn))
5784 	    return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
5785 	}
5786       else if (TREE_CODE (arg) == TARGET_EXPR
5787 	       || (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
5788 		   && !move_fn_p (fn)))
5789 	{
5790 	  tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
5791 								complain));
5792 
5793 	  val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5794 	  return val;
5795 	}
5796     }
5797   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
5798 	   && copy_fn_p (fn)
5799 	   && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5800     {
5801       tree to = stabilize_reference
5802 	(cp_build_indirect_ref (argarray[0], RO_NULL, complain));
5803       tree type = TREE_TYPE (to);
5804       tree as_base = CLASSTYPE_AS_BASE (type);
5805       tree arg = argarray[1];
5806 
5807       if (is_really_empty_class (type))
5808 	{
5809 	  /* Avoid copying empty classes.  */
5810 	  val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
5811 	  TREE_NO_WARNING (val) = 1;
5812 	  val = build2 (COMPOUND_EXPR, type, val, to);
5813 	  TREE_NO_WARNING (val) = 1;
5814 	}
5815       else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
5816 	{
5817 	  arg = cp_build_indirect_ref (arg, RO_NULL, complain);
5818 	  val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5819 	}
5820       else
5821 	{
5822 	  /* We must only copy the non-tail padding parts.
5823 	     Use __builtin_memcpy for the bitwise copy.
5824 	     FIXME fix 22488 so we can go back to using MODIFY_EXPR
5825 	     instead of an explicit call to memcpy.  */
5826 
5827 	  tree arg0, arg1, arg2, t;
5828 	  tree test = NULL_TREE;
5829 
5830 	  arg2 = TYPE_SIZE_UNIT (as_base);
5831 	  arg1 = arg;
5832 	  arg0 = cp_build_unary_op (ADDR_EXPR, to, 0, complain);
5833 
5834 	  if (!can_trust_pointer_alignment ())
5835 	    {
5836 	      /* If we can't be sure about pointer alignment, a call
5837 		 to __builtin_memcpy is expanded as a call to memcpy, which
5838 		 is invalid with identical args.  Otherwise it is
5839 		 expanded as a block move, which should be safe.  */
5840 	      arg0 = save_expr (arg0);
5841 	      arg1 = save_expr (arg1);
5842 	      test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
5843 	    }
5844 	  t = implicit_built_in_decls[BUILT_IN_MEMCPY];
5845 	  t = build_call_n (t, 3, arg0, arg1, arg2);
5846 
5847 	  t = convert (TREE_TYPE (arg0), t);
5848 	  if (test)
5849 	    t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
5850 	  val = cp_build_indirect_ref (t, RO_NULL, complain);
5851           TREE_NO_WARNING (val) = 1;
5852 	}
5853 
5854       return val;
5855     }
5856 
5857   if (!already_used)
5858     mark_used (fn);
5859 
5860   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5861     {
5862       tree t;
5863       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
5864 				DECL_CONTEXT (fn),
5865 				ba_any, NULL);
5866       gcc_assert (binfo && binfo != error_mark_node);
5867 
5868       /* Warn about deprecated virtual functions now, since we're about
5869 	 to throw away the decl.  */
5870       if (TREE_DEPRECATED (fn))
5871 	warn_deprecated_use (fn, NULL_TREE);
5872 
5873       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
5874       if (TREE_SIDE_EFFECTS (argarray[0]))
5875 	argarray[0] = save_expr (argarray[0]);
5876       t = build_pointer_type (TREE_TYPE (fn));
5877       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
5878 	fn = build_java_interface_fn_ref (fn, argarray[0]);
5879       else
5880 	fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
5881       TREE_TYPE (fn) = t;
5882     }
5883   else
5884     fn = build_addr_func (fn);
5885 
5886   return build_cxx_call (fn, nargs, argarray);
5887 }
5888 
5889 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
5890    This function performs no overload resolution, conversion, or other
5891    high-level operations.  */
5892 
5893 tree
5894 build_cxx_call (tree fn, int nargs, tree *argarray)
5895 {
5896   tree fndecl;
5897 
5898   fn = build_call_a (fn, nargs, argarray);
5899 
5900   /* If this call might throw an exception, note that fact.  */
5901   fndecl = get_callee_fndecl (fn);
5902   if ((!fndecl || !TREE_NOTHROW (fndecl))
5903       && at_function_scope_p ()
5904       && cfun)
5905     cp_function_chain->can_throw = 1;
5906 
5907   /* Check that arguments to builtin functions match the expectations.  */
5908   if (fndecl
5909       && DECL_BUILT_IN (fndecl)
5910       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
5911       && !check_builtin_function_arguments (fndecl, nargs, argarray))
5912     return error_mark_node;
5913 
5914   /* Some built-in function calls will be evaluated at compile-time in
5915      fold ().  */
5916   fn = fold_if_not_in_template (fn);
5917 
5918   if (VOID_TYPE_P (TREE_TYPE (fn)))
5919     return fn;
5920 
5921   fn = require_complete_type (fn);
5922   if (fn == error_mark_node)
5923     return error_mark_node;
5924 
5925   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
5926     fn = build_cplus_new (TREE_TYPE (fn), fn);
5927   return convert_from_reference (fn);
5928 }
5929 
5930 static GTY(()) tree java_iface_lookup_fn;
5931 
5932 /* Make an expression which yields the address of the Java interface
5933    method FN.  This is achieved by generating a call to libjava's
5934    _Jv_LookupInterfaceMethodIdx().  */
5935 
5936 static tree
5937 build_java_interface_fn_ref (tree fn, tree instance)
5938 {
5939   tree lookup_fn, method, idx;
5940   tree klass_ref, iface, iface_ref;
5941   int i;
5942 
5943   if (!java_iface_lookup_fn)
5944     {
5945       tree endlink = build_void_list_node ();
5946       tree t = tree_cons (NULL_TREE, ptr_type_node,
5947 			  tree_cons (NULL_TREE, ptr_type_node,
5948 				     tree_cons (NULL_TREE, java_int_type_node,
5949 						endlink)));
5950       java_iface_lookup_fn
5951 	= add_builtin_function ("_Jv_LookupInterfaceMethodIdx",
5952 				build_function_type (ptr_type_node, t),
5953 				0, NOT_BUILT_IN, NULL, NULL_TREE);
5954     }
5955 
5956   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5957      This is the first entry in the vtable.  */
5958   klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
5959                                                      tf_warning_or_error),
5960 			      integer_zero_node);
5961 
5962   /* Get the java.lang.Class pointer for the interface being called.  */
5963   iface = DECL_CONTEXT (fn);
5964   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5965   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5966       || DECL_CONTEXT (iface_ref) != iface)
5967     {
5968       error ("could not find class$ field in java interface type %qT",
5969 		iface);
5970       return error_mark_node;
5971     }
5972   iface_ref = build_address (iface_ref);
5973   iface_ref = convert (build_pointer_type (iface), iface_ref);
5974 
5975   /* Determine the itable index of FN.  */
5976   i = 1;
5977   for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5978     {
5979       if (!DECL_VIRTUAL_P (method))
5980 	continue;
5981       if (fn == method)
5982 	break;
5983       i++;
5984     }
5985   idx = build_int_cst (NULL_TREE, i);
5986 
5987   lookup_fn = build1 (ADDR_EXPR,
5988 		      build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5989 		      java_iface_lookup_fn);
5990   return build_call_nary (ptr_type_node, lookup_fn,
5991 			  3, klass_ref, iface_ref, idx);
5992 }
5993 
5994 /* Returns the value to use for the in-charge parameter when making a
5995    call to a function with the indicated NAME.
5996 
5997    FIXME:Can't we find a neater way to do this mapping?  */
5998 
5999 tree
6000 in_charge_arg_for_name (tree name)
6001 {
6002  if (name == base_ctor_identifier
6003       || name == base_dtor_identifier)
6004     return integer_zero_node;
6005   else if (name == complete_ctor_identifier)
6006     return integer_one_node;
6007   else if (name == complete_dtor_identifier)
6008     return integer_two_node;
6009   else if (name == deleting_dtor_identifier)
6010     return integer_three_node;
6011 
6012   /* This function should only be called with one of the names listed
6013      above.  */
6014   gcc_unreachable ();
6015   return NULL_TREE;
6016 }
6017 
6018 /* Build a call to a constructor, destructor, or an assignment
6019    operator for INSTANCE, an expression with class type.  NAME
6020    indicates the special member function to call; *ARGS are the
6021    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
6022    indicates the base of INSTANCE that is to be passed as the `this'
6023    parameter to the member function called.
6024 
6025    FLAGS are the LOOKUP_* flags to use when processing the call.
6026 
6027    If NAME indicates a complete object constructor, INSTANCE may be
6028    NULL_TREE.  In this case, the caller will call build_cplus_new to
6029    store the newly constructed object into a VAR_DECL.  */
6030 
6031 tree
6032 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
6033 			   tree binfo, int flags, tsubst_flags_t complain)
6034 {
6035   tree fns;
6036   /* The type of the subobject to be constructed or destroyed.  */
6037   tree class_type;
6038   VEC(tree,gc) *allocated = NULL;
6039   tree ret;
6040 
6041   gcc_assert (name == complete_ctor_identifier
6042 	      || name == base_ctor_identifier
6043 	      || name == complete_dtor_identifier
6044 	      || name == base_dtor_identifier
6045 	      || name == deleting_dtor_identifier
6046 	      || name == ansi_assopname (NOP_EXPR));
6047   if (TYPE_P (binfo))
6048     {
6049       /* Resolve the name.  */
6050       if (!complete_type_or_else (binfo, NULL_TREE))
6051 	return error_mark_node;
6052 
6053       binfo = TYPE_BINFO (binfo);
6054     }
6055 
6056   gcc_assert (binfo != NULL_TREE);
6057 
6058   class_type = BINFO_TYPE (binfo);
6059 
6060   /* Handle the special case where INSTANCE is NULL_TREE.  */
6061   if (name == complete_ctor_identifier && !instance)
6062     {
6063       instance = build_int_cst (build_pointer_type (class_type), 0);
6064       instance = build1 (INDIRECT_REF, class_type, instance);
6065     }
6066   else
6067     {
6068       if (name == complete_dtor_identifier
6069 	  || name == base_dtor_identifier
6070 	  || name == deleting_dtor_identifier)
6071 	gcc_assert (args == NULL || VEC_empty (tree, *args));
6072 
6073       /* Convert to the base class, if necessary.  */
6074       if (!same_type_ignoring_top_level_qualifiers_p
6075 	  (TREE_TYPE (instance), BINFO_TYPE (binfo)))
6076 	{
6077 	  if (name != ansi_assopname (NOP_EXPR))
6078 	    /* For constructors and destructors, either the base is
6079 	       non-virtual, or it is virtual but we are doing the
6080 	       conversion from a constructor or destructor for the
6081 	       complete object.  In either case, we can convert
6082 	       statically.  */
6083 	    instance = convert_to_base_statically (instance, binfo);
6084 	  else
6085 	    /* However, for assignment operators, we must convert
6086 	       dynamically if the base is virtual.  */
6087 	    instance = build_base_path (PLUS_EXPR, instance,
6088 					binfo, /*nonnull=*/1);
6089 	}
6090     }
6091 
6092   gcc_assert (instance != NULL_TREE);
6093 
6094   fns = lookup_fnfields (binfo, name, 1);
6095 
6096   /* When making a call to a constructor or destructor for a subobject
6097      that uses virtual base classes, pass down a pointer to a VTT for
6098      the subobject.  */
6099   if ((name == base_ctor_identifier
6100        || name == base_dtor_identifier)
6101       && CLASSTYPE_VBASECLASSES (class_type))
6102     {
6103       tree vtt;
6104       tree sub_vtt;
6105 
6106       /* If the current function is a complete object constructor
6107 	 or destructor, then we fetch the VTT directly.
6108 	 Otherwise, we look it up using the VTT we were given.  */
6109       vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
6110       vtt = decay_conversion (vtt);
6111       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
6112 		    build2 (EQ_EXPR, boolean_type_node,
6113 			    current_in_charge_parm, integer_zero_node),
6114 		    current_vtt_parm,
6115 		    vtt);
6116       gcc_assert (BINFO_SUBVTT_INDEX (binfo));
6117       sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
6118 			BINFO_SUBVTT_INDEX (binfo));
6119 
6120       if (args == NULL)
6121 	{
6122 	  allocated = make_tree_vector ();
6123 	  args = &allocated;
6124 	}
6125 
6126       VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
6127     }
6128 
6129   ret = build_new_method_call (instance, fns, args,
6130 			       TYPE_BINFO (BINFO_TYPE (binfo)),
6131 			       flags, /*fn=*/NULL,
6132 			       complain);
6133 
6134   if (allocated != NULL)
6135     release_tree_vector (allocated);
6136 
6137   return ret;
6138 }
6139 
6140 /* Return the NAME, as a C string.  The NAME indicates a function that
6141    is a member of TYPE.  *FREE_P is set to true if the caller must
6142    free the memory returned.
6143 
6144    Rather than go through all of this, we should simply set the names
6145    of constructors and destructors appropriately, and dispense with
6146    ctor_identifier, dtor_identifier, etc.  */
6147 
6148 static char *
6149 name_as_c_string (tree name, tree type, bool *free_p)
6150 {
6151   char *pretty_name;
6152 
6153   /* Assume that we will not allocate memory.  */
6154   *free_p = false;
6155   /* Constructors and destructors are special.  */
6156   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6157     {
6158       pretty_name
6159 	= CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
6160       /* For a destructor, add the '~'.  */
6161       if (name == complete_dtor_identifier
6162 	  || name == base_dtor_identifier
6163 	  || name == deleting_dtor_identifier)
6164 	{
6165 	  pretty_name = concat ("~", pretty_name, NULL);
6166 	  /* Remember that we need to free the memory allocated.  */
6167 	  *free_p = true;
6168 	}
6169     }
6170   else if (IDENTIFIER_TYPENAME_P (name))
6171     {
6172       pretty_name = concat ("operator ",
6173 			    type_as_string_translate (TREE_TYPE (name),
6174 						      TFF_PLAIN_IDENTIFIER),
6175 			    NULL);
6176       /* Remember that we need to free the memory allocated.  */
6177       *free_p = true;
6178     }
6179   else
6180     pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
6181 
6182   return pretty_name;
6183 }
6184 
6185 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
6186    be set, upon return, to the function called.  ARGS may be NULL.
6187    This may change ARGS.  */
6188 
6189 tree
6190 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
6191 		       tree conversion_path, int flags,
6192 		       tree *fn_p, tsubst_flags_t complain)
6193 {
6194   struct z_candidate *candidates = 0, *cand;
6195   tree explicit_targs = NULL_TREE;
6196   tree basetype = NULL_TREE;
6197   tree access_binfo;
6198   tree optype;
6199   tree first_mem_arg = NULL_TREE;
6200   tree instance_ptr;
6201   tree name;
6202   bool skip_first_for_error;
6203   VEC(tree,gc) *user_args;
6204   tree call;
6205   tree fn;
6206   tree class_type;
6207   int template_only = 0;
6208   bool any_viable_p;
6209   tree orig_instance;
6210   tree orig_fns;
6211   VEC(tree,gc) *orig_args = NULL;
6212   void *p;
6213 
6214   gcc_assert (instance != NULL_TREE);
6215 
6216   /* We don't know what function we're going to call, yet.  */
6217   if (fn_p)
6218     *fn_p = NULL_TREE;
6219 
6220   if (error_operand_p (instance)
6221       || error_operand_p (fns))
6222     return error_mark_node;
6223 
6224   if (!BASELINK_P (fns))
6225     {
6226       if (complain & tf_error)
6227 	error ("call to non-function %qD", fns);
6228       return error_mark_node;
6229     }
6230 
6231   orig_instance = instance;
6232   orig_fns = fns;
6233 
6234   /* Dismantle the baselink to collect all the information we need.  */
6235   if (!conversion_path)
6236     conversion_path = BASELINK_BINFO (fns);
6237   access_binfo = BASELINK_ACCESS_BINFO (fns);
6238   optype = BASELINK_OPTYPE (fns);
6239   fns = BASELINK_FUNCTIONS (fns);
6240   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
6241     {
6242       explicit_targs = TREE_OPERAND (fns, 1);
6243       fns = TREE_OPERAND (fns, 0);
6244       template_only = 1;
6245     }
6246   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
6247 	      || TREE_CODE (fns) == TEMPLATE_DECL
6248 	      || TREE_CODE (fns) == OVERLOAD);
6249   fn = get_first_fn (fns);
6250   name = DECL_NAME (fn);
6251 
6252   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
6253   gcc_assert (CLASS_TYPE_P (basetype));
6254 
6255   if (processing_template_decl)
6256     {
6257       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
6258       instance = build_non_dependent_expr (instance);
6259       if (args != NULL)
6260 	make_args_non_dependent (*args);
6261     }
6262 
6263   user_args = args == NULL ? NULL : *args;
6264   /* Under DR 147 A::A() is an invalid constructor call,
6265      not a functional cast.  */
6266   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
6267     {
6268       if (! (complain & tf_error))
6269 	return error_mark_node;
6270 
6271       permerror (input_location,
6272 		 "cannot call constructor %<%T::%D%> directly",
6273 		 basetype, name);
6274       permerror (input_location, "  for a function-style cast, remove the "
6275 		 "redundant %<::%D%>", name);
6276       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
6277 				    complain);
6278       return call;
6279     }
6280 
6281   /* Figure out whether to skip the first argument for the error
6282      message we will display to users if an error occurs.  We don't
6283      want to display any compiler-generated arguments.  The "this"
6284      pointer hasn't been added yet.  However, we must remove the VTT
6285      pointer if this is a call to a base-class constructor or
6286      destructor.  */
6287   skip_first_for_error = false;
6288   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6289     {
6290       /* Callers should explicitly indicate whether they want to construct
6291 	 the complete object or just the part without virtual bases.  */
6292       gcc_assert (name != ctor_identifier);
6293       /* Similarly for destructors.  */
6294       gcc_assert (name != dtor_identifier);
6295       /* Remove the VTT pointer, if present.  */
6296       if ((name == base_ctor_identifier || name == base_dtor_identifier)
6297 	  && CLASSTYPE_VBASECLASSES (basetype))
6298 	skip_first_for_error = true;
6299     }
6300 
6301   /* Process the argument list.  */
6302   if (args != NULL && *args != NULL)
6303     {
6304       *args = resolve_args (*args);
6305       if (*args == NULL)
6306 	return error_mark_node;
6307     }
6308 
6309   instance_ptr = build_this (instance);
6310 
6311   /* It's OK to call destructors and constructors on cv-qualified objects.
6312      Therefore, convert the INSTANCE_PTR to the unqualified type, if
6313      necessary.  */
6314   if (DECL_DESTRUCTOR_P (fn)
6315       || DECL_CONSTRUCTOR_P (fn))
6316     {
6317       tree type = build_pointer_type (basetype);
6318       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
6319 	instance_ptr = build_nop (type, instance_ptr);
6320     }
6321   if (DECL_DESTRUCTOR_P (fn))
6322     name = complete_dtor_identifier;
6323 
6324   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
6325      initializer, not T({ }).  If the type doesn't have a list ctor,
6326      break apart the list into separate ctor args.  */
6327   if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
6328       && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
6329       && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0))
6330       && !TYPE_HAS_LIST_CTOR (basetype))
6331     {
6332       gcc_assert (VEC_length (tree, *args) == 1
6333 		  && !(flags & LOOKUP_ONLYCONVERTING));
6334       *args = ctor_to_vec (VEC_index (tree, *args, 0));
6335     }
6336 
6337   class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
6338   first_mem_arg = instance_ptr;
6339 
6340   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6341   p = conversion_obstack_alloc (0);
6342 
6343   for (fn = fns; fn; fn = OVL_NEXT (fn))
6344     {
6345       tree t = OVL_CURRENT (fn);
6346       tree this_first_arg;
6347 
6348       /* We can end up here for copy-init of same or base class.  */
6349       if ((flags & LOOKUP_ONLYCONVERTING)
6350 	  && DECL_NONCONVERTING_P (t))
6351 	continue;
6352 
6353       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
6354 	this_first_arg = first_mem_arg;
6355       else
6356 	this_first_arg = NULL_TREE;
6357 
6358       if (TREE_CODE (t) == TEMPLATE_DECL)
6359 	/* A member template.  */
6360 	add_template_candidate (&candidates, t,
6361 				class_type,
6362 				explicit_targs,
6363 				this_first_arg,
6364 				args == NULL ? NULL : *args,
6365 				optype,
6366 				access_binfo,
6367 				conversion_path,
6368 				flags,
6369 				DEDUCE_CALL);
6370       else if (! template_only)
6371 	add_function_candidate (&candidates, t,
6372 				class_type,
6373 				this_first_arg,
6374 				args == NULL ? NULL : *args,
6375 				access_binfo,
6376 				conversion_path,
6377 				flags);
6378     }
6379 
6380   candidates = splice_viable (candidates, pedantic, &any_viable_p);
6381   if (!any_viable_p)
6382     {
6383       if (complain & tf_error)
6384 	{
6385 	  if (!COMPLETE_TYPE_P (basetype))
6386 	    cxx_incomplete_type_error (instance_ptr, basetype);
6387 	  else
6388 	    {
6389 	      char *pretty_name;
6390 	      bool free_p;
6391 	      tree arglist;
6392 
6393 	      pretty_name = name_as_c_string (name, basetype, &free_p);
6394 	      arglist = build_tree_list_vec (user_args);
6395 	      if (skip_first_for_error)
6396 		arglist = TREE_CHAIN (arglist);
6397 	      error ("no matching function for call to %<%T::%s(%A)%#V%>",
6398 		     basetype, pretty_name, arglist,
6399 		     TREE_TYPE (TREE_TYPE (instance_ptr)));
6400 	      if (free_p)
6401 		free (pretty_name);
6402 	    }
6403 	  print_z_candidates (candidates);
6404 	}
6405       call = error_mark_node;
6406     }
6407   else
6408     {
6409       cand = tourney (candidates);
6410       if (cand == 0)
6411 	{
6412 	  char *pretty_name;
6413 	  bool free_p;
6414 	  tree arglist;
6415 
6416 	  if (complain & tf_error)
6417 	    {
6418 	      pretty_name = name_as_c_string (name, basetype, &free_p);
6419 	      arglist = build_tree_list_vec (user_args);
6420 	      if (skip_first_for_error)
6421 		arglist = TREE_CHAIN (arglist);
6422 	      error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
6423 		     arglist);
6424 	      print_z_candidates (candidates);
6425 	      if (free_p)
6426 		free (pretty_name);
6427 	    }
6428 	  call = error_mark_node;
6429 	}
6430       else
6431 	{
6432 	  fn = cand->fn;
6433 
6434 	  if (!(flags & LOOKUP_NONVIRTUAL)
6435 	      && DECL_PURE_VIRTUAL_P (fn)
6436 	      && instance == current_class_ref
6437 	      && (DECL_CONSTRUCTOR_P (current_function_decl)
6438 		  || DECL_DESTRUCTOR_P (current_function_decl))
6439 	      && (complain & tf_warning))
6440 	    /* This is not an error, it is runtime undefined
6441 	       behavior.  */
6442 	    warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
6443 		      "abstract virtual %q#D called from constructor"
6444 		      : "abstract virtual %q#D called from destructor"),
6445 		     fn);
6446 
6447 	  if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
6448 	      && is_dummy_object (instance_ptr))
6449 	    {
6450 	      if (complain & tf_error)
6451 		error ("cannot call member function %qD without object",
6452 		       fn);
6453 	      call = error_mark_node;
6454 	    }
6455 	  else
6456 	    {
6457 	      if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
6458 		  && resolves_to_fixed_type_p (instance, 0))
6459 		flags |= LOOKUP_NONVIRTUAL;
6460 	      /* Now we know what function is being called.  */
6461 	      if (fn_p)
6462 		*fn_p = fn;
6463 	      /* Build the actual CALL_EXPR.  */
6464 	      call = build_over_call (cand, flags, complain);
6465 	      /* In an expression of the form `a->f()' where `f' turns
6466 		 out to be a static member function, `a' is
6467 		 none-the-less evaluated.  */
6468 	      if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
6469 		  && !is_dummy_object (instance_ptr)
6470 		  && TREE_SIDE_EFFECTS (instance_ptr))
6471 		call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
6472 			       instance_ptr, call);
6473 	      else if (call != error_mark_node
6474 		       && DECL_DESTRUCTOR_P (cand->fn)
6475 		       && !VOID_TYPE_P (TREE_TYPE (call)))
6476 		/* An explicit call of the form "x->~X()" has type
6477 		   "void".  However, on platforms where destructors
6478 		   return "this" (i.e., those where
6479 		   targetm.cxx.cdtor_returns_this is true), such calls
6480 		   will appear to have a return value of pointer type
6481 		   to the low-level call machinery.  We do not want to
6482 		   change the low-level machinery, since we want to be
6483 		   able to optimize "delete f()" on such platforms as
6484 		   "operator delete(~X(f()))" (rather than generating
6485 		   "t = f(), ~X(t), operator delete (t)").  */
6486 		call = build_nop (void_type_node, call);
6487 	    }
6488 	}
6489     }
6490 
6491   if (processing_template_decl && call != error_mark_node)
6492     {
6493       bool cast_to_void = false;
6494 
6495       if (TREE_CODE (call) == COMPOUND_EXPR)
6496 	call = TREE_OPERAND (call, 1);
6497       else if (TREE_CODE (call) == NOP_EXPR)
6498 	{
6499 	  cast_to_void = true;
6500 	  call = TREE_OPERAND (call, 0);
6501 	}
6502       if (TREE_CODE (call) == INDIRECT_REF)
6503 	call = TREE_OPERAND (call, 0);
6504       call = (build_min_non_dep_call_vec
6505 	      (call,
6506 	       build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
6507 			  orig_instance, orig_fns, NULL_TREE),
6508 	       orig_args));
6509       call = convert_from_reference (call);
6510       if (cast_to_void)
6511 	call = build_nop (void_type_node, call);
6512     }
6513 
6514  /* Free all the conversions we allocated.  */
6515   obstack_free (&conversion_obstack, p);
6516 
6517   if (orig_args != NULL)
6518     release_tree_vector (orig_args);
6519 
6520   return call;
6521 }
6522 
6523 /* Returns true iff standard conversion sequence ICS1 is a proper
6524    subsequence of ICS2.  */
6525 
6526 static bool
6527 is_subseq (conversion *ics1, conversion *ics2)
6528 {
6529   /* We can assume that a conversion of the same code
6530      between the same types indicates a subsequence since we only get
6531      here if the types we are converting from are the same.  */
6532 
6533   while (ics1->kind == ck_rvalue
6534 	 || ics1->kind == ck_lvalue)
6535     ics1 = ics1->u.next;
6536 
6537   while (1)
6538     {
6539       while (ics2->kind == ck_rvalue
6540 	     || ics2->kind == ck_lvalue)
6541 	ics2 = ics2->u.next;
6542 
6543       if (ics2->kind == ck_user
6544 	  || ics2->kind == ck_ambig
6545 	  || ics2->kind == ck_identity)
6546 	/* At this point, ICS1 cannot be a proper subsequence of
6547 	   ICS2.  We can get a USER_CONV when we are comparing the
6548 	   second standard conversion sequence of two user conversion
6549 	   sequences.  */
6550 	return false;
6551 
6552       ics2 = ics2->u.next;
6553 
6554       if (ics2->kind == ics1->kind
6555 	  && same_type_p (ics2->type, ics1->type)
6556 	  && same_type_p (ics2->u.next->type,
6557 			  ics1->u.next->type))
6558 	return true;
6559     }
6560 }
6561 
6562 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
6563    be any _TYPE nodes.  */
6564 
6565 bool
6566 is_properly_derived_from (tree derived, tree base)
6567 {
6568   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
6569     return false;
6570 
6571   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
6572      considers every class derived from itself.  */
6573   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
6574 	  && DERIVED_FROM_P (base, derived));
6575 }
6576 
6577 /* We build the ICS for an implicit object parameter as a pointer
6578    conversion sequence.  However, such a sequence should be compared
6579    as if it were a reference conversion sequence.  If ICS is the
6580    implicit conversion sequence for an implicit object parameter,
6581    modify it accordingly.  */
6582 
6583 static void
6584 maybe_handle_implicit_object (conversion **ics)
6585 {
6586   if ((*ics)->this_p)
6587     {
6588       /* [over.match.funcs]
6589 
6590 	 For non-static member functions, the type of the
6591 	 implicit object parameter is "reference to cv X"
6592 	 where X is the class of which the function is a
6593 	 member and cv is the cv-qualification on the member
6594 	 function declaration.  */
6595       conversion *t = *ics;
6596       tree reference_type;
6597 
6598       /* The `this' parameter is a pointer to a class type.  Make the
6599 	 implicit conversion talk about a reference to that same class
6600 	 type.  */
6601       reference_type = TREE_TYPE (t->type);
6602       reference_type = build_reference_type (reference_type);
6603 
6604       if (t->kind == ck_qual)
6605 	t = t->u.next;
6606       if (t->kind == ck_ptr)
6607 	t = t->u.next;
6608       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
6609       t = direct_reference_binding (reference_type, t);
6610       t->this_p = 1;
6611       t->rvaluedness_matches_p = 0;
6612       *ics = t;
6613     }
6614 }
6615 
6616 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6617    and return the initial reference binding conversion. Otherwise,
6618    leave *ICS unchanged and return NULL.  */
6619 
6620 static conversion *
6621 maybe_handle_ref_bind (conversion **ics)
6622 {
6623   if ((*ics)->kind == ck_ref_bind)
6624     {
6625       conversion *old_ics = *ics;
6626       *ics = old_ics->u.next;
6627       (*ics)->user_conv_p = old_ics->user_conv_p;
6628       return old_ics;
6629     }
6630 
6631   return NULL;
6632 }
6633 
6634 /* Compare two implicit conversion sequences according to the rules set out in
6635    [over.ics.rank].  Return values:
6636 
6637       1: ics1 is better than ics2
6638      -1: ics2 is better than ics1
6639       0: ics1 and ics2 are indistinguishable */
6640 
6641 static int
6642 compare_ics (conversion *ics1, conversion *ics2)
6643 {
6644   tree from_type1;
6645   tree from_type2;
6646   tree to_type1;
6647   tree to_type2;
6648   tree deref_from_type1 = NULL_TREE;
6649   tree deref_from_type2 = NULL_TREE;
6650   tree deref_to_type1 = NULL_TREE;
6651   tree deref_to_type2 = NULL_TREE;
6652   conversion_rank rank1, rank2;
6653 
6654   /* REF_BINDING is nonzero if the result of the conversion sequence
6655      is a reference type.   In that case REF_CONV is the reference
6656      binding conversion. */
6657   conversion *ref_conv1;
6658   conversion *ref_conv2;
6659 
6660   /* Handle implicit object parameters.  */
6661   maybe_handle_implicit_object (&ics1);
6662   maybe_handle_implicit_object (&ics2);
6663 
6664   /* Handle reference parameters.  */
6665   ref_conv1 = maybe_handle_ref_bind (&ics1);
6666   ref_conv2 = maybe_handle_ref_bind (&ics2);
6667 
6668   /* List-initialization sequence L1 is a better conversion sequence than
6669      list-initialization sequence L2 if L1 converts to
6670      std::initializer_list<X> for some X and L2 does not.  */
6671   if (ics1->kind == ck_list && ics2->kind != ck_list)
6672     return 1;
6673   if (ics2->kind == ck_list && ics1->kind != ck_list)
6674     return -1;
6675 
6676   /* [over.ics.rank]
6677 
6678      When  comparing  the  basic forms of implicit conversion sequences (as
6679      defined in _over.best.ics_)
6680 
6681      --a standard conversion sequence (_over.ics.scs_) is a better
6682        conversion sequence than a user-defined conversion sequence
6683        or an ellipsis conversion sequence, and
6684 
6685      --a user-defined conversion sequence (_over.ics.user_) is a
6686        better conversion sequence than an ellipsis conversion sequence
6687        (_over.ics.ellipsis_).  */
6688   rank1 = CONVERSION_RANK (ics1);
6689   rank2 = CONVERSION_RANK (ics2);
6690 
6691   if (rank1 > rank2)
6692     return -1;
6693   else if (rank1 < rank2)
6694     return 1;
6695 
6696   if (rank1 == cr_bad)
6697     {
6698       /* XXX Isn't this an extension? */
6699       /* Both ICS are bad.  We try to make a decision based on what
6700 	 would have happened if they'd been good.  */
6701       if (ics1->user_conv_p > ics2->user_conv_p
6702 	  || ics1->rank  > ics2->rank)
6703 	return -1;
6704       else if (ics1->user_conv_p < ics2->user_conv_p
6705 	       || ics1->rank < ics2->rank)
6706 	return 1;
6707 
6708       /* We couldn't make up our minds; try to figure it out below.  */
6709     }
6710 
6711   if (ics1->ellipsis_p || ics1->kind == ck_list)
6712     /* Both conversions are ellipsis conversions or both are building a
6713        std::initializer_list.  */
6714     return 0;
6715 
6716   /* User-defined  conversion sequence U1 is a better conversion sequence
6717      than another user-defined conversion sequence U2 if they contain the
6718      same user-defined conversion operator or constructor and if the sec-
6719      ond standard conversion sequence of U1 is  better  than  the  second
6720      standard conversion sequence of U2.  */
6721 
6722   if (ics1->user_conv_p)
6723     {
6724       conversion *t1;
6725       conversion *t2;
6726 
6727       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
6728 	if (t1->kind == ck_ambig || t1->kind == ck_aggr)
6729 	  return 0;
6730       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
6731 	if (t2->kind == ck_ambig || t2->kind == ck_aggr)
6732 	  return 0;
6733 
6734       if (t1->cand->fn != t2->cand->fn)
6735 	return 0;
6736 
6737       /* We can just fall through here, after setting up
6738 	 FROM_TYPE1 and FROM_TYPE2.  */
6739       from_type1 = t1->type;
6740       from_type2 = t2->type;
6741     }
6742   else
6743     {
6744       conversion *t1;
6745       conversion *t2;
6746 
6747       /* We're dealing with two standard conversion sequences.
6748 
6749 	 [over.ics.rank]
6750 
6751 	 Standard conversion sequence S1 is a better conversion
6752 	 sequence than standard conversion sequence S2 if
6753 
6754 	 --S1 is a proper subsequence of S2 (comparing the conversion
6755 	   sequences in the canonical form defined by _over.ics.scs_,
6756 	   excluding any Lvalue Transformation; the identity
6757 	   conversion sequence is considered to be a subsequence of
6758 	   any non-identity conversion sequence */
6759 
6760       t1 = ics1;
6761       while (t1->kind != ck_identity)
6762 	t1 = t1->u.next;
6763       from_type1 = t1->type;
6764 
6765       t2 = ics2;
6766       while (t2->kind != ck_identity)
6767 	t2 = t2->u.next;
6768       from_type2 = t2->type;
6769     }
6770 
6771   /* One sequence can only be a subsequence of the other if they start with
6772      the same type.  They can start with different types when comparing the
6773      second standard conversion sequence in two user-defined conversion
6774      sequences.  */
6775   if (same_type_p (from_type1, from_type2))
6776     {
6777       if (is_subseq (ics1, ics2))
6778 	return 1;
6779       if (is_subseq (ics2, ics1))
6780 	return -1;
6781     }
6782 
6783   /* [over.ics.rank]
6784 
6785      Or, if not that,
6786 
6787      --the rank of S1 is better than the rank of S2 (by the rules
6788        defined below):
6789 
6790     Standard conversion sequences are ordered by their ranks: an Exact
6791     Match is a better conversion than a Promotion, which is a better
6792     conversion than a Conversion.
6793 
6794     Two conversion sequences with the same rank are indistinguishable
6795     unless one of the following rules applies:
6796 
6797     --A conversion that is not a conversion of a pointer, or pointer
6798       to member, to bool is better than another conversion that is such
6799       a conversion.
6800 
6801     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6802     so that we do not have to check it explicitly.  */
6803   if (ics1->rank < ics2->rank)
6804     return 1;
6805   else if (ics2->rank < ics1->rank)
6806     return -1;
6807 
6808   to_type1 = ics1->type;
6809   to_type2 = ics2->type;
6810 
6811   /* A conversion from scalar arithmetic type to complex is worse than a
6812      conversion between scalar arithmetic types.  */
6813   if (same_type_p (from_type1, from_type2)
6814       && ARITHMETIC_TYPE_P (from_type1)
6815       && ARITHMETIC_TYPE_P (to_type1)
6816       && ARITHMETIC_TYPE_P (to_type2)
6817       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
6818 	  != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
6819     {
6820       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
6821 	return -1;
6822       else
6823 	return 1;
6824     }
6825 
6826   if (TYPE_PTR_P (from_type1)
6827       && TYPE_PTR_P (from_type2)
6828       && TYPE_PTR_P (to_type1)
6829       && TYPE_PTR_P (to_type2))
6830     {
6831       deref_from_type1 = TREE_TYPE (from_type1);
6832       deref_from_type2 = TREE_TYPE (from_type2);
6833       deref_to_type1 = TREE_TYPE (to_type1);
6834       deref_to_type2 = TREE_TYPE (to_type2);
6835     }
6836   /* The rules for pointers to members A::* are just like the rules
6837      for pointers A*, except opposite: if B is derived from A then
6838      A::* converts to B::*, not vice versa.  For that reason, we
6839      switch the from_ and to_ variables here.  */
6840   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
6841 	    && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
6842 	   || (TYPE_PTRMEMFUNC_P (from_type1)
6843 	       && TYPE_PTRMEMFUNC_P (from_type2)
6844 	       && TYPE_PTRMEMFUNC_P (to_type1)
6845 	       && TYPE_PTRMEMFUNC_P (to_type2)))
6846     {
6847       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
6848       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
6849       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
6850       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
6851     }
6852 
6853   if (deref_from_type1 != NULL_TREE
6854       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
6855       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
6856     {
6857       /* This was one of the pointer or pointer-like conversions.
6858 
6859 	 [over.ics.rank]
6860 
6861 	 --If class B is derived directly or indirectly from class A,
6862 	   conversion of B* to A* is better than conversion of B* to
6863 	   void*, and conversion of A* to void* is better than
6864 	   conversion of B* to void*.  */
6865       if (TREE_CODE (deref_to_type1) == VOID_TYPE
6866 	  && TREE_CODE (deref_to_type2) == VOID_TYPE)
6867 	{
6868 	  if (is_properly_derived_from (deref_from_type1,
6869 					deref_from_type2))
6870 	    return -1;
6871 	  else if (is_properly_derived_from (deref_from_type2,
6872 					     deref_from_type1))
6873 	    return 1;
6874 	}
6875       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
6876 	       || TREE_CODE (deref_to_type2) == VOID_TYPE)
6877 	{
6878 	  if (same_type_p (deref_from_type1, deref_from_type2))
6879 	    {
6880 	      if (TREE_CODE (deref_to_type2) == VOID_TYPE)
6881 		{
6882 		  if (is_properly_derived_from (deref_from_type1,
6883 						deref_to_type1))
6884 		    return 1;
6885 		}
6886 	      /* We know that DEREF_TO_TYPE1 is `void' here.  */
6887 	      else if (is_properly_derived_from (deref_from_type1,
6888 						 deref_to_type2))
6889 		return -1;
6890 	    }
6891 	}
6892       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
6893 	       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
6894 	{
6895 	  /* [over.ics.rank]
6896 
6897 	     --If class B is derived directly or indirectly from class A
6898 	       and class C is derived directly or indirectly from B,
6899 
6900 	     --conversion of C* to B* is better than conversion of C* to
6901 	       A*,
6902 
6903 	     --conversion of B* to A* is better than conversion of C* to
6904 	       A*  */
6905 	  if (same_type_p (deref_from_type1, deref_from_type2))
6906 	    {
6907 	      if (is_properly_derived_from (deref_to_type1,
6908 					    deref_to_type2))
6909 		return 1;
6910 	      else if (is_properly_derived_from (deref_to_type2,
6911 						 deref_to_type1))
6912 		return -1;
6913 	    }
6914 	  else if (same_type_p (deref_to_type1, deref_to_type2))
6915 	    {
6916 	      if (is_properly_derived_from (deref_from_type2,
6917 					    deref_from_type1))
6918 		return 1;
6919 	      else if (is_properly_derived_from (deref_from_type1,
6920 						 deref_from_type2))
6921 		return -1;
6922 	    }
6923 	}
6924     }
6925   else if (CLASS_TYPE_P (non_reference (from_type1))
6926 	   && same_type_p (from_type1, from_type2))
6927     {
6928       tree from = non_reference (from_type1);
6929 
6930       /* [over.ics.rank]
6931 
6932 	 --binding of an expression of type C to a reference of type
6933 	   B& is better than binding an expression of type C to a
6934 	   reference of type A&
6935 
6936 	 --conversion of C to B is better than conversion of C to A,  */
6937       if (is_properly_derived_from (from, to_type1)
6938 	  && is_properly_derived_from (from, to_type2))
6939 	{
6940 	  if (is_properly_derived_from (to_type1, to_type2))
6941 	    return 1;
6942 	  else if (is_properly_derived_from (to_type2, to_type1))
6943 	    return -1;
6944 	}
6945     }
6946   else if (CLASS_TYPE_P (non_reference (to_type1))
6947 	   && same_type_p (to_type1, to_type2))
6948     {
6949       tree to = non_reference (to_type1);
6950 
6951       /* [over.ics.rank]
6952 
6953 	 --binding of an expression of type B to a reference of type
6954 	   A& is better than binding an expression of type C to a
6955 	   reference of type A&,
6956 
6957 	 --conversion of B to A is better than conversion of C to A  */
6958       if (is_properly_derived_from (from_type1, to)
6959 	  && is_properly_derived_from (from_type2, to))
6960 	{
6961 	  if (is_properly_derived_from (from_type2, from_type1))
6962 	    return 1;
6963 	  else if (is_properly_derived_from (from_type1, from_type2))
6964 	    return -1;
6965 	}
6966     }
6967 
6968   /* [over.ics.rank]
6969 
6970      --S1 and S2 differ only in their qualification conversion and  yield
6971        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
6972        qualification signature of type T1 is a proper subset of  the  cv-
6973        qualification signature of type T2  */
6974   if (ics1->kind == ck_qual
6975       && ics2->kind == ck_qual
6976       && same_type_p (from_type1, from_type2))
6977     {
6978       int result = comp_cv_qual_signature (to_type1, to_type2);
6979       if (result != 0)
6980 	return result;
6981     }
6982 
6983   /* [over.ics.rank]
6984 
6985      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
6986      to an implicit object parameter, and either S1 binds an lvalue reference
6987      to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
6988      reference to an rvalue and S2 binds an lvalue reference
6989      (C++0x draft standard, 13.3.3.2)
6990 
6991      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
6992      types to which the references refer are the same type except for
6993      top-level cv-qualifiers, and the type to which the reference
6994      initialized by S2 refers is more cv-qualified than the type to
6995      which the reference initialized by S1 refers */
6996 
6997   if (ref_conv1 && ref_conv2)
6998     {
6999       if (!ref_conv1->this_p && !ref_conv2->this_p
7000 	  && (TYPE_REF_IS_RVALUE (ref_conv1->type)
7001 	      != TYPE_REF_IS_RVALUE (ref_conv2->type)))
7002 	{
7003 	  if (ref_conv1->rvaluedness_matches_p)
7004 	    return 1;
7005 	  if (ref_conv2->rvaluedness_matches_p)
7006 	    return -1;
7007 	}
7008 
7009       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
7010 	return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
7011 				      TREE_TYPE (ref_conv1->type));
7012     }
7013 
7014   /* Neither conversion sequence is better than the other.  */
7015   return 0;
7016 }
7017 
7018 /* The source type for this standard conversion sequence.  */
7019 
7020 static tree
7021 source_type (conversion *t)
7022 {
7023   for (;; t = t->u.next)
7024     {
7025       if (t->kind == ck_user
7026 	  || t->kind == ck_ambig
7027 	  || t->kind == ck_identity)
7028 	return t->type;
7029     }
7030   gcc_unreachable ();
7031 }
7032 
7033 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
7034    a pointer to LOSER and re-running joust to produce the warning if WINNER
7035    is actually used.  */
7036 
7037 static void
7038 add_warning (struct z_candidate *winner, struct z_candidate *loser)
7039 {
7040   candidate_warning *cw = (candidate_warning *)
7041     conversion_obstack_alloc (sizeof (candidate_warning));
7042   cw->loser = loser;
7043   cw->next = winner->warnings;
7044   winner->warnings = cw;
7045 }
7046 
7047 /* Compare two candidates for overloading as described in
7048    [over.match.best].  Return values:
7049 
7050       1: cand1 is better than cand2
7051      -1: cand2 is better than cand1
7052       0: cand1 and cand2 are indistinguishable */
7053 
7054 static int
7055 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
7056 {
7057   int winner = 0;
7058   int off1 = 0, off2 = 0;
7059   size_t i;
7060   size_t len;
7061 
7062   /* Candidates that involve bad conversions are always worse than those
7063      that don't.  */
7064   if (cand1->viable > cand2->viable)
7065     return 1;
7066   if (cand1->viable < cand2->viable)
7067     return -1;
7068 
7069   /* If we have two pseudo-candidates for conversions to the same type,
7070      or two candidates for the same function, arbitrarily pick one.  */
7071   if (cand1->fn == cand2->fn
7072       && (IS_TYPE_OR_DECL_P (cand1->fn)))
7073     return 1;
7074 
7075   /* a viable function F1
7076      is defined to be a better function than another viable function F2  if
7077      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
7078      ICSi(F2), and then */
7079 
7080   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
7081      ICSj(F2) */
7082 
7083   /* For comparing static and non-static member functions, we ignore
7084      the implicit object parameter of the non-static function.  The
7085      standard says to pretend that the static function has an object
7086      parm, but that won't work with operator overloading.  */
7087   len = cand1->num_convs;
7088   if (len != cand2->num_convs)
7089     {
7090       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
7091       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
7092 
7093       gcc_assert (static_1 != static_2);
7094 
7095       if (static_1)
7096 	off2 = 1;
7097       else
7098 	{
7099 	  off1 = 1;
7100 	  --len;
7101 	}
7102     }
7103 
7104   for (i = 0; i < len; ++i)
7105     {
7106       conversion *t1 = cand1->convs[i + off1];
7107       conversion *t2 = cand2->convs[i + off2];
7108       int comp = compare_ics (t1, t2);
7109 
7110       if (comp != 0)
7111 	{
7112 	  if (warn_sign_promo
7113 	      && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
7114 		  == cr_std + cr_promotion)
7115 	      && t1->kind == ck_std
7116 	      && t2->kind == ck_std
7117 	      && TREE_CODE (t1->type) == INTEGER_TYPE
7118 	      && TREE_CODE (t2->type) == INTEGER_TYPE
7119 	      && (TYPE_PRECISION (t1->type)
7120 		  == TYPE_PRECISION (t2->type))
7121 	      && (TYPE_UNSIGNED (t1->u.next->type)
7122 		  || (TREE_CODE (t1->u.next->type)
7123 		      == ENUMERAL_TYPE)))
7124 	    {
7125 	      tree type = t1->u.next->type;
7126 	      tree type1, type2;
7127 	      struct z_candidate *w, *l;
7128 	      if (comp > 0)
7129 		type1 = t1->type, type2 = t2->type,
7130 		  w = cand1, l = cand2;
7131 	      else
7132 		type1 = t2->type, type2 = t1->type,
7133 		  w = cand2, l = cand1;
7134 
7135 	      if (warn)
7136 		{
7137 		  warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
7138 			   type, type1, type2);
7139 		  warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
7140 		}
7141 	      else
7142 		add_warning (w, l);
7143 	    }
7144 
7145 	  if (winner && comp != winner)
7146 	    {
7147 	      winner = 0;
7148 	      goto tweak;
7149 	    }
7150 	  winner = comp;
7151 	}
7152     }
7153 
7154   /* warn about confusing overload resolution for user-defined conversions,
7155      either between a constructor and a conversion op, or between two
7156      conversion ops.  */
7157   if (winner && warn_conversion && cand1->second_conv
7158       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
7159       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
7160     {
7161       struct z_candidate *w, *l;
7162       bool give_warning = false;
7163 
7164       if (winner == 1)
7165 	w = cand1, l = cand2;
7166       else
7167 	w = cand2, l = cand1;
7168 
7169       /* We don't want to complain about `X::operator T1 ()'
7170 	 beating `X::operator T2 () const', when T2 is a no less
7171 	 cv-qualified version of T1.  */
7172       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
7173 	  && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
7174 	{
7175 	  tree t = TREE_TYPE (TREE_TYPE (l->fn));
7176 	  tree f = TREE_TYPE (TREE_TYPE (w->fn));
7177 
7178 	  if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
7179 	    {
7180 	      t = TREE_TYPE (t);
7181 	      f = TREE_TYPE (f);
7182 	    }
7183 	  if (!comp_ptr_ttypes (t, f))
7184 	    give_warning = true;
7185 	}
7186       else
7187 	give_warning = true;
7188 
7189       if (!give_warning)
7190 	/*NOP*/;
7191       else if (warn)
7192 	{
7193 	  tree source = source_type (w->convs[0]);
7194 	  if (! DECL_CONSTRUCTOR_P (w->fn))
7195 	    source = TREE_TYPE (source);
7196 	  if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
7197 	      && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
7198 			  source, w->second_conv->type))
7199 	    {
7200 	      inform (input_location, "  because conversion sequence for the argument is better");
7201 	    }
7202 	}
7203       else
7204 	add_warning (w, l);
7205     }
7206 
7207   if (winner)
7208     return winner;
7209 
7210   /* or, if not that,
7211      F1 is a non-template function and F2 is a template function
7212      specialization.  */
7213 
7214   if (!cand1->template_decl && cand2->template_decl)
7215     return 1;
7216   else if (cand1->template_decl && !cand2->template_decl)
7217     return -1;
7218 
7219   /* or, if not that,
7220      F1 and F2 are template functions and the function template for F1 is
7221      more specialized than the template for F2 according to the partial
7222      ordering rules.  */
7223 
7224   if (cand1->template_decl && cand2->template_decl)
7225     {
7226       winner = more_specialized_fn
7227 	(TI_TEMPLATE (cand1->template_decl),
7228 	 TI_TEMPLATE (cand2->template_decl),
7229 	 /* [temp.func.order]: The presence of unused ellipsis and default
7230 	    arguments has no effect on the partial ordering of function
7231 	    templates.   add_function_candidate() will not have
7232 	    counted the "this" argument for constructors.  */
7233 	 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
7234       if (winner)
7235 	return winner;
7236     }
7237 
7238   /* or, if not that,
7239      the  context  is  an  initialization by user-defined conversion (see
7240      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
7241      sequence  from  the return type of F1 to the destination type (i.e.,
7242      the type of the entity being initialized)  is  a  better  conversion
7243      sequence  than the standard conversion sequence from the return type
7244      of F2 to the destination type.  */
7245 
7246   if (cand1->second_conv)
7247     {
7248       winner = compare_ics (cand1->second_conv, cand2->second_conv);
7249       if (winner)
7250 	return winner;
7251     }
7252 
7253   /* Check whether we can discard a builtin candidate, either because we
7254      have two identical ones or matching builtin and non-builtin candidates.
7255 
7256      (Pedantically in the latter case the builtin which matched the user
7257      function should not be added to the overload set, but we spot it here.
7258 
7259      [over.match.oper]
7260      ... the builtin candidates include ...
7261      - do not have the same parameter type list as any non-template
7262        non-member candidate.  */
7263 
7264   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
7265       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
7266     {
7267       for (i = 0; i < len; ++i)
7268 	if (!same_type_p (cand1->convs[i]->type,
7269 			  cand2->convs[i]->type))
7270 	  break;
7271       if (i == cand1->num_convs)
7272 	{
7273 	  if (cand1->fn == cand2->fn)
7274 	    /* Two built-in candidates; arbitrarily pick one.  */
7275 	    return 1;
7276 	  else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
7277 	    /* cand1 is built-in; prefer cand2.  */
7278 	    return -1;
7279 	  else
7280 	    /* cand2 is built-in; prefer cand1.  */
7281 	    return 1;
7282 	}
7283     }
7284 
7285   /* If the two function declarations represent the same function (this can
7286      happen with declarations in multiple scopes and arg-dependent lookup),
7287      arbitrarily choose one.  But first make sure the default args we're
7288      using match.  */
7289   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
7290       && equal_functions (cand1->fn, cand2->fn))
7291     {
7292       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
7293       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
7294 
7295       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
7296 
7297       for (i = 0; i < len; ++i)
7298 	{
7299 	  /* Don't crash if the fn is variadic.  */
7300 	  if (!parms1)
7301 	    break;
7302 	  parms1 = TREE_CHAIN (parms1);
7303 	  parms2 = TREE_CHAIN (parms2);
7304 	}
7305 
7306       if (off1)
7307 	parms1 = TREE_CHAIN (parms1);
7308       else if (off2)
7309 	parms2 = TREE_CHAIN (parms2);
7310 
7311       for (; parms1; ++i)
7312 	{
7313 	  if (!cp_tree_equal (TREE_PURPOSE (parms1),
7314 			      TREE_PURPOSE (parms2)))
7315 	    {
7316 	      if (warn)
7317 		{
7318 		  permerror (input_location, "default argument mismatch in "
7319 			     "overload resolution");
7320 		  inform (input_location,
7321 			  " candidate 1: %q+#F", cand1->fn);
7322 		  inform (input_location,
7323 			  " candidate 2: %q+#F", cand2->fn);
7324 		}
7325 	      else
7326 		add_warning (cand1, cand2);
7327 	      break;
7328 	    }
7329 	  parms1 = TREE_CHAIN (parms1);
7330 	  parms2 = TREE_CHAIN (parms2);
7331 	}
7332 
7333       return 1;
7334     }
7335 
7336 tweak:
7337 
7338   /* Extension: If the worst conversion for one candidate is worse than the
7339      worst conversion for the other, take the first.  */
7340   if (!pedantic)
7341     {
7342       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
7343       struct z_candidate *w = 0, *l = 0;
7344 
7345       for (i = 0; i < len; ++i)
7346 	{
7347 	  if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
7348 	    rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
7349 	  if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
7350 	    rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
7351 	}
7352       if (rank1 < rank2)
7353 	winner = 1, w = cand1, l = cand2;
7354       if (rank1 > rank2)
7355 	winner = -1, w = cand2, l = cand1;
7356       if (winner)
7357 	{
7358 	  if (warn)
7359 	    {
7360 	      pedwarn (input_location, 0,
7361 	      "ISO C++ says that these are ambiguous, even "
7362 	      "though the worst conversion for the first is better than "
7363 	      "the worst conversion for the second:");
7364 	      print_z_candidate (_("candidate 1:"), w);
7365 	      print_z_candidate (_("candidate 2:"), l);
7366 	    }
7367 	  else
7368 	    add_warning (w, l);
7369 	  return winner;
7370 	}
7371     }
7372 
7373   gcc_assert (!winner);
7374   return 0;
7375 }
7376 
7377 /* Given a list of candidates for overloading, find the best one, if any.
7378    This algorithm has a worst case of O(2n) (winner is last), and a best
7379    case of O(n/2) (totally ambiguous); much better than a sorting
7380    algorithm.  */
7381 
7382 static struct z_candidate *
7383 tourney (struct z_candidate *candidates)
7384 {
7385   struct z_candidate *champ = candidates, *challenger;
7386   int fate;
7387   int champ_compared_to_predecessor = 0;
7388 
7389   /* Walk through the list once, comparing each current champ to the next
7390      candidate, knocking out a candidate or two with each comparison.  */
7391 
7392   for (challenger = champ->next; challenger; )
7393     {
7394       fate = joust (champ, challenger, 0);
7395       if (fate == 1)
7396 	challenger = challenger->next;
7397       else
7398 	{
7399 	  if (fate == 0)
7400 	    {
7401 	      champ = challenger->next;
7402 	      if (champ == 0)
7403 		return NULL;
7404 	      champ_compared_to_predecessor = 0;
7405 	    }
7406 	  else
7407 	    {
7408 	      champ = challenger;
7409 	      champ_compared_to_predecessor = 1;
7410 	    }
7411 
7412 	  challenger = champ->next;
7413 	}
7414     }
7415 
7416   /* Make sure the champ is better than all the candidates it hasn't yet
7417      been compared to.  */
7418 
7419   for (challenger = candidates;
7420        challenger != champ
7421 	 && !(champ_compared_to_predecessor && challenger->next == champ);
7422        challenger = challenger->next)
7423     {
7424       fate = joust (champ, challenger, 0);
7425       if (fate != 1)
7426 	return NULL;
7427     }
7428 
7429   return champ;
7430 }
7431 
7432 /* Returns nonzero if things of type FROM can be converted to TO.  */
7433 
7434 bool
7435 can_convert (tree to, tree from)
7436 {
7437   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
7438 }
7439 
7440 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
7441 
7442 bool
7443 can_convert_arg (tree to, tree from, tree arg, int flags)
7444 {
7445   conversion *t;
7446   void *p;
7447   bool ok_p;
7448 
7449   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7450   p = conversion_obstack_alloc (0);
7451 
7452   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7453 			    flags);
7454   ok_p = (t && !t->bad_p);
7455 
7456   /* Free all the conversions we allocated.  */
7457   obstack_free (&conversion_obstack, p);
7458 
7459   return ok_p;
7460 }
7461 
7462 /* Like can_convert_arg, but allows dubious conversions as well.  */
7463 
7464 bool
7465 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
7466 {
7467   conversion *t;
7468   void *p;
7469 
7470   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7471   p = conversion_obstack_alloc (0);
7472   /* Try to perform the conversion.  */
7473   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7474 			    flags);
7475   /* Free all the conversions we allocated.  */
7476   obstack_free (&conversion_obstack, p);
7477 
7478   return t != NULL;
7479 }
7480 
7481 /* Convert EXPR to TYPE.  Return the converted expression.
7482 
7483    Note that we allow bad conversions here because by the time we get to
7484    this point we are committed to doing the conversion.  If we end up
7485    doing a bad conversion, convert_like will complain.  */
7486 
7487 tree
7488 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
7489 {
7490   conversion *conv;
7491   void *p;
7492 
7493   if (error_operand_p (expr))
7494     return error_mark_node;
7495 
7496   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7497   p = conversion_obstack_alloc (0);
7498 
7499   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7500 			      /*c_cast_p=*/false,
7501 			      flags);
7502 
7503   if (!conv)
7504     {
7505       if (complain & tf_error)
7506 	{
7507 	  /* If expr has unknown type, then it is an overloaded function.
7508 	     Call instantiate_type to get good error messages.  */
7509 	  if (TREE_TYPE (expr) == unknown_type_node)
7510 	    instantiate_type (type, expr, complain);
7511 	  else if (invalid_nonstatic_memfn_p (expr, complain))
7512 	    /* We gave an error.  */;
7513 	  else
7514 	    error ("could not convert %qE to %qT", expr, type);
7515 	}
7516       expr = error_mark_node;
7517     }
7518   else if (processing_template_decl)
7519     {
7520       /* In a template, we are only concerned about determining the
7521 	 type of non-dependent expressions, so we do not have to
7522 	 perform the actual conversion.  */
7523       if (TREE_TYPE (expr) != type)
7524 	expr = build_nop (type, expr);
7525     }
7526   else
7527     expr = convert_like (conv, expr, complain);
7528 
7529   /* Free all the conversions we allocated.  */
7530   obstack_free (&conversion_obstack, p);
7531 
7532   return expr;
7533 }
7534 
7535 tree
7536 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
7537 {
7538   return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
7539 }
7540 
7541 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7542    permitted.  If the conversion is valid, the converted expression is
7543    returned.  Otherwise, NULL_TREE is returned, except in the case
7544    that TYPE is a class type; in that case, an error is issued.  If
7545    C_CAST_P is true, then this direction initialization is taking
7546    place as part of a static_cast being attempted as part of a C-style
7547    cast.  */
7548 
7549 tree
7550 perform_direct_initialization_if_possible (tree type,
7551 					   tree expr,
7552 					   bool c_cast_p,
7553                                            tsubst_flags_t complain)
7554 {
7555   conversion *conv;
7556   void *p;
7557 
7558   if (type == error_mark_node || error_operand_p (expr))
7559     return error_mark_node;
7560   /* [dcl.init]
7561 
7562      If the destination type is a (possibly cv-qualified) class type:
7563 
7564      -- If the initialization is direct-initialization ...,
7565      constructors are considered. ... If no constructor applies, or
7566      the overload resolution is ambiguous, the initialization is
7567      ill-formed.  */
7568   if (CLASS_TYPE_P (type))
7569     {
7570       VEC(tree,gc) *args = make_tree_vector_single (expr);
7571       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7572 					&args, type, LOOKUP_NORMAL, complain);
7573       release_tree_vector (args);
7574       return build_cplus_new (type, expr);
7575     }
7576 
7577   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7578   p = conversion_obstack_alloc (0);
7579 
7580   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7581 			      c_cast_p,
7582 			      LOOKUP_NORMAL);
7583   if (!conv || conv->bad_p)
7584     expr = NULL_TREE;
7585   else
7586     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
7587 			      /*issue_conversion_warnings=*/false,
7588 			      c_cast_p,
7589 			      tf_warning_or_error);
7590 
7591   /* Free all the conversions we allocated.  */
7592   obstack_free (&conversion_obstack, p);
7593 
7594   return expr;
7595 }
7596 
7597 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
7598    is being bound to a temporary.  Create and return a new VAR_DECL
7599    with the indicated TYPE; this variable will store the value to
7600    which the reference is bound.  */
7601 
7602 tree
7603 make_temporary_var_for_ref_to_temp (tree decl, tree type)
7604 {
7605   tree var;
7606 
7607   /* Create the variable.  */
7608   var = create_temporary_var (type);
7609 
7610   /* Register the variable.  */
7611   if (TREE_STATIC (decl))
7612     {
7613       /* Namespace-scope or local static; give it a mangled name.  */
7614       tree name;
7615 
7616       TREE_STATIC (var) = 1;
7617       name = mangle_ref_init_variable (decl);
7618       DECL_NAME (var) = name;
7619       SET_DECL_ASSEMBLER_NAME (var, name);
7620       var = pushdecl_top_level (var);
7621     }
7622   else
7623     /* Create a new cleanup level if necessary.  */
7624     maybe_push_cleanup_level (type);
7625 
7626   return var;
7627 }
7628 
7629 /* EXPR is the initializer for a variable DECL of reference or
7630    std::initializer_list type.  Create, push and return a new VAR_DECL
7631    for the initializer so that it will live as long as DECL.  Any
7632    cleanup for the new variable is returned through CLEANUP, and the
7633    code to initialize the new variable is returned through INITP.  */
7634 
7635 tree
7636 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
7637 {
7638   tree init;
7639   tree type;
7640   tree var;
7641 
7642   /* Create the temporary variable.  */
7643   type = TREE_TYPE (expr);
7644   var = make_temporary_var_for_ref_to_temp (decl, type);
7645   layout_decl (var, 0);
7646   /* If the rvalue is the result of a function call it will be
7647      a TARGET_EXPR.  If it is some other construct (such as a
7648      member access expression where the underlying object is
7649      itself the result of a function call), turn it into a
7650      TARGET_EXPR here.  It is important that EXPR be a
7651      TARGET_EXPR below since otherwise the INIT_EXPR will
7652      attempt to make a bitwise copy of EXPR to initialize
7653      VAR.  */
7654   if (TREE_CODE (expr) != TARGET_EXPR)
7655     expr = get_target_expr (expr);
7656   /* Create the INIT_EXPR that will initialize the temporary
7657      variable.  */
7658   init = build2 (INIT_EXPR, type, var, expr);
7659   if (at_function_scope_p ())
7660     {
7661       add_decl_expr (var);
7662 
7663       if (TREE_STATIC (var))
7664 	init = add_stmt_to_compound (init, register_dtor_fn (var));
7665       else
7666 	*cleanup = cxx_maybe_build_cleanup (var);
7667 
7668       /* We must be careful to destroy the temporary only
7669 	 after its initialization has taken place.  If the
7670 	 initialization throws an exception, then the
7671 	 destructor should not be run.  We cannot simply
7672 	 transform INIT into something like:
7673 
7674 	 (INIT, ({ CLEANUP_STMT; }))
7675 
7676 	 because emit_local_var always treats the
7677 	 initializer as a full-expression.  Thus, the
7678 	 destructor would run too early; it would run at the
7679 	 end of initializing the reference variable, rather
7680 	 than at the end of the block enclosing the
7681 	 reference variable.
7682 
7683 	 The solution is to pass back a cleanup expression
7684 	 which the caller is responsible for attaching to
7685 	 the statement tree.  */
7686     }
7687   else
7688     {
7689       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
7690       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7691 	static_aggregates = tree_cons (NULL_TREE, var,
7692 				       static_aggregates);
7693     }
7694 
7695   *initp = init;
7696   return var;
7697 }
7698 
7699 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7700    initializing a variable of that TYPE.  If DECL is non-NULL, it is
7701    the VAR_DECL being initialized with the EXPR.  (In that case, the
7702    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
7703    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
7704    return, if *CLEANUP is no longer NULL, it will be an expression
7705    that should be pushed as a cleanup after the returned expression
7706    is used to initialize DECL.
7707 
7708    Return the converted expression.  */
7709 
7710 tree
7711 initialize_reference (tree type, tree expr, tree decl, tree *cleanup,
7712 		      tsubst_flags_t complain)
7713 {
7714   conversion *conv;
7715   void *p;
7716 
7717   if (type == error_mark_node || error_operand_p (expr))
7718     return error_mark_node;
7719 
7720   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7721   p = conversion_obstack_alloc (0);
7722 
7723   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
7724 			    LOOKUP_NORMAL);
7725   if (!conv || conv->bad_p)
7726     {
7727       if (complain & tf_error)
7728 	{
7729 	  if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
7730 	      && !TYPE_REF_IS_RVALUE (type)
7731 	      && !real_lvalue_p (expr))
7732 	    error ("invalid initialization of non-const reference of "
7733 		   "type %qT from an rvalue of type %qT",
7734 		   type, TREE_TYPE (expr));
7735 	  else
7736 	    error ("invalid initialization of reference of type "
7737 		   "%qT from expression of type %qT", type,
7738 		   TREE_TYPE (expr));
7739 	}
7740       return error_mark_node;
7741     }
7742 
7743   /* If DECL is non-NULL, then this special rule applies:
7744 
7745        [class.temporary]
7746 
7747        The temporary to which the reference is bound or the temporary
7748        that is the complete object to which the reference is bound
7749        persists for the lifetime of the reference.
7750 
7751        The temporaries created during the evaluation of the expression
7752        initializing the reference, except the temporary to which the
7753        reference is bound, are destroyed at the end of the
7754        full-expression in which they are created.
7755 
7756      In that case, we store the converted expression into a new
7757      VAR_DECL in a new scope.
7758 
7759      However, we want to be careful not to create temporaries when
7760      they are not required.  For example, given:
7761 
7762        struct B {};
7763        struct D : public B {};
7764        D f();
7765        const B& b = f();
7766 
7767      there is no need to copy the return value from "f"; we can just
7768      extend its lifetime.  Similarly, given:
7769 
7770        struct S {};
7771        struct T { operator S(); };
7772        T t;
7773        const S& s = t;
7774 
7775     we can extend the lifetime of the return value of the conversion
7776     operator.  */
7777   gcc_assert (conv->kind == ck_ref_bind);
7778   if (decl)
7779     {
7780       tree var;
7781       tree base_conv_type;
7782 
7783       /* Skip over the REF_BIND.  */
7784       conv = conv->u.next;
7785       /* If the next conversion is a BASE_CONV, skip that too -- but
7786 	 remember that the conversion was required.  */
7787       if (conv->kind == ck_base)
7788 	{
7789 	  base_conv_type = conv->type;
7790 	  conv = conv->u.next;
7791 	}
7792       else
7793 	base_conv_type = NULL_TREE;
7794       /* Perform the remainder of the conversion.  */
7795       expr = convert_like_real (conv, expr,
7796 				/*fn=*/NULL_TREE, /*argnum=*/0,
7797 				/*inner=*/-1,
7798 				/*issue_conversion_warnings=*/true,
7799 				/*c_cast_p=*/false,
7800 				tf_warning_or_error);
7801       if (error_operand_p (expr))
7802 	expr = error_mark_node;
7803       else
7804 	{
7805 	  if (!lvalue_or_rvalue_with_address_p (expr))
7806 	    {
7807 	      tree init;
7808 	      var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
7809 	      /* Use its address to initialize the reference variable.  */
7810 	      expr = build_address (var);
7811 	      if (base_conv_type)
7812 		expr = convert_to_base (expr,
7813 					build_pointer_type (base_conv_type),
7814 					/*check_access=*/true,
7815 					/*nonnull=*/true);
7816 	      expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
7817 	    }
7818 	  else
7819 	    /* Take the address of EXPR.  */
7820 	    expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error);
7821 	  /* If a BASE_CONV was required, perform it now.  */
7822 	  if (base_conv_type)
7823 	    expr = (perform_implicit_conversion
7824 		    (build_pointer_type (base_conv_type), expr,
7825 		     tf_warning_or_error));
7826 	  expr = build_nop (type, expr);
7827 	}
7828     }
7829   else
7830     /* Perform the conversion.  */
7831     expr = convert_like (conv, expr, tf_warning_or_error);
7832 
7833   /* Free all the conversions we allocated.  */
7834   obstack_free (&conversion_obstack, p);
7835 
7836   return expr;
7837 }
7838 
7839 /* Returns true iff TYPE is some variant of std::initializer_list.  */
7840 
7841 bool
7842 is_std_init_list (tree type)
7843 {
7844   /* Look through typedefs.  */
7845   if (!TYPE_P (type))
7846     return false;
7847   type = TYPE_MAIN_VARIANT (type);
7848   return (CLASS_TYPE_P (type)
7849 	  && CP_TYPE_CONTEXT (type) == std_node
7850 	  && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
7851 }
7852 
7853 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7854    will accept an argument list of a single std::initializer_list<T>.  */
7855 
7856 bool
7857 is_list_ctor (tree decl)
7858 {
7859   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
7860   tree arg;
7861 
7862   if (!args || args == void_list_node)
7863     return false;
7864 
7865   arg = non_reference (TREE_VALUE (args));
7866   if (!is_std_init_list (arg))
7867     return false;
7868 
7869   args = TREE_CHAIN (args);
7870 
7871   if (args && args != void_list_node && !TREE_PURPOSE (args))
7872     /* There are more non-defaulted parms.  */
7873     return false;
7874 
7875   return true;
7876 }
7877 
7878 #include "gt-cp-call.h"
7879