OSDN Git Service

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