OSDN Git Service

dr 1188 comment
[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         expr = mark_rvalue_use (expr);
5596
5597         /* When converting from an init list we consider explicit
5598            constructors, but actually trying to call one is an error.  */
5599         if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5600             /* Unless we're calling it for value-initialization from an
5601                empty list, since that is handled separately in 8.5.4.  */
5602             && cand->num_convs > 0)
5603           {
5604             if (complain & tf_error)
5605               error ("converting to %qT from initializer list would use "
5606                      "explicit constructor %qD", totype, convfn);
5607             else
5608               return error_mark_node;
5609           }
5610
5611         /* Set user_conv_p on the argument conversions, so rvalue/base
5612            handling knows not to allow any more UDCs.  */
5613         for (i = 0; i < cand->num_convs; ++i)
5614           cand->convs[i]->user_conv_p = true;
5615
5616         expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5617
5618         /* If this is a constructor or a function returning an aggr type,
5619            we need to build up a TARGET_EXPR.  */
5620         if (DECL_CONSTRUCTOR_P (convfn))
5621           {
5622             expr = build_cplus_new (totype, expr, complain);
5623
5624             /* Remember that this was list-initialization.  */
5625             if (convs->check_narrowing && expr != error_mark_node)
5626               TARGET_EXPR_LIST_INIT_P (expr) = true;
5627           }
5628
5629         return expr;
5630       }
5631     case ck_identity:
5632       expr = mark_rvalue_use (expr);
5633       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5634         {
5635           int nelts = CONSTRUCTOR_NELTS (expr);
5636           if (nelts == 0)
5637             expr = build_value_init (totype, tf_warning_or_error);
5638           else if (nelts == 1)
5639             expr = CONSTRUCTOR_ELT (expr, 0)->value;
5640           else
5641             gcc_unreachable ();
5642         }
5643
5644       if (type_unknown_p (expr))
5645         expr = instantiate_type (totype, expr, complain);
5646       /* Convert a constant to its underlying value, unless we are
5647          about to bind it to a reference, in which case we need to
5648          leave it as an lvalue.  */
5649       if (inner >= 0)
5650         {   
5651           expr = decl_constant_value (expr);
5652           if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5653             /* If __null has been converted to an integer type, we do not
5654                want to warn about uses of EXPR as an integer, rather than
5655                as a pointer.  */
5656             expr = build_int_cst (totype, 0);
5657         }
5658       return expr;
5659     case ck_ambig:
5660       if (complain & tf_error)
5661         {
5662           /* Call build_user_type_conversion again for the error.  */
5663           build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL);
5664           if (fn)
5665             error ("  initializing argument %P of %q+D", argnum, fn);
5666         }
5667       return error_mark_node;
5668
5669     case ck_list:
5670       {
5671         /* Conversion to std::initializer_list<T>.  */
5672         tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5673         tree new_ctor = build_constructor (init_list_type_node, NULL);
5674         unsigned len = CONSTRUCTOR_NELTS (expr);
5675         tree array, val, field;
5676         VEC(constructor_elt,gc) *vec = NULL;
5677         unsigned ix;
5678
5679         /* Convert all the elements.  */
5680         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5681           {
5682             tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5683                                           1, false, false, complain);
5684             if (sub == error_mark_node)
5685               return sub;
5686             if (!BRACE_ENCLOSED_INITIALIZER_P (val))
5687               check_narrowing (TREE_TYPE (sub), val);
5688             CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5689             if (!TREE_CONSTANT (sub))
5690               TREE_CONSTANT (new_ctor) = false;
5691           }
5692         /* Build up the array.  */
5693         elttype = cp_build_qualified_type
5694           (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5695         array = build_array_of_n_type (elttype, len);
5696         array = finish_compound_literal (array, new_ctor, complain);
5697
5698         /* Build up the initializer_list object.  */
5699         totype = complete_type (totype);
5700         field = next_initializable_field (TYPE_FIELDS (totype));
5701         CONSTRUCTOR_APPEND_ELT (vec, field, decay_conversion (array));
5702         field = next_initializable_field (DECL_CHAIN (field));
5703         CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
5704         new_ctor = build_constructor (totype, vec);
5705         return get_target_expr (new_ctor);
5706       }
5707
5708     case ck_aggr:
5709       if (TREE_CODE (totype) == COMPLEX_TYPE)
5710         {
5711           tree real = CONSTRUCTOR_ELT (expr, 0)->value;
5712           tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
5713           real = perform_implicit_conversion (TREE_TYPE (totype),
5714                                               real, complain);
5715           imag = perform_implicit_conversion (TREE_TYPE (totype),
5716                                               imag, complain);
5717           expr = build2 (COMPLEX_EXPR, totype, real, imag);
5718           return fold_if_not_in_template (expr);
5719         }
5720       return get_target_expr (digest_init (totype, expr, complain));
5721
5722     default:
5723       break;
5724     };
5725
5726   expr = convert_like_real (convs->u.next, expr, fn, argnum,
5727                             convs->kind == ck_ref_bind ? -1 : 1,
5728                             convs->kind == ck_ref_bind ? issue_conversion_warnings : false, 
5729                             c_cast_p,
5730                             complain);
5731   if (expr == error_mark_node)
5732     return error_mark_node;
5733
5734   switch (convs->kind)
5735     {
5736     case ck_rvalue:
5737       expr = decay_conversion (expr);
5738       if (! MAYBE_CLASS_TYPE_P (totype))
5739         return expr;
5740       /* Else fall through.  */
5741     case ck_base:
5742       if (convs->kind == ck_base && !convs->need_temporary_p)
5743         {
5744           /* We are going to bind a reference directly to a base-class
5745              subobject of EXPR.  */
5746           /* Build an expression for `*((base*) &expr)'.  */
5747           expr = cp_build_addr_expr (expr, complain);
5748           expr = convert_to_base (expr, build_pointer_type (totype),
5749                                   !c_cast_p, /*nonnull=*/true, complain);
5750           expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
5751           return expr;
5752         }
5753
5754       /* Copy-initialization where the cv-unqualified version of the source
5755          type is the same class as, or a derived class of, the class of the
5756          destination [is treated as direct-initialization].  [dcl.init] */
5757       flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5758       if (convs->user_conv_p)
5759         /* This conversion is being done in the context of a user-defined
5760            conversion (i.e. the second step of copy-initialization), so
5761            don't allow any more.  */
5762         flags |= LOOKUP_NO_CONVERSION;
5763       if (convs->rvaluedness_matches_p)
5764         flags |= LOOKUP_PREFER_RVALUE;
5765       if (TREE_CODE (expr) == TARGET_EXPR
5766           && TARGET_EXPR_LIST_INIT_P (expr))
5767         /* Copy-list-initialization doesn't actually involve a copy.  */
5768         return expr;
5769       expr = build_temp (expr, totype, flags, &diag_kind, complain);
5770       if (diag_kind && fn)
5771         {
5772           if ((complain & tf_error))
5773             emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
5774                              "  initializing argument %P of %qD", argnum, fn);
5775           else if (diag_kind == DK_ERROR)
5776             return error_mark_node;
5777         }
5778       return build_cplus_new (totype, expr, complain);
5779
5780     case ck_ref_bind:
5781       {
5782         tree ref_type = totype;
5783
5784         if (convs->bad_p && TYPE_REF_IS_RVALUE (ref_type)
5785             && real_lvalue_p (expr))
5786           {
5787             if (complain & tf_error)
5788               {
5789                 error ("cannot bind %qT lvalue to %qT",
5790                        TREE_TYPE (expr), totype);
5791                 if (fn)
5792                   error ("  initializing argument %P of %q+D", argnum, fn);
5793               }
5794             return error_mark_node;
5795           }
5796
5797         /* If necessary, create a temporary. 
5798
5799            VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5800            that need temporaries, even when their types are reference
5801            compatible with the type of reference being bound, so the
5802            upcoming call to cp_build_addr_expr doesn't fail.  */
5803         if (convs->need_temporary_p
5804             || TREE_CODE (expr) == CONSTRUCTOR
5805             || TREE_CODE (expr) == VA_ARG_EXPR)
5806           {
5807             /* Otherwise, a temporary of type "cv1 T1" is created and
5808                initialized from the initializer expression using the rules
5809                for a non-reference copy-initialization (8.5).  */
5810
5811             tree type = TREE_TYPE (ref_type);
5812             cp_lvalue_kind lvalue = real_lvalue_p (expr);
5813
5814             gcc_assert (same_type_ignoring_top_level_qualifiers_p
5815                         (type, convs->u.next->type));
5816             if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
5817                 && !TYPE_REF_IS_RVALUE (ref_type))
5818               {
5819                 if (complain & tf_error)
5820                   {
5821                     /* If the reference is volatile or non-const, we
5822                        cannot create a temporary.  */
5823                     if (lvalue & clk_bitfield)
5824                       error ("cannot bind bitfield %qE to %qT",
5825                              expr, ref_type);
5826                     else if (lvalue & clk_packed)
5827                       error ("cannot bind packed field %qE to %qT",
5828                              expr, ref_type);
5829                     else
5830                       error ("cannot bind rvalue %qE to %qT", expr, ref_type);
5831                   }
5832                 return error_mark_node;
5833               }
5834             /* If the source is a packed field, and we must use a copy
5835                constructor, then building the target expr will require
5836                binding the field to the reference parameter to the
5837                copy constructor, and we'll end up with an infinite
5838                loop.  If we can use a bitwise copy, then we'll be
5839                OK.  */
5840             if ((lvalue & clk_packed)
5841                 && CLASS_TYPE_P (type)
5842                 && type_has_nontrivial_copy_init (type))
5843               {
5844                 if (complain & tf_error)
5845                   error ("cannot bind packed field %qE to %qT",
5846                          expr, ref_type);
5847                 return error_mark_node;
5848               }
5849             if (lvalue & clk_bitfield)
5850               {
5851                 expr = convert_bitfield_to_declared_type (expr);
5852                 expr = fold_convert (type, expr);
5853               }
5854             expr = build_target_expr_with_type (expr, type, complain);
5855           }
5856
5857         /* Take the address of the thing to which we will bind the
5858            reference.  */
5859         expr = cp_build_addr_expr (expr, complain);
5860         if (expr == error_mark_node)
5861           return error_mark_node;
5862
5863         /* Convert it to a pointer to the type referred to by the
5864            reference.  This will adjust the pointer if a derived to
5865            base conversion is being performed.  */
5866         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
5867                            expr);
5868         /* Convert the pointer to the desired reference type.  */
5869         return build_nop (ref_type, expr);
5870       }
5871
5872     case ck_lvalue:
5873       return decay_conversion (expr);
5874
5875     case ck_qual:
5876       /* Warn about deprecated conversion if appropriate.  */
5877       string_conv_p (totype, expr, 1);
5878       break;
5879
5880     case ck_ptr:
5881       if (convs->base_p)
5882         expr = convert_to_base (expr, totype, !c_cast_p,
5883                                 /*nonnull=*/false, complain);
5884       return build_nop (totype, expr);
5885
5886     case ck_pmem:
5887       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
5888                              c_cast_p, complain);
5889
5890     default:
5891       break;
5892     }
5893
5894   if (convs->check_narrowing)
5895     check_narrowing (totype, expr);
5896
5897   if (issue_conversion_warnings && (complain & tf_warning))
5898     expr = convert_and_check (totype, expr);
5899   else
5900     expr = convert (totype, expr);
5901
5902   return expr;
5903 }
5904
5905 /* ARG is being passed to a varargs function.  Perform any conversions
5906    required.  Return the converted value.  */
5907
5908 tree
5909 convert_arg_to_ellipsis (tree arg)
5910 {
5911   tree arg_type;
5912
5913   /* [expr.call]
5914
5915      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5916      standard conversions are performed.  */
5917   arg = decay_conversion (arg);
5918   arg_type = TREE_TYPE (arg);
5919   /* [expr.call]
5920
5921      If the argument has integral or enumeration type that is subject
5922      to the integral promotions (_conv.prom_), or a floating point
5923      type that is subject to the floating point promotion
5924      (_conv.fpprom_), the value of the argument is converted to the
5925      promoted type before the call.  */
5926   if (TREE_CODE (arg_type) == REAL_TYPE
5927       && (TYPE_PRECISION (arg_type)
5928           < TYPE_PRECISION (double_type_node))
5929       && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
5930     {
5931       if (warn_double_promotion && !c_inhibit_evaluation_warnings)
5932         warning (OPT_Wdouble_promotion,
5933                  "implicit conversion from %qT to %qT when passing "
5934                  "argument to function",
5935                  arg_type, double_type_node);
5936       arg = convert_to_real (double_type_node, arg);
5937     }
5938   else if (NULLPTR_TYPE_P (arg_type))
5939     arg = null_pointer_node;
5940   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
5941     {
5942       if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
5943         {
5944           warning (OPT_Wabi, "scoped enum %qT will not promote to an "
5945                    "integral type in a future version of GCC", arg_type);
5946           arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg);
5947         }
5948       arg = perform_integral_promotions (arg);
5949     }
5950
5951   arg = require_complete_type (arg);
5952   arg_type = TREE_TYPE (arg);
5953
5954   if (arg != error_mark_node
5955       /* In a template (or ill-formed code), we can have an incomplete type
5956          even after require_complete_type, in which case we don't know
5957          whether it has trivial copy or not.  */
5958       && COMPLETE_TYPE_P (arg_type))
5959     {
5960       /* Build up a real lvalue-to-rvalue conversion in case the
5961          copy constructor is trivial but not callable.  */
5962       if (CLASS_TYPE_P (arg_type))
5963         force_rvalue (arg, tf_warning_or_error);
5964
5965       /* [expr.call] 5.2.2/7:
5966          Passing a potentially-evaluated argument of class type (Clause 9)
5967          with a non-trivial copy constructor or a non-trivial destructor
5968          with no corresponding parameter is conditionally-supported, with
5969          implementation-defined semantics.
5970
5971          We used to just warn here and do a bitwise copy, but now
5972          cp_expr_size will abort if we try to do that.
5973
5974          If the call appears in the context of a sizeof expression,
5975          it is not potentially-evaluated.  */
5976       if (cp_unevaluated_operand == 0
5977           && (type_has_nontrivial_copy_init (arg_type)
5978               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
5979         error ("cannot pass objects of non-trivially-copyable "
5980                "type %q#T through %<...%>", arg_type);
5981     }
5982
5983   return arg;
5984 }
5985
5986 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
5987
5988 tree
5989 build_x_va_arg (tree expr, tree type)
5990 {
5991   if (processing_template_decl)
5992     return build_min (VA_ARG_EXPR, type, expr);
5993
5994   type = complete_type_or_else (type, NULL_TREE);
5995
5996   if (expr == error_mark_node || !type)
5997     return error_mark_node;
5998
5999   expr = mark_lvalue_use (expr);
6000
6001   if (type_has_nontrivial_copy_init (type)
6002       || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6003       || TREE_CODE (type) == REFERENCE_TYPE)
6004     {
6005       /* Remove reference types so we don't ICE later on.  */
6006       tree type1 = non_reference (type);
6007       /* conditionally-supported behavior [expr.call] 5.2.2/7.  */
6008       error ("cannot receive objects of non-trivially-copyable type %q#T "
6009              "through %<...%>; ", type);
6010       expr = convert (build_pointer_type (type1), null_node);
6011       expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6012       return expr;
6013     }
6014
6015   return build_va_arg (input_location, expr, type);
6016 }
6017
6018 /* TYPE has been given to va_arg.  Apply the default conversions which
6019    would have happened when passed via ellipsis.  Return the promoted
6020    type, or the passed type if there is no change.  */
6021
6022 tree
6023 cxx_type_promotes_to (tree type)
6024 {
6025   tree promote;
6026
6027   /* Perform the array-to-pointer and function-to-pointer
6028      conversions.  */
6029   type = type_decays_to (type);
6030
6031   promote = type_promotes_to (type);
6032   if (same_type_p (type, promote))
6033     promote = type;
6034
6035   return promote;
6036 }
6037
6038 /* ARG is a default argument expression being passed to a parameter of
6039    the indicated TYPE, which is a parameter to FN.  PARMNUM is the
6040    zero-based argument number.  Do any required conversions.  Return
6041    the converted value.  */
6042
6043 static GTY(()) VEC(tree,gc) *default_arg_context;
6044 void
6045 push_defarg_context (tree fn)
6046 { VEC_safe_push (tree, gc, default_arg_context, fn); }
6047 void
6048 pop_defarg_context (void)
6049 { VEC_pop (tree, default_arg_context); }
6050
6051 tree
6052 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
6053 {
6054   int i;
6055   tree t;
6056
6057   /* See through clones.  */
6058   fn = DECL_ORIGIN (fn);
6059
6060   /* Detect recursion.  */
6061   FOR_EACH_VEC_ELT (tree, default_arg_context, i, t)
6062     if (t == fn)
6063       {
6064         error ("recursive evaluation of default argument for %q#D", fn);
6065         return error_mark_node;
6066       }
6067
6068   /* If the ARG is an unparsed default argument expression, the
6069      conversion cannot be performed.  */
6070   if (TREE_CODE (arg) == DEFAULT_ARG)
6071     {
6072       error ("call to %qD uses the default argument for parameter %P, which "
6073              "is not yet defined", fn, parmnum);
6074       return error_mark_node;
6075     }
6076
6077   push_defarg_context (fn);
6078
6079   if (fn && DECL_TEMPLATE_INFO (fn))
6080     arg = tsubst_default_argument (fn, type, arg);
6081
6082   /* Due to:
6083
6084        [dcl.fct.default]
6085
6086        The names in the expression are bound, and the semantic
6087        constraints are checked, at the point where the default
6088        expressions appears.
6089
6090      we must not perform access checks here.  */
6091   push_deferring_access_checks (dk_no_check);
6092   arg = break_out_target_exprs (arg);
6093   if (TREE_CODE (arg) == CONSTRUCTOR)
6094     {
6095       arg = digest_init (type, arg, tf_warning_or_error);
6096       arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6097                                         ICR_DEFAULT_ARGUMENT, fn, parmnum,
6098                                         tf_warning_or_error);
6099     }
6100   else
6101     {
6102       /* We must make a copy of ARG, in case subsequent processing
6103          alters any part of it.  For example, during gimplification a
6104          cast of the form (T) &X::f (where "f" is a member function)
6105          will lead to replacing the PTRMEM_CST for &X::f with a
6106          VAR_DECL.  We can avoid the copy for constants, since they
6107          are never modified in place.  */
6108       if (!CONSTANT_CLASS_P (arg))
6109         arg = unshare_expr (arg);
6110       arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6111                                         ICR_DEFAULT_ARGUMENT, fn, parmnum,
6112                                         tf_warning_or_error);
6113       arg = convert_for_arg_passing (type, arg);
6114     }
6115   pop_deferring_access_checks();
6116
6117   pop_defarg_context ();
6118
6119   return arg;
6120 }
6121
6122 /* Returns the type which will really be used for passing an argument of
6123    type TYPE.  */
6124
6125 tree
6126 type_passed_as (tree type)
6127 {
6128   /* Pass classes with copy ctors by invisible reference.  */
6129   if (TREE_ADDRESSABLE (type))
6130     {
6131       type = build_reference_type (type);
6132       /* There are no other pointers to this temporary.  */
6133       type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6134     }
6135   else if (targetm.calls.promote_prototypes (type)
6136            && INTEGRAL_TYPE_P (type)
6137            && COMPLETE_TYPE_P (type)
6138            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6139                                    TYPE_SIZE (integer_type_node)))
6140     type = integer_type_node;
6141
6142   return type;
6143 }
6144
6145 /* Actually perform the appropriate conversion.  */
6146
6147 tree
6148 convert_for_arg_passing (tree type, tree val)
6149 {
6150   tree bitfield_type;
6151
6152   /* If VAL is a bitfield, then -- since it has already been converted
6153      to TYPE -- it cannot have a precision greater than TYPE.  
6154
6155      If it has a smaller precision, we must widen it here.  For
6156      example, passing "int f:3;" to a function expecting an "int" will
6157      not result in any conversion before this point.
6158
6159      If the precision is the same we must not risk widening.  For
6160      example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6161      often have type "int", even though the C++ type for the field is
6162      "long long".  If the value is being passed to a function
6163      expecting an "int", then no conversions will be required.  But,
6164      if we call convert_bitfield_to_declared_type, the bitfield will
6165      be converted to "long long".  */
6166   bitfield_type = is_bitfield_expr_with_lowered_type (val);
6167   if (bitfield_type 
6168       && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6169     val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6170
6171   if (val == error_mark_node)
6172     ;
6173   /* Pass classes with copy ctors by invisible reference.  */
6174   else if (TREE_ADDRESSABLE (type))
6175     val = build1 (ADDR_EXPR, build_reference_type (type), val);
6176   else if (targetm.calls.promote_prototypes (type)
6177            && INTEGRAL_TYPE_P (type)
6178            && COMPLETE_TYPE_P (type)
6179            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6180                                    TYPE_SIZE (integer_type_node)))
6181     val = perform_integral_promotions (val);
6182   if (warn_missing_format_attribute)
6183     {
6184       tree rhstype = TREE_TYPE (val);
6185       const enum tree_code coder = TREE_CODE (rhstype);
6186       const enum tree_code codel = TREE_CODE (type);
6187       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6188           && coder == codel
6189           && check_missing_format_attribute (type, rhstype))
6190         warning (OPT_Wmissing_format_attribute,
6191                  "argument of function call might be a candidate for a format attribute");
6192     }
6193   return val;
6194 }
6195
6196 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6197    which no conversions at all should be done.  This is true for some
6198    builtins which don't act like normal functions.  */
6199
6200 static bool
6201 magic_varargs_p (tree fn)
6202 {
6203   if (DECL_BUILT_IN (fn))
6204     switch (DECL_FUNCTION_CODE (fn))
6205       {
6206       case BUILT_IN_CLASSIFY_TYPE:
6207       case BUILT_IN_CONSTANT_P:
6208       case BUILT_IN_NEXT_ARG:
6209       case BUILT_IN_VA_START:
6210         return true;
6211
6212       default:;
6213         return lookup_attribute ("type generic",
6214                                  TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6215       }
6216
6217   return false;
6218 }
6219
6220 /* Subroutine of the various build_*_call functions.  Overload resolution
6221    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6222    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
6223    bitmask of various LOOKUP_* flags which apply to the call itself.  */
6224
6225 static tree
6226 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6227 {
6228   tree fn = cand->fn;
6229   const VEC(tree,gc) *args = cand->args;
6230   tree first_arg = cand->first_arg;
6231   conversion **convs = cand->convs;
6232   conversion *conv;
6233   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6234   int parmlen;
6235   tree val;
6236   int i = 0;
6237   int j = 0;
6238   unsigned int arg_index = 0;
6239   int is_method = 0;
6240   int nargs;
6241   tree *argarray;
6242   bool already_used = false;
6243
6244   /* In a template, there is no need to perform all of the work that
6245      is normally done.  We are only interested in the type of the call
6246      expression, i.e., the return type of the function.  Any semantic
6247      errors will be deferred until the template is instantiated.  */
6248   if (processing_template_decl)
6249     {
6250       tree expr;
6251       tree return_type;
6252       const tree *argarray;
6253       unsigned int nargs;
6254
6255       return_type = TREE_TYPE (TREE_TYPE (fn));
6256       nargs = VEC_length (tree, args);
6257       if (first_arg == NULL_TREE)
6258         argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
6259       else
6260         {
6261           tree *alcarray;
6262           unsigned int ix;
6263           tree arg;
6264
6265           ++nargs;
6266           alcarray = XALLOCAVEC (tree, nargs);
6267           alcarray[0] = first_arg;
6268           FOR_EACH_VEC_ELT (tree, args, ix, arg)
6269             alcarray[ix + 1] = arg;
6270           argarray = alcarray;
6271         }
6272       expr = build_call_array_loc (input_location,
6273                                    return_type, build_addr_func (fn), nargs,
6274                                    argarray);
6275       if (TREE_THIS_VOLATILE (fn) && cfun)
6276         current_function_returns_abnormally = 1;
6277       return convert_from_reference (expr);
6278     }
6279
6280   /* Give any warnings we noticed during overload resolution.  */
6281   if (cand->warnings && (complain & tf_warning))
6282     {
6283       struct candidate_warning *w;
6284       for (w = cand->warnings; w; w = w->next)
6285         joust (cand, w->loser, 1);
6286     }
6287
6288   /* Make =delete work with SFINAE.  */
6289   if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6290     return error_mark_node;
6291
6292   if (DECL_FUNCTION_MEMBER_P (fn))
6293     {
6294       tree access_fn;
6295       /* If FN is a template function, two cases must be considered.
6296          For example:
6297
6298            struct A {
6299              protected:
6300                template <class T> void f();
6301            };
6302            template <class T> struct B {
6303              protected:
6304                void g();
6305            };
6306            struct C : A, B<int> {
6307              using A::f;        // #1
6308              using B<int>::g;   // #2
6309            };
6310
6311          In case #1 where `A::f' is a member template, DECL_ACCESS is
6312          recorded in the primary template but not in its specialization.
6313          We check access of FN using its primary template.
6314
6315          In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6316          because it is a member of class template B, DECL_ACCESS is
6317          recorded in the specialization `B<int>::g'.  We cannot use its
6318          primary template because `B<T>::g' and `B<int>::g' may have
6319          different access.  */
6320       if (DECL_TEMPLATE_INFO (fn)
6321           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6322         access_fn = DECL_TI_TEMPLATE (fn);
6323       else
6324         access_fn = fn;
6325       if (flags & LOOKUP_SPECULATIVE)
6326         {
6327           if (!speculative_access_check (cand->access_path, access_fn, fn,
6328                                          !!(flags & LOOKUP_COMPLAIN)))
6329             return error_mark_node;
6330         }
6331       else
6332         perform_or_defer_access_check (cand->access_path, access_fn, fn);
6333     }
6334
6335   /* If we're checking for implicit delete, don't bother with argument
6336      conversions.  */
6337   if (flags & LOOKUP_SPECULATIVE)
6338     {
6339       if (DECL_DELETED_FN (fn))
6340         {
6341           if (flags & LOOKUP_COMPLAIN)
6342             mark_used (fn);
6343           return error_mark_node;
6344         }
6345       if (cand->viable == 1)
6346         return fn;
6347       else if (!(flags & LOOKUP_COMPLAIN))
6348         /* Reject bad conversions now.  */
6349         return error_mark_node;
6350       /* else continue to get conversion error.  */
6351     }
6352
6353   /* Find maximum size of vector to hold converted arguments.  */
6354   parmlen = list_length (parm);
6355   nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
6356   if (parmlen > nargs)
6357     nargs = parmlen;
6358   argarray = XALLOCAVEC (tree, nargs);
6359
6360   /* The implicit parameters to a constructor are not considered by overload
6361      resolution, and must be of the proper type.  */
6362   if (DECL_CONSTRUCTOR_P (fn))
6363     {
6364       if (first_arg != NULL_TREE)
6365         {
6366           argarray[j++] = first_arg;
6367           first_arg = NULL_TREE;
6368         }
6369       else
6370         {
6371           argarray[j++] = VEC_index (tree, args, arg_index);
6372           ++arg_index;
6373         }
6374       parm = TREE_CHAIN (parm);
6375       /* We should never try to call the abstract constructor.  */
6376       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6377
6378       if (DECL_HAS_VTT_PARM_P (fn))
6379         {
6380           argarray[j++] = VEC_index (tree, args, arg_index);
6381           ++arg_index;
6382           parm = TREE_CHAIN (parm);
6383         }
6384     }
6385   /* Bypass access control for 'this' parameter.  */
6386   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6387     {
6388       tree parmtype = TREE_VALUE (parm);
6389       tree arg = (first_arg != NULL_TREE
6390                   ? first_arg
6391                   : VEC_index (tree, args, arg_index));
6392       tree argtype = TREE_TYPE (arg);
6393       tree converted_arg;
6394       tree base_binfo;
6395
6396       if (convs[i]->bad_p)
6397         {
6398           if (complain & tf_error)
6399             permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6400                        TREE_TYPE (argtype), fn);
6401           else
6402             return error_mark_node;
6403         }
6404
6405       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6406          X is called for an object that is not of type X, or of a type
6407          derived from X, the behavior is undefined.
6408
6409          So we can assume that anything passed as 'this' is non-null, and
6410          optimize accordingly.  */
6411       gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6412       /* Convert to the base in which the function was declared.  */
6413       gcc_assert (cand->conversion_path != NULL_TREE);
6414       converted_arg = build_base_path (PLUS_EXPR,
6415                                        arg,
6416                                        cand->conversion_path,
6417                                        1);
6418       /* Check that the base class is accessible.  */
6419       if (!accessible_base_p (TREE_TYPE (argtype),
6420                               BINFO_TYPE (cand->conversion_path), true))
6421         error ("%qT is not an accessible base of %qT",
6422                BINFO_TYPE (cand->conversion_path),
6423                TREE_TYPE (argtype));
6424       /* If fn was found by a using declaration, the conversion path
6425          will be to the derived class, not the base declaring fn. We
6426          must convert from derived to base.  */
6427       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6428                                 TREE_TYPE (parmtype), ba_unique, NULL);
6429       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6430                                        base_binfo, 1);
6431
6432       argarray[j++] = converted_arg;
6433       parm = TREE_CHAIN (parm);
6434       if (first_arg != NULL_TREE)
6435         first_arg = NULL_TREE;
6436       else
6437         ++arg_index;
6438       ++i;
6439       is_method = 1;
6440     }
6441
6442   gcc_assert (first_arg == NULL_TREE);
6443   for (; arg_index < VEC_length (tree, args) && parm;
6444        parm = TREE_CHAIN (parm), ++arg_index, ++i)
6445     {
6446       tree type = TREE_VALUE (parm);
6447       tree arg = VEC_index (tree, args, arg_index);
6448       bool conversion_warning = true;
6449
6450       conv = convs[i];
6451
6452       /* If the argument is NULL and used to (implicitly) instantiate a
6453          template function (and bind one of the template arguments to
6454          the type of 'long int'), we don't want to warn about passing NULL
6455          to non-pointer argument.
6456          For example, if we have this template function:
6457
6458            template<typename T> void func(T x) {}
6459
6460          we want to warn (when -Wconversion is enabled) in this case:
6461
6462            void foo() {
6463              func<int>(NULL);
6464            }
6465
6466          but not in this case:
6467
6468            void foo() {
6469              func(NULL);
6470            }
6471       */
6472       if (arg == null_node
6473           && DECL_TEMPLATE_INFO (fn)
6474           && cand->template_decl
6475           && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6476         conversion_warning = false;
6477
6478       /* Warn about initializer_list deduction that isn't currently in the
6479          working draft.  */
6480       if (cxx_dialect > cxx98
6481           && flag_deduce_init_list
6482           && cand->template_decl
6483           && is_std_init_list (non_reference (type))
6484           && BRACE_ENCLOSED_INITIALIZER_P (arg))
6485         {
6486           tree tmpl = TI_TEMPLATE (cand->template_decl);
6487           tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6488           tree patparm = get_pattern_parm (realparm, tmpl);
6489           tree pattype = TREE_TYPE (patparm);
6490           if (PACK_EXPANSION_P (pattype))
6491             pattype = PACK_EXPANSION_PATTERN (pattype);
6492           pattype = non_reference (pattype);
6493
6494           if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6495               && (cand->explicit_targs == NULL_TREE
6496                   || (TREE_VEC_LENGTH (cand->explicit_targs)
6497                       <= TEMPLATE_TYPE_IDX (pattype))))
6498             {
6499               pedwarn (input_location, 0, "deducing %qT as %qT",
6500                        non_reference (TREE_TYPE (patparm)),
6501                        non_reference (type));
6502               pedwarn (input_location, 0, "  in call to %q+D", cand->fn);
6503               pedwarn (input_location, 0,
6504                        "  (you can disable this with -fno-deduce-init-list)");
6505             }
6506         }
6507
6508       val = convert_like_with_context (conv, arg, fn, i-is_method,
6509                                        conversion_warning
6510                                        ? complain
6511                                        : complain & (~tf_warning));
6512
6513       val = convert_for_arg_passing (type, val);
6514       if (val == error_mark_node)
6515         return error_mark_node;
6516       else
6517         argarray[j++] = val;
6518     }
6519
6520   /* Default arguments */
6521   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6522     argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6523                                          TREE_PURPOSE (parm),
6524                                          fn, i - is_method);
6525   /* Ellipsis */
6526   for (; arg_index < VEC_length (tree, args); ++arg_index)
6527     {
6528       tree a = VEC_index (tree, args, arg_index);
6529       if (magic_varargs_p (fn))
6530         /* Do no conversions for magic varargs.  */
6531         a = mark_type_use (a);
6532       else
6533         a = convert_arg_to_ellipsis (a);
6534       argarray[j++] = a;
6535     }
6536
6537   gcc_assert (j <= nargs);
6538   nargs = j;
6539
6540   check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6541
6542   /* Avoid actually calling copy constructors and copy assignment operators,
6543      if possible.  */
6544
6545   if (! flag_elide_constructors)
6546     /* Do things the hard way.  */;
6547   else if (cand->num_convs == 1 
6548            && (DECL_COPY_CONSTRUCTOR_P (fn) 
6549                || DECL_MOVE_CONSTRUCTOR_P (fn)))
6550     {
6551       tree targ;
6552       tree arg = argarray[num_artificial_parms_for (fn)];
6553       tree fa;
6554       bool trivial = trivial_fn_p (fn);
6555
6556       /* Pull out the real argument, disregarding const-correctness.  */
6557       targ = arg;
6558       while (CONVERT_EXPR_P (targ)
6559              || TREE_CODE (targ) == NON_LVALUE_EXPR)
6560         targ = TREE_OPERAND (targ, 0);
6561       if (TREE_CODE (targ) == ADDR_EXPR)
6562         {
6563           targ = TREE_OPERAND (targ, 0);
6564           if (!same_type_ignoring_top_level_qualifiers_p
6565               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6566             targ = NULL_TREE;
6567         }
6568       else
6569         targ = NULL_TREE;
6570
6571       if (targ)
6572         arg = targ;
6573       else
6574         arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6575
6576       /* [class.copy]: the copy constructor is implicitly defined even if
6577          the implementation elided its use.  */
6578       if (!trivial || DECL_DELETED_FN (fn))
6579         {
6580           mark_used (fn);
6581           already_used = true;
6582         }
6583
6584       /* If we're creating a temp and we already have one, don't create a
6585          new one.  If we're not creating a temp but we get one, use
6586          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
6587          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6588          temp or an INIT_EXPR otherwise.  */
6589       fa = argarray[0];
6590       if (integer_zerop (fa))
6591         {
6592           if (TREE_CODE (arg) == TARGET_EXPR)
6593             return arg;
6594           else if (trivial)
6595             return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6596         }
6597       else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6598         {
6599           tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6600                                                                 complain));
6601
6602           val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6603           return val;
6604         }
6605     }
6606   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6607            && trivial_fn_p (fn)
6608            && !DECL_DELETED_FN (fn))
6609     {
6610       tree to = stabilize_reference
6611         (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6612       tree type = TREE_TYPE (to);
6613       tree as_base = CLASSTYPE_AS_BASE (type);
6614       tree arg = argarray[1];
6615
6616       if (is_really_empty_class (type))
6617         {
6618           /* Avoid copying empty classes.  */
6619           val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6620           TREE_NO_WARNING (val) = 1;
6621           val = build2 (COMPOUND_EXPR, type, val, to);
6622           TREE_NO_WARNING (val) = 1;
6623         }
6624       else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6625         {
6626           arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6627           val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6628         }
6629       else
6630         {
6631           /* We must only copy the non-tail padding parts.
6632              Use __builtin_memcpy for the bitwise copy.
6633              FIXME fix 22488 so we can go back to using MODIFY_EXPR
6634              instead of an explicit call to memcpy.  */
6635         
6636           tree arg0, arg1, arg2, t;
6637           tree test = NULL_TREE;
6638
6639           arg2 = TYPE_SIZE_UNIT (as_base);
6640           arg1 = arg;
6641           arg0 = cp_build_addr_expr (to, complain);
6642
6643           if (!can_trust_pointer_alignment ())
6644             {
6645               /* If we can't be sure about pointer alignment, a call
6646                  to __builtin_memcpy is expanded as a call to memcpy, which
6647                  is invalid with identical args.  Otherwise it is
6648                  expanded as a block move, which should be safe.  */
6649               arg0 = save_expr (arg0);
6650               arg1 = save_expr (arg1);
6651               test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
6652             }
6653           t = implicit_built_in_decls[BUILT_IN_MEMCPY];
6654           t = build_call_n (t, 3, arg0, arg1, arg2);
6655
6656           t = convert (TREE_TYPE (arg0), t);
6657           if (test)
6658             t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
6659           val = cp_build_indirect_ref (t, RO_NULL, complain);
6660           TREE_NO_WARNING (val) = 1;
6661         }
6662
6663       return val;
6664     }
6665   else if (DECL_DESTRUCTOR_P (fn)
6666            && trivial_fn_p (fn)
6667            && !DECL_DELETED_FN (fn))
6668     return fold_convert (void_type_node, argarray[0]);
6669   /* FIXME handle trivial default constructor, too.  */
6670
6671   if (!already_used)
6672     mark_used (fn);
6673
6674   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
6675     {
6676       tree t;
6677       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
6678                                 DECL_CONTEXT (fn),
6679                                 ba_any, NULL);
6680       gcc_assert (binfo && binfo != error_mark_node);
6681
6682       /* Warn about deprecated virtual functions now, since we're about
6683          to throw away the decl.  */
6684       if (TREE_DEPRECATED (fn))
6685         warn_deprecated_use (fn, NULL_TREE);
6686
6687       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
6688       if (TREE_SIDE_EFFECTS (argarray[0]))
6689         argarray[0] = save_expr (argarray[0]);
6690       t = build_pointer_type (TREE_TYPE (fn));
6691       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
6692         fn = build_java_interface_fn_ref (fn, argarray[0]);
6693       else
6694         fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
6695       TREE_TYPE (fn) = t;
6696     }
6697   else
6698     fn = build_addr_func (fn);
6699
6700   return build_cxx_call (fn, nargs, argarray);
6701 }
6702
6703 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6704    This function performs no overload resolution, conversion, or other
6705    high-level operations.  */
6706
6707 tree
6708 build_cxx_call (tree fn, int nargs, tree *argarray)
6709 {
6710   tree fndecl;
6711
6712   fn = build_call_a (fn, nargs, argarray);
6713
6714   /* If this call might throw an exception, note that fact.  */
6715   fndecl = get_callee_fndecl (fn);
6716
6717   /* Check that arguments to builtin functions match the expectations.  */
6718   if (fndecl
6719       && DECL_BUILT_IN (fndecl)
6720       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
6721       && !check_builtin_function_arguments (fndecl, nargs, argarray))
6722     return error_mark_node;
6723
6724   /* Some built-in function calls will be evaluated at compile-time in
6725      fold ().  */
6726   fn = fold_if_not_in_template (fn);
6727
6728   if (VOID_TYPE_P (TREE_TYPE (fn)))
6729     return fn;
6730
6731   fn = require_complete_type (fn);
6732   if (fn == error_mark_node)
6733     return error_mark_node;
6734
6735   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
6736     fn = build_cplus_new (TREE_TYPE (fn), fn, tf_warning_or_error);
6737   return convert_from_reference (fn);
6738 }
6739
6740 static GTY(()) tree java_iface_lookup_fn;
6741
6742 /* Make an expression which yields the address of the Java interface
6743    method FN.  This is achieved by generating a call to libjava's
6744    _Jv_LookupInterfaceMethodIdx().  */
6745
6746 static tree
6747 build_java_interface_fn_ref (tree fn, tree instance)
6748 {
6749   tree lookup_fn, method, idx;
6750   tree klass_ref, iface, iface_ref;
6751   int i;
6752
6753   if (!java_iface_lookup_fn)
6754     {
6755       tree ftype = build_function_type_list (ptr_type_node,
6756                                              ptr_type_node, ptr_type_node,
6757                                              java_int_type_node, NULL_TREE);
6758       java_iface_lookup_fn
6759         = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
6760                                 0, NOT_BUILT_IN, NULL, NULL_TREE);
6761     }
6762
6763   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6764      This is the first entry in the vtable.  */
6765   klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL, 
6766                                                      tf_warning_or_error),
6767                               integer_zero_node);
6768
6769   /* Get the java.lang.Class pointer for the interface being called.  */
6770   iface = DECL_CONTEXT (fn);
6771   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
6772   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
6773       || DECL_CONTEXT (iface_ref) != iface)
6774     {
6775       error ("could not find class$ field in java interface type %qT",
6776                 iface);
6777       return error_mark_node;
6778     }
6779   iface_ref = build_address (iface_ref);
6780   iface_ref = convert (build_pointer_type (iface), iface_ref);
6781
6782   /* Determine the itable index of FN.  */
6783   i = 1;
6784   for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
6785     {
6786       if (!DECL_VIRTUAL_P (method))
6787         continue;
6788       if (fn == method)
6789         break;
6790       i++;
6791     }
6792   idx = build_int_cst (NULL_TREE, i);
6793
6794   lookup_fn = build1 (ADDR_EXPR,
6795                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
6796                       java_iface_lookup_fn);
6797   return build_call_nary (ptr_type_node, lookup_fn,
6798                           3, klass_ref, iface_ref, idx);
6799 }
6800
6801 /* Returns the value to use for the in-charge parameter when making a
6802    call to a function with the indicated NAME.
6803
6804    FIXME:Can't we find a neater way to do this mapping?  */
6805
6806 tree
6807 in_charge_arg_for_name (tree name)
6808 {
6809  if (name == base_ctor_identifier
6810       || name == base_dtor_identifier)
6811     return integer_zero_node;
6812   else if (name == complete_ctor_identifier)
6813     return integer_one_node;
6814   else if (name == complete_dtor_identifier)
6815     return integer_two_node;
6816   else if (name == deleting_dtor_identifier)
6817     return integer_three_node;
6818
6819   /* This function should only be called with one of the names listed
6820      above.  */
6821   gcc_unreachable ();
6822   return NULL_TREE;
6823 }
6824
6825 /* Build a call to a constructor, destructor, or an assignment
6826    operator for INSTANCE, an expression with class type.  NAME
6827    indicates the special member function to call; *ARGS are the
6828    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
6829    indicates the base of INSTANCE that is to be passed as the `this'
6830    parameter to the member function called.
6831
6832    FLAGS are the LOOKUP_* flags to use when processing the call.
6833
6834    If NAME indicates a complete object constructor, INSTANCE may be
6835    NULL_TREE.  In this case, the caller will call build_cplus_new to
6836    store the newly constructed object into a VAR_DECL.  */
6837
6838 tree
6839 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
6840                            tree binfo, int flags, tsubst_flags_t complain)
6841 {
6842   tree fns;
6843   /* The type of the subobject to be constructed or destroyed.  */
6844   tree class_type;
6845   VEC(tree,gc) *allocated = NULL;
6846   tree ret;
6847
6848   gcc_assert (name == complete_ctor_identifier
6849               || name == base_ctor_identifier
6850               || name == complete_dtor_identifier
6851               || name == base_dtor_identifier
6852               || name == deleting_dtor_identifier
6853               || name == ansi_assopname (NOP_EXPR));
6854   if (TYPE_P (binfo))
6855     {
6856       /* Resolve the name.  */
6857       if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
6858         return error_mark_node;
6859
6860       binfo = TYPE_BINFO (binfo);
6861     }
6862
6863   gcc_assert (binfo != NULL_TREE);
6864
6865   class_type = BINFO_TYPE (binfo);
6866
6867   /* Handle the special case where INSTANCE is NULL_TREE.  */
6868   if (name == complete_ctor_identifier && !instance)
6869     {
6870       instance = build_int_cst (build_pointer_type (class_type), 0);
6871       instance = build1 (INDIRECT_REF, class_type, instance);
6872     }
6873   else
6874     {
6875       if (name == complete_dtor_identifier
6876           || name == base_dtor_identifier
6877           || name == deleting_dtor_identifier)
6878         gcc_assert (args == NULL || VEC_empty (tree, *args));
6879
6880       /* Convert to the base class, if necessary.  */
6881       if (!same_type_ignoring_top_level_qualifiers_p
6882           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
6883         {
6884           if (name != ansi_assopname (NOP_EXPR))
6885             /* For constructors and destructors, either the base is
6886                non-virtual, or it is virtual but we are doing the
6887                conversion from a constructor or destructor for the
6888                complete object.  In either case, we can convert
6889                statically.  */
6890             instance = convert_to_base_statically (instance, binfo);
6891           else
6892             /* However, for assignment operators, we must convert
6893                dynamically if the base is virtual.  */
6894             instance = build_base_path (PLUS_EXPR, instance,
6895                                         binfo, /*nonnull=*/1);
6896         }
6897     }
6898
6899   gcc_assert (instance != NULL_TREE);
6900
6901   fns = lookup_fnfields (binfo, name, 1);
6902
6903   /* When making a call to a constructor or destructor for a subobject
6904      that uses virtual base classes, pass down a pointer to a VTT for
6905      the subobject.  */
6906   if ((name == base_ctor_identifier
6907        || name == base_dtor_identifier)
6908       && CLASSTYPE_VBASECLASSES (class_type))
6909     {
6910       tree vtt;
6911       tree sub_vtt;
6912
6913       /* If the current function is a complete object constructor
6914          or destructor, then we fetch the VTT directly.
6915          Otherwise, we look it up using the VTT we were given.  */
6916       vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
6917       vtt = decay_conversion (vtt);
6918       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
6919                     build2 (EQ_EXPR, boolean_type_node,
6920                             current_in_charge_parm, integer_zero_node),
6921                     current_vtt_parm,
6922                     vtt);
6923       gcc_assert (BINFO_SUBVTT_INDEX (binfo));
6924       sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
6925                         BINFO_SUBVTT_INDEX (binfo));
6926
6927       if (args == NULL)
6928         {
6929           allocated = make_tree_vector ();
6930           args = &allocated;
6931         }
6932
6933       VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
6934     }
6935
6936   ret = build_new_method_call (instance, fns, args,
6937                                TYPE_BINFO (BINFO_TYPE (binfo)),
6938                                flags, /*fn=*/NULL,
6939                                complain);
6940
6941   if (allocated != NULL)
6942     release_tree_vector (allocated);
6943
6944   return ret;
6945 }
6946
6947 /* Return the NAME, as a C string.  The NAME indicates a function that
6948    is a member of TYPE.  *FREE_P is set to true if the caller must
6949    free the memory returned.
6950
6951    Rather than go through all of this, we should simply set the names
6952    of constructors and destructors appropriately, and dispense with
6953    ctor_identifier, dtor_identifier, etc.  */
6954
6955 static char *
6956 name_as_c_string (tree name, tree type, bool *free_p)
6957 {
6958   char *pretty_name;
6959
6960   /* Assume that we will not allocate memory.  */
6961   *free_p = false;
6962   /* Constructors and destructors are special.  */
6963   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6964     {
6965       pretty_name
6966         = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
6967       /* For a destructor, add the '~'.  */
6968       if (name == complete_dtor_identifier
6969           || name == base_dtor_identifier
6970           || name == deleting_dtor_identifier)
6971         {
6972           pretty_name = concat ("~", pretty_name, NULL);
6973           /* Remember that we need to free the memory allocated.  */
6974           *free_p = true;
6975         }
6976     }
6977   else if (IDENTIFIER_TYPENAME_P (name))
6978     {
6979       pretty_name = concat ("operator ",
6980                             type_as_string_translate (TREE_TYPE (name),
6981                                                       TFF_PLAIN_IDENTIFIER),
6982                             NULL);
6983       /* Remember that we need to free the memory allocated.  */
6984       *free_p = true;
6985     }
6986   else
6987     pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
6988
6989   return pretty_name;
6990 }
6991
6992 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
6993    be set, upon return, to the function called.  ARGS may be NULL.
6994    This may change ARGS.  */
6995
6996 static tree
6997 build_new_method_call_1 (tree instance, tree fns, VEC(tree,gc) **args,
6998                          tree conversion_path, int flags,
6999                          tree *fn_p, tsubst_flags_t complain)
7000 {
7001   struct z_candidate *candidates = 0, *cand;
7002   tree explicit_targs = NULL_TREE;
7003   tree basetype = NULL_TREE;
7004   tree access_binfo;
7005   tree optype;
7006   tree first_mem_arg = NULL_TREE;
7007   tree instance_ptr;
7008   tree name;
7009   bool skip_first_for_error;
7010   VEC(tree,gc) *user_args;
7011   tree call;
7012   tree fn;
7013   int template_only = 0;
7014   bool any_viable_p;
7015   tree orig_instance;
7016   tree orig_fns;
7017   VEC(tree,gc) *orig_args = NULL;
7018   void *p;
7019
7020   gcc_assert (instance != NULL_TREE);
7021
7022   /* We don't know what function we're going to call, yet.  */
7023   if (fn_p)
7024     *fn_p = NULL_TREE;
7025
7026   if (error_operand_p (instance)
7027       || !fns || error_operand_p (fns))
7028     return error_mark_node;
7029
7030   if (!BASELINK_P (fns))
7031     {
7032       if (complain & tf_error)
7033         error ("call to non-function %qD", fns);
7034       return error_mark_node;
7035     }
7036
7037   orig_instance = instance;
7038   orig_fns = fns;
7039
7040   /* Dismantle the baselink to collect all the information we need.  */
7041   if (!conversion_path)
7042     conversion_path = BASELINK_BINFO (fns);
7043   access_binfo = BASELINK_ACCESS_BINFO (fns);
7044   optype = BASELINK_OPTYPE (fns);
7045   fns = BASELINK_FUNCTIONS (fns);
7046   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7047     {
7048       explicit_targs = TREE_OPERAND (fns, 1);
7049       fns = TREE_OPERAND (fns, 0);
7050       template_only = 1;
7051     }
7052   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7053               || TREE_CODE (fns) == TEMPLATE_DECL
7054               || TREE_CODE (fns) == OVERLOAD);
7055   fn = get_first_fn (fns);
7056   name = DECL_NAME (fn);
7057
7058   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7059   gcc_assert (CLASS_TYPE_P (basetype));
7060
7061   if (processing_template_decl)
7062     {
7063       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7064       instance = build_non_dependent_expr (instance);
7065       if (args != NULL)
7066         make_args_non_dependent (*args);
7067     }
7068
7069   user_args = args == NULL ? NULL : *args;
7070   /* Under DR 147 A::A() is an invalid constructor call,
7071      not a functional cast.  */
7072   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7073     {
7074       if (! (complain & tf_error))
7075         return error_mark_node;
7076
7077       permerror (input_location,
7078                  "cannot call constructor %<%T::%D%> directly",
7079                  basetype, name);
7080       permerror (input_location, "  for a function-style cast, remove the "
7081                  "redundant %<::%D%>", name);
7082       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7083                                     complain);
7084       return call;
7085     }
7086
7087   /* Figure out whether to skip the first argument for the error
7088      message we will display to users if an error occurs.  We don't
7089      want to display any compiler-generated arguments.  The "this"
7090      pointer hasn't been added yet.  However, we must remove the VTT
7091      pointer if this is a call to a base-class constructor or
7092      destructor.  */
7093   skip_first_for_error = false;
7094   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7095     {
7096       /* Callers should explicitly indicate whether they want to construct
7097          the complete object or just the part without virtual bases.  */
7098       gcc_assert (name != ctor_identifier);
7099       /* Similarly for destructors.  */
7100       gcc_assert (name != dtor_identifier);
7101       /* Remove the VTT pointer, if present.  */
7102       if ((name == base_ctor_identifier || name == base_dtor_identifier)
7103           && CLASSTYPE_VBASECLASSES (basetype))
7104         skip_first_for_error = true;
7105     }
7106
7107   /* Process the argument list.  */
7108   if (args != NULL && *args != NULL)
7109     {
7110       *args = resolve_args (*args, complain);
7111       if (*args == NULL)
7112         return error_mark_node;
7113     }
7114
7115   instance_ptr = build_this (instance);
7116
7117   /* It's OK to call destructors and constructors on cv-qualified objects.
7118      Therefore, convert the INSTANCE_PTR to the unqualified type, if
7119      necessary.  */
7120   if (DECL_DESTRUCTOR_P (fn)
7121       || DECL_CONSTRUCTOR_P (fn))
7122     {
7123       tree type = build_pointer_type (basetype);
7124       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7125         instance_ptr = build_nop (type, instance_ptr);
7126     }
7127   if (DECL_DESTRUCTOR_P (fn))
7128     name = complete_dtor_identifier;
7129
7130   first_mem_arg = instance_ptr;
7131
7132   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7133   p = conversion_obstack_alloc (0);
7134
7135   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7136      initializer, not T({ }).  */
7137   if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
7138       && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
7139       && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0)))
7140     {
7141       gcc_assert (VEC_length (tree, *args) == 1
7142                   && !(flags & LOOKUP_ONLYCONVERTING));
7143
7144       add_list_candidates (fns, first_mem_arg, VEC_index (tree, *args, 0),
7145                            basetype, explicit_targs, template_only,
7146                            conversion_path, access_binfo, flags, &candidates);
7147     }
7148   else
7149     {
7150       add_candidates (fns, first_mem_arg, user_args, optype,
7151                       explicit_targs, template_only, conversion_path,
7152                       access_binfo, flags, &candidates);
7153     }
7154   any_viable_p = false;
7155   candidates = splice_viable (candidates, pedantic, &any_viable_p);
7156
7157   if (!any_viable_p)
7158     {
7159       if (complain & tf_error)
7160         {
7161           if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7162             cxx_incomplete_type_error (instance_ptr, basetype);
7163           else if (optype)
7164             error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7165                    basetype, optype, build_tree_list_vec (user_args),
7166                    TREE_TYPE (TREE_TYPE (instance_ptr)));
7167           else
7168             {
7169               char *pretty_name;
7170               bool free_p;
7171               tree arglist;
7172
7173               pretty_name = name_as_c_string (name, basetype, &free_p);
7174               arglist = build_tree_list_vec (user_args);
7175               if (skip_first_for_error)
7176                 arglist = TREE_CHAIN (arglist);
7177               error ("no matching function for call to %<%T::%s(%A)%#V%>",
7178                      basetype, pretty_name, arglist,
7179                      TREE_TYPE (TREE_TYPE (instance_ptr)));
7180               if (free_p)
7181                 free (pretty_name);
7182             }
7183           print_z_candidates (location_of (name), candidates);
7184         }
7185       call = error_mark_node;
7186     }
7187   else
7188     {
7189       cand = tourney (candidates);
7190       if (cand == 0)
7191         {
7192           char *pretty_name;
7193           bool free_p;
7194           tree arglist;
7195
7196           if (complain & tf_error)
7197             {
7198               pretty_name = name_as_c_string (name, basetype, &free_p);
7199               arglist = build_tree_list_vec (user_args);
7200               if (skip_first_for_error)
7201                 arglist = TREE_CHAIN (arglist);
7202               error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7203                      arglist);
7204               print_z_candidates (location_of (name), candidates);
7205               if (free_p)
7206                 free (pretty_name);
7207             }
7208           call = error_mark_node;
7209         }
7210       else
7211         {
7212           fn = cand->fn;
7213
7214           if (!(flags & LOOKUP_NONVIRTUAL)
7215               && DECL_PURE_VIRTUAL_P (fn)
7216               && instance == current_class_ref
7217               && (DECL_CONSTRUCTOR_P (current_function_decl)
7218                   || DECL_DESTRUCTOR_P (current_function_decl))
7219               && (complain & tf_warning))
7220             /* This is not an error, it is runtime undefined
7221                behavior.  */
7222             warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7223                       "pure virtual %q#D called from constructor"
7224                       : "pure virtual %q#D called from destructor"),
7225                      fn);
7226
7227           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7228               && is_dummy_object (instance_ptr))
7229             {
7230               if (complain & tf_error)
7231                 error ("cannot call member function %qD without object",
7232                        fn);
7233               call = error_mark_node;
7234             }
7235           else
7236             {
7237               if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7238                   && resolves_to_fixed_type_p (instance, 0))
7239                 flags |= LOOKUP_NONVIRTUAL;
7240               if (explicit_targs)
7241                 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7242               /* Now we know what function is being called.  */
7243               if (fn_p)
7244                 *fn_p = fn;
7245               /* Build the actual CALL_EXPR.  */
7246               call = build_over_call (cand, flags, complain);
7247               /* In an expression of the form `a->f()' where `f' turns
7248                  out to be a static member function, `a' is
7249                  none-the-less evaluated.  */
7250               if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7251                   && !is_dummy_object (instance_ptr)
7252                   && TREE_SIDE_EFFECTS (instance_ptr))
7253                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7254                                instance_ptr, call);
7255               else if (call != error_mark_node
7256                        && DECL_DESTRUCTOR_P (cand->fn)
7257                        && !VOID_TYPE_P (TREE_TYPE (call)))
7258                 /* An explicit call of the form "x->~X()" has type
7259                    "void".  However, on platforms where destructors
7260                    return "this" (i.e., those where
7261                    targetm.cxx.cdtor_returns_this is true), such calls
7262                    will appear to have a return value of pointer type
7263                    to the low-level call machinery.  We do not want to
7264                    change the low-level machinery, since we want to be
7265                    able to optimize "delete f()" on such platforms as
7266                    "operator delete(~X(f()))" (rather than generating
7267                    "t = f(), ~X(t), operator delete (t)").  */
7268                 call = build_nop (void_type_node, call);
7269             }
7270         }
7271     }
7272
7273   if (processing_template_decl && call != error_mark_node)
7274     {
7275       bool cast_to_void = false;
7276
7277       if (TREE_CODE (call) == COMPOUND_EXPR)
7278         call = TREE_OPERAND (call, 1);
7279       else if (TREE_CODE (call) == NOP_EXPR)
7280         {
7281           cast_to_void = true;
7282           call = TREE_OPERAND (call, 0);
7283         }
7284       if (TREE_CODE (call) == INDIRECT_REF)
7285         call = TREE_OPERAND (call, 0);
7286       call = (build_min_non_dep_call_vec
7287               (call,
7288                build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7289                           orig_instance, orig_fns, NULL_TREE),
7290                orig_args));
7291       call = convert_from_reference (call);
7292       if (cast_to_void)
7293         call = build_nop (void_type_node, call);
7294     }
7295
7296  /* Free all the conversions we allocated.  */
7297   obstack_free (&conversion_obstack, p);
7298
7299   if (orig_args != NULL)
7300     release_tree_vector (orig_args);
7301
7302   return call;
7303 }
7304
7305 /* Wrapper for above.  */
7306
7307 tree
7308 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
7309                        tree conversion_path, int flags,
7310                        tree *fn_p, tsubst_flags_t complain)
7311 {
7312   tree ret;
7313   bool subtime = timevar_cond_start (TV_OVERLOAD);
7314   ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7315                                  fn_p, complain);
7316   timevar_cond_stop (TV_OVERLOAD, subtime);
7317   return ret;
7318 }
7319
7320 /* Returns true iff standard conversion sequence ICS1 is a proper
7321    subsequence of ICS2.  */
7322
7323 static bool
7324 is_subseq (conversion *ics1, conversion *ics2)
7325 {
7326   /* We can assume that a conversion of the same code
7327      between the same types indicates a subsequence since we only get
7328      here if the types we are converting from are the same.  */
7329
7330   while (ics1->kind == ck_rvalue
7331          || ics1->kind == ck_lvalue)
7332     ics1 = ics1->u.next;
7333
7334   while (1)
7335     {
7336       while (ics2->kind == ck_rvalue
7337              || ics2->kind == ck_lvalue)
7338         ics2 = ics2->u.next;
7339
7340       if (ics2->kind == ck_user
7341           || ics2->kind == ck_ambig
7342           || ics2->kind == ck_aggr
7343           || ics2->kind == ck_list
7344           || ics2->kind == ck_identity)
7345         /* At this point, ICS1 cannot be a proper subsequence of
7346            ICS2.  We can get a USER_CONV when we are comparing the
7347            second standard conversion sequence of two user conversion
7348            sequences.  */
7349         return false;
7350
7351       ics2 = ics2->u.next;
7352
7353       if (ics2->kind == ics1->kind
7354           && same_type_p (ics2->type, ics1->type)
7355           && same_type_p (ics2->u.next->type,
7356                           ics1->u.next->type))
7357         return true;
7358     }
7359 }
7360
7361 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
7362    be any _TYPE nodes.  */
7363
7364 bool
7365 is_properly_derived_from (tree derived, tree base)
7366 {
7367   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7368     return false;
7369
7370   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
7371      considers every class derived from itself.  */
7372   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7373           && DERIVED_FROM_P (base, derived));
7374 }
7375
7376 /* We build the ICS for an implicit object parameter as a pointer
7377    conversion sequence.  However, such a sequence should be compared
7378    as if it were a reference conversion sequence.  If ICS is the
7379    implicit conversion sequence for an implicit object parameter,
7380    modify it accordingly.  */
7381
7382 static void
7383 maybe_handle_implicit_object (conversion **ics)
7384 {
7385   if ((*ics)->this_p)
7386     {
7387       /* [over.match.funcs]
7388
7389          For non-static member functions, the type of the
7390          implicit object parameter is "reference to cv X"
7391          where X is the class of which the function is a
7392          member and cv is the cv-qualification on the member
7393          function declaration.  */
7394       conversion *t = *ics;
7395       tree reference_type;
7396
7397       /* The `this' parameter is a pointer to a class type.  Make the
7398          implicit conversion talk about a reference to that same class
7399          type.  */
7400       reference_type = TREE_TYPE (t->type);
7401       reference_type = build_reference_type (reference_type);
7402
7403       if (t->kind == ck_qual)
7404         t = t->u.next;
7405       if (t->kind == ck_ptr)
7406         t = t->u.next;
7407       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7408       t = direct_reference_binding (reference_type, t);
7409       t->this_p = 1;
7410       t->rvaluedness_matches_p = 0;
7411       *ics = t;
7412     }
7413 }
7414
7415 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7416    and return the initial reference binding conversion. Otherwise,
7417    leave *ICS unchanged and return NULL.  */
7418
7419 static conversion *
7420 maybe_handle_ref_bind (conversion **ics)
7421 {
7422   if ((*ics)->kind == ck_ref_bind)
7423     {
7424       conversion *old_ics = *ics;
7425       *ics = old_ics->u.next;
7426       (*ics)->user_conv_p = old_ics->user_conv_p;
7427       return old_ics;
7428     }
7429
7430   return NULL;
7431 }
7432
7433 /* Compare two implicit conversion sequences according to the rules set out in
7434    [over.ics.rank].  Return values:
7435
7436       1: ics1 is better than ics2
7437      -1: ics2 is better than ics1
7438       0: ics1 and ics2 are indistinguishable */
7439
7440 static int
7441 compare_ics (conversion *ics1, conversion *ics2)
7442 {
7443   tree from_type1;
7444   tree from_type2;
7445   tree to_type1;
7446   tree to_type2;
7447   tree deref_from_type1 = NULL_TREE;
7448   tree deref_from_type2 = NULL_TREE;
7449   tree deref_to_type1 = NULL_TREE;
7450   tree deref_to_type2 = NULL_TREE;
7451   conversion_rank rank1, rank2;
7452
7453   /* REF_BINDING is nonzero if the result of the conversion sequence
7454      is a reference type.   In that case REF_CONV is the reference
7455      binding conversion. */
7456   conversion *ref_conv1;
7457   conversion *ref_conv2;
7458
7459   /* Handle implicit object parameters.  */
7460   maybe_handle_implicit_object (&ics1);
7461   maybe_handle_implicit_object (&ics2);
7462
7463   /* Handle reference parameters.  */
7464   ref_conv1 = maybe_handle_ref_bind (&ics1);
7465   ref_conv2 = maybe_handle_ref_bind (&ics2);
7466
7467   /* List-initialization sequence L1 is a better conversion sequence than
7468      list-initialization sequence L2 if L1 converts to
7469      std::initializer_list<X> for some X and L2 does not.  */
7470   if (ics1->kind == ck_list && ics2->kind != ck_list)
7471     return 1;
7472   if (ics2->kind == ck_list && ics1->kind != ck_list)
7473     return -1;
7474
7475   /* [over.ics.rank]
7476
7477      When  comparing  the  basic forms of implicit conversion sequences (as
7478      defined in _over.best.ics_)
7479
7480      --a standard conversion sequence (_over.ics.scs_) is a better
7481        conversion sequence than a user-defined conversion sequence
7482        or an ellipsis conversion sequence, and
7483
7484      --a user-defined conversion sequence (_over.ics.user_) is a
7485        better conversion sequence than an ellipsis conversion sequence
7486        (_over.ics.ellipsis_).  */
7487   rank1 = CONVERSION_RANK (ics1);
7488   rank2 = CONVERSION_RANK (ics2);
7489
7490   if (rank1 > rank2)
7491     return -1;
7492   else if (rank1 < rank2)
7493     return 1;
7494
7495   if (rank1 == cr_bad)
7496     {
7497       /* Both ICS are bad.  We try to make a decision based on what would
7498          have happened if they'd been good.  This is not an extension,
7499          we'll still give an error when we build up the call; this just
7500          helps us give a more helpful error message.  */
7501       rank1 = BAD_CONVERSION_RANK (ics1);
7502       rank2 = BAD_CONVERSION_RANK (ics2);
7503
7504       if (rank1 > rank2)
7505         return -1;
7506       else if (rank1 < rank2)
7507         return 1;
7508
7509       /* We couldn't make up our minds; try to figure it out below.  */
7510     }
7511
7512   if (ics1->ellipsis_p)
7513     /* Both conversions are ellipsis conversions.  */
7514     return 0;
7515
7516   /* User-defined  conversion sequence U1 is a better conversion sequence
7517      than another user-defined conversion sequence U2 if they contain the
7518      same user-defined conversion operator or constructor and if the sec-
7519      ond standard conversion sequence of U1 is  better  than  the  second
7520      standard conversion sequence of U2.  */
7521
7522   /* Handle list-conversion with the same code even though it isn't always
7523      ranked as a user-defined conversion and it doesn't have a second
7524      standard conversion sequence; it will still have the desired effect.
7525      Specifically, we need to do the reference binding comparison at the
7526      end of this function.  */
7527
7528   if (ics1->user_conv_p || ics1->kind == ck_list)
7529     {
7530       conversion *t1;
7531       conversion *t2;
7532
7533       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
7534         if (t1->kind == ck_ambig || t1->kind == ck_aggr
7535             || t1->kind == ck_list)
7536           break;
7537       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
7538         if (t2->kind == ck_ambig || t2->kind == ck_aggr
7539             || t2->kind == ck_list)
7540           break;
7541
7542       if (t1->kind != t2->kind)
7543         return 0;
7544       else if (t1->kind == ck_user)
7545         {
7546           if (t1->cand->fn != t2->cand->fn)
7547             return 0;
7548         }
7549       else
7550         {
7551           /* For ambiguous or aggregate conversions, use the target type as
7552              a proxy for the conversion function.  */
7553           if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7554             return 0;
7555         }
7556
7557       /* We can just fall through here, after setting up
7558          FROM_TYPE1 and FROM_TYPE2.  */
7559       from_type1 = t1->type;
7560       from_type2 = t2->type;
7561     }
7562   else
7563     {
7564       conversion *t1;
7565       conversion *t2;
7566
7567       /* We're dealing with two standard conversion sequences.
7568
7569          [over.ics.rank]
7570
7571          Standard conversion sequence S1 is a better conversion
7572          sequence than standard conversion sequence S2 if
7573
7574          --S1 is a proper subsequence of S2 (comparing the conversion
7575            sequences in the canonical form defined by _over.ics.scs_,
7576            excluding any Lvalue Transformation; the identity
7577            conversion sequence is considered to be a subsequence of
7578            any non-identity conversion sequence */
7579
7580       t1 = ics1;
7581       while (t1->kind != ck_identity)
7582         t1 = t1->u.next;
7583       from_type1 = t1->type;
7584
7585       t2 = ics2;
7586       while (t2->kind != ck_identity)
7587         t2 = t2->u.next;
7588       from_type2 = t2->type;
7589     }
7590
7591   /* One sequence can only be a subsequence of the other if they start with
7592      the same type.  They can start with different types when comparing the
7593      second standard conversion sequence in two user-defined conversion
7594      sequences.  */
7595   if (same_type_p (from_type1, from_type2))
7596     {
7597       if (is_subseq (ics1, ics2))
7598         return 1;
7599       if (is_subseq (ics2, ics1))
7600         return -1;
7601     }
7602
7603   /* [over.ics.rank]
7604
7605      Or, if not that,
7606
7607      --the rank of S1 is better than the rank of S2 (by the rules
7608        defined below):
7609
7610     Standard conversion sequences are ordered by their ranks: an Exact
7611     Match is a better conversion than a Promotion, which is a better
7612     conversion than a Conversion.
7613
7614     Two conversion sequences with the same rank are indistinguishable
7615     unless one of the following rules applies:
7616
7617     --A conversion that does not a convert a pointer, pointer to member,
7618       or std::nullptr_t to bool is better than one that does.
7619
7620     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
7621     so that we do not have to check it explicitly.  */
7622   if (ics1->rank < ics2->rank)
7623     return 1;
7624   else if (ics2->rank < ics1->rank)
7625     return -1;
7626
7627   to_type1 = ics1->type;
7628   to_type2 = ics2->type;
7629
7630   /* A conversion from scalar arithmetic type to complex is worse than a
7631      conversion between scalar arithmetic types.  */
7632   if (same_type_p (from_type1, from_type2)
7633       && ARITHMETIC_TYPE_P (from_type1)
7634       && ARITHMETIC_TYPE_P (to_type1)
7635       && ARITHMETIC_TYPE_P (to_type2)
7636       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
7637           != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
7638     {
7639       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
7640         return -1;
7641       else
7642         return 1;
7643     }
7644
7645   if (TYPE_PTR_P (from_type1)
7646       && TYPE_PTR_P (from_type2)
7647       && TYPE_PTR_P (to_type1)
7648       && TYPE_PTR_P (to_type2))
7649     {
7650       deref_from_type1 = TREE_TYPE (from_type1);
7651       deref_from_type2 = TREE_TYPE (from_type2);
7652       deref_to_type1 = TREE_TYPE (to_type1);
7653       deref_to_type2 = TREE_TYPE (to_type2);
7654     }
7655   /* The rules for pointers to members A::* are just like the rules
7656      for pointers A*, except opposite: if B is derived from A then
7657      A::* converts to B::*, not vice versa.  For that reason, we
7658      switch the from_ and to_ variables here.  */
7659   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
7660             && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
7661            || (TYPE_PTRMEMFUNC_P (from_type1)
7662                && TYPE_PTRMEMFUNC_P (from_type2)
7663                && TYPE_PTRMEMFUNC_P (to_type1)
7664                && TYPE_PTRMEMFUNC_P (to_type2)))
7665     {
7666       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
7667       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
7668       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
7669       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
7670     }
7671
7672   if (deref_from_type1 != NULL_TREE
7673       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
7674       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
7675     {
7676       /* This was one of the pointer or pointer-like conversions.
7677
7678          [over.ics.rank]
7679
7680          --If class B is derived directly or indirectly from class A,
7681            conversion of B* to A* is better than conversion of B* to
7682            void*, and conversion of A* to void* is better than
7683            conversion of B* to void*.  */
7684       if (TREE_CODE (deref_to_type1) == VOID_TYPE
7685           && TREE_CODE (deref_to_type2) == VOID_TYPE)
7686         {
7687           if (is_properly_derived_from (deref_from_type1,
7688                                         deref_from_type2))
7689             return -1;
7690           else if (is_properly_derived_from (deref_from_type2,
7691                                              deref_from_type1))
7692             return 1;
7693         }
7694       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
7695                || TREE_CODE (deref_to_type2) == VOID_TYPE)
7696         {
7697           if (same_type_p (deref_from_type1, deref_from_type2))
7698             {
7699               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
7700                 {
7701                   if (is_properly_derived_from (deref_from_type1,
7702                                                 deref_to_type1))
7703                     return 1;
7704                 }
7705               /* We know that DEREF_TO_TYPE1 is `void' here.  */
7706               else if (is_properly_derived_from (deref_from_type1,
7707                                                  deref_to_type2))
7708                 return -1;
7709             }
7710         }
7711       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
7712                && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
7713         {
7714           /* [over.ics.rank]
7715
7716              --If class B is derived directly or indirectly from class A
7717                and class C is derived directly or indirectly from B,
7718
7719              --conversion of C* to B* is better than conversion of C* to
7720                A*,
7721
7722              --conversion of B* to A* is better than conversion of C* to
7723                A*  */
7724           if (same_type_p (deref_from_type1, deref_from_type2))
7725             {
7726               if (is_properly_derived_from (deref_to_type1,
7727                                             deref_to_type2))
7728                 return 1;
7729               else if (is_properly_derived_from (deref_to_type2,
7730                                                  deref_to_type1))
7731                 return -1;
7732             }
7733           else if (same_type_p (deref_to_type1, deref_to_type2))
7734             {
7735               if (is_properly_derived_from (deref_from_type2,
7736                                             deref_from_type1))
7737                 return 1;
7738               else if (is_properly_derived_from (deref_from_type1,
7739                                                  deref_from_type2))
7740                 return -1;
7741             }
7742         }
7743     }
7744   else if (CLASS_TYPE_P (non_reference (from_type1))
7745            && same_type_p (from_type1, from_type2))
7746     {
7747       tree from = non_reference (from_type1);
7748
7749       /* [over.ics.rank]
7750
7751          --binding of an expression of type C to a reference of type
7752            B& is better than binding an expression of type C to a
7753            reference of type A&
7754
7755          --conversion of C to B is better than conversion of C to A,  */
7756       if (is_properly_derived_from (from, to_type1)
7757           && is_properly_derived_from (from, to_type2))
7758         {
7759           if (is_properly_derived_from (to_type1, to_type2))
7760             return 1;
7761           else if (is_properly_derived_from (to_type2, to_type1))
7762             return -1;
7763         }
7764     }
7765   else if (CLASS_TYPE_P (non_reference (to_type1))
7766            && same_type_p (to_type1, to_type2))
7767     {
7768       tree to = non_reference (to_type1);
7769
7770       /* [over.ics.rank]
7771
7772          --binding of an expression of type B to a reference of type
7773            A& is better than binding an expression of type C to a
7774            reference of type A&,
7775
7776          --conversion of B to A is better than conversion of C to A  */
7777       if (is_properly_derived_from (from_type1, to)
7778           && is_properly_derived_from (from_type2, to))
7779         {
7780           if (is_properly_derived_from (from_type2, from_type1))
7781             return 1;
7782           else if (is_properly_derived_from (from_type1, from_type2))
7783             return -1;
7784         }
7785     }
7786
7787   /* [over.ics.rank]
7788
7789      --S1 and S2 differ only in their qualification conversion and  yield
7790        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
7791        qualification signature of type T1 is a proper subset of  the  cv-
7792        qualification signature of type T2  */
7793   if (ics1->kind == ck_qual
7794       && ics2->kind == ck_qual
7795       && same_type_p (from_type1, from_type2))
7796     {
7797       int result = comp_cv_qual_signature (to_type1, to_type2);
7798       if (result != 0)
7799         return result;
7800     }
7801
7802   /* [over.ics.rank]
7803
7804      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
7805      to an implicit object parameter, and either S1 binds an lvalue reference
7806      to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
7807      reference to an rvalue and S2 binds an lvalue reference
7808      (C++0x draft standard, 13.3.3.2)
7809
7810      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
7811      types to which the references refer are the same type except for
7812      top-level cv-qualifiers, and the type to which the reference
7813      initialized by S2 refers is more cv-qualified than the type to
7814      which the reference initialized by S1 refers */
7815
7816   if (ref_conv1 && ref_conv2)
7817     {
7818       if (!ref_conv1->this_p && !ref_conv2->this_p
7819           && (TYPE_REF_IS_RVALUE (ref_conv1->type)
7820               != TYPE_REF_IS_RVALUE (ref_conv2->type)))
7821         {
7822           if (ref_conv1->rvaluedness_matches_p)
7823             return 1;
7824           if (ref_conv2->rvaluedness_matches_p)
7825             return -1;
7826         }
7827
7828       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
7829         return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
7830                                       TREE_TYPE (ref_conv1->type));
7831     }
7832
7833   /* Neither conversion sequence is better than the other.  */
7834   return 0;
7835 }
7836
7837 /* The source type for this standard conversion sequence.  */
7838
7839 static tree
7840 source_type (conversion *t)
7841 {
7842   for (;; t = t->u.next)
7843     {
7844       if (t->kind == ck_user
7845           || t->kind == ck_ambig
7846           || t->kind == ck_identity)
7847         return t->type;
7848     }
7849   gcc_unreachable ();
7850 }
7851
7852 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
7853    a pointer to LOSER and re-running joust to produce the warning if WINNER
7854    is actually used.  */
7855
7856 static void
7857 add_warning (struct z_candidate *winner, struct z_candidate *loser)
7858 {
7859   candidate_warning *cw = (candidate_warning *)
7860     conversion_obstack_alloc (sizeof (candidate_warning));
7861   cw->loser = loser;
7862   cw->next = winner->warnings;
7863   winner->warnings = cw;
7864 }
7865
7866 /* Compare two candidates for overloading as described in
7867    [over.match.best].  Return values:
7868
7869       1: cand1 is better than cand2
7870      -1: cand2 is better than cand1
7871       0: cand1 and cand2 are indistinguishable */
7872
7873 static int
7874 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
7875 {
7876   int winner = 0;
7877   int off1 = 0, off2 = 0;
7878   size_t i;
7879   size_t len;
7880
7881   /* Candidates that involve bad conversions are always worse than those
7882      that don't.  */
7883   if (cand1->viable > cand2->viable)
7884     return 1;
7885   if (cand1->viable < cand2->viable)
7886     return -1;
7887
7888   /* If we have two pseudo-candidates for conversions to the same type,
7889      or two candidates for the same function, arbitrarily pick one.  */
7890   if (cand1->fn == cand2->fn
7891       && (IS_TYPE_OR_DECL_P (cand1->fn)))
7892     return 1;
7893
7894   /* a viable function F1
7895      is defined to be a better function than another viable function F2  if
7896      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
7897      ICSi(F2), and then */
7898
7899   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
7900      ICSj(F2) */
7901
7902   /* For comparing static and non-static member functions, we ignore
7903      the implicit object parameter of the non-static function.  The
7904      standard says to pretend that the static function has an object
7905      parm, but that won't work with operator overloading.  */
7906   len = cand1->num_convs;
7907   if (len != cand2->num_convs)
7908     {
7909       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
7910       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
7911
7912       gcc_assert (static_1 != static_2);
7913
7914       if (static_1)
7915         off2 = 1;
7916       else
7917         {
7918           off1 = 1;
7919           --len;
7920         }
7921     }
7922
7923   for (i = 0; i < len; ++i)
7924     {
7925       conversion *t1 = cand1->convs[i + off1];
7926       conversion *t2 = cand2->convs[i + off2];
7927       int comp = compare_ics (t1, t2);
7928
7929       if (comp != 0)
7930         {
7931           if (warn_sign_promo
7932               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
7933                   == cr_std + cr_promotion)
7934               && t1->kind == ck_std
7935               && t2->kind == ck_std
7936               && TREE_CODE (t1->type) == INTEGER_TYPE
7937               && TREE_CODE (t2->type) == INTEGER_TYPE
7938               && (TYPE_PRECISION (t1->type)
7939                   == TYPE_PRECISION (t2->type))
7940               && (TYPE_UNSIGNED (t1->u.next->type)
7941                   || (TREE_CODE (t1->u.next->type)
7942                       == ENUMERAL_TYPE)))
7943             {
7944               tree type = t1->u.next->type;
7945               tree type1, type2;
7946               struct z_candidate *w, *l;
7947               if (comp > 0)
7948                 type1 = t1->type, type2 = t2->type,
7949                   w = cand1, l = cand2;
7950               else
7951                 type1 = t2->type, type2 = t1->type,
7952                   w = cand2, l = cand1;
7953
7954               if (warn)
7955                 {
7956                   warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
7957                            type, type1, type2);
7958                   warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
7959                 }
7960               else
7961                 add_warning (w, l);
7962             }
7963
7964           if (winner && comp != winner)
7965             {
7966               winner = 0;
7967               goto tweak;
7968             }
7969           winner = comp;
7970         }
7971     }
7972
7973   /* warn about confusing overload resolution for user-defined conversions,
7974      either between a constructor and a conversion op, or between two
7975      conversion ops.  */
7976   if (winner && warn_conversion && cand1->second_conv
7977       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
7978       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
7979     {
7980       struct z_candidate *w, *l;
7981       bool give_warning = false;
7982
7983       if (winner == 1)
7984         w = cand1, l = cand2;
7985       else
7986         w = cand2, l = cand1;
7987
7988       /* We don't want to complain about `X::operator T1 ()'
7989          beating `X::operator T2 () const', when T2 is a no less
7990          cv-qualified version of T1.  */
7991       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
7992           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
7993         {
7994           tree t = TREE_TYPE (TREE_TYPE (l->fn));
7995           tree f = TREE_TYPE (TREE_TYPE (w->fn));
7996
7997           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
7998             {
7999               t = TREE_TYPE (t);
8000               f = TREE_TYPE (f);
8001             }
8002           if (!comp_ptr_ttypes (t, f))
8003             give_warning = true;
8004         }
8005       else
8006         give_warning = true;
8007
8008       if (!give_warning)
8009         /*NOP*/;
8010       else if (warn)
8011         {
8012           tree source = source_type (w->convs[0]);
8013           if (! DECL_CONSTRUCTOR_P (w->fn))
8014             source = TREE_TYPE (source);
8015           if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8016               && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
8017                           source, w->second_conv->type)) 
8018             {
8019               inform (input_location, "  because conversion sequence for the argument is better");
8020             }
8021         }
8022       else
8023         add_warning (w, l);
8024     }
8025
8026   if (winner)
8027     return winner;
8028
8029   /* or, if not that,
8030      F1 is a non-template function and F2 is a template function
8031      specialization.  */
8032
8033   if (!cand1->template_decl && cand2->template_decl)
8034     return 1;
8035   else if (cand1->template_decl && !cand2->template_decl)
8036     return -1;
8037
8038   /* or, if not that,
8039      F1 and F2 are template functions and the function template for F1 is
8040      more specialized than the template for F2 according to the partial
8041      ordering rules.  */
8042
8043   if (cand1->template_decl && cand2->template_decl)
8044     {
8045       winner = more_specialized_fn
8046         (TI_TEMPLATE (cand1->template_decl),
8047          TI_TEMPLATE (cand2->template_decl),
8048          /* [temp.func.order]: The presence of unused ellipsis and default
8049             arguments has no effect on the partial ordering of function
8050             templates.   add_function_candidate() will not have
8051             counted the "this" argument for constructors.  */
8052          cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8053       if (winner)
8054         return winner;
8055     }
8056
8057   /* or, if not that,
8058      the  context  is  an  initialization by user-defined conversion (see
8059      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
8060      sequence  from  the return type of F1 to the destination type (i.e.,
8061      the type of the entity being initialized)  is  a  better  conversion
8062      sequence  than the standard conversion sequence from the return type
8063      of F2 to the destination type.  */
8064
8065   if (cand1->second_conv)
8066     {
8067       winner = compare_ics (cand1->second_conv, cand2->second_conv);
8068       if (winner)
8069         return winner;
8070     }
8071
8072   /* Check whether we can discard a builtin candidate, either because we
8073      have two identical ones or matching builtin and non-builtin candidates.
8074
8075      (Pedantically in the latter case the builtin which matched the user
8076      function should not be added to the overload set, but we spot it here.
8077
8078      [over.match.oper]
8079      ... the builtin candidates include ...
8080      - do not have the same parameter type list as any non-template
8081        non-member candidate.  */
8082
8083   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8084       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8085     {
8086       for (i = 0; i < len; ++i)
8087         if (!same_type_p (cand1->convs[i]->type,
8088                           cand2->convs[i]->type))
8089           break;
8090       if (i == cand1->num_convs)
8091         {
8092           if (cand1->fn == cand2->fn)
8093             /* Two built-in candidates; arbitrarily pick one.  */
8094             return 1;
8095           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8096             /* cand1 is built-in; prefer cand2.  */
8097             return -1;
8098           else
8099             /* cand2 is built-in; prefer cand1.  */
8100             return 1;
8101         }
8102     }
8103
8104   /* If the two function declarations represent the same function (this can
8105      happen with declarations in multiple scopes and arg-dependent lookup),
8106      arbitrarily choose one.  But first make sure the default args we're
8107      using match.  */
8108   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8109       && equal_functions (cand1->fn, cand2->fn))
8110     {
8111       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8112       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8113
8114       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8115
8116       for (i = 0; i < len; ++i)
8117         {
8118           /* Don't crash if the fn is variadic.  */
8119           if (!parms1)
8120             break;
8121           parms1 = TREE_CHAIN (parms1);
8122           parms2 = TREE_CHAIN (parms2);
8123         }
8124
8125       if (off1)
8126         parms1 = TREE_CHAIN (parms1);
8127       else if (off2)
8128         parms2 = TREE_CHAIN (parms2);
8129
8130       for (; parms1; ++i)
8131         {
8132           if (!cp_tree_equal (TREE_PURPOSE (parms1),
8133                               TREE_PURPOSE (parms2)))
8134             {
8135               if (warn)
8136                 {
8137                   permerror (input_location, "default argument mismatch in "
8138                              "overload resolution");
8139                   inform (input_location,
8140                           " candidate 1: %q+#F", cand1->fn);
8141                   inform (input_location,
8142                           " candidate 2: %q+#F", cand2->fn);
8143                 }
8144               else
8145                 add_warning (cand1, cand2);
8146               break;
8147             }
8148           parms1 = TREE_CHAIN (parms1);
8149           parms2 = TREE_CHAIN (parms2);
8150         }
8151
8152       return 1;
8153     }
8154
8155 tweak:
8156
8157   /* Extension: If the worst conversion for one candidate is worse than the
8158      worst conversion for the other, take the first.  */
8159   if (!pedantic)
8160     {
8161       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8162       struct z_candidate *w = 0, *l = 0;
8163
8164       for (i = 0; i < len; ++i)
8165         {
8166           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8167             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8168           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8169             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8170         }
8171       if (rank1 < rank2)
8172         winner = 1, w = cand1, l = cand2;
8173       if (rank1 > rank2)
8174         winner = -1, w = cand2, l = cand1;
8175       if (winner)
8176         {
8177           /* Don't choose a deleted function over ambiguity.  */
8178           if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8179             return 0;
8180           if (warn)
8181             {
8182               pedwarn (input_location, 0,
8183               "ISO C++ says that these are ambiguous, even "
8184               "though the worst conversion for the first is better than "
8185               "the worst conversion for the second:");
8186               print_z_candidate (_("candidate 1:"), w);
8187               print_z_candidate (_("candidate 2:"), l);
8188             }
8189           else
8190             add_warning (w, l);
8191           return winner;
8192         }
8193     }
8194
8195   gcc_assert (!winner);
8196   return 0;
8197 }
8198
8199 /* Given a list of candidates for overloading, find the best one, if any.
8200    This algorithm has a worst case of O(2n) (winner is last), and a best
8201    case of O(n/2) (totally ambiguous); much better than a sorting
8202    algorithm.  */
8203
8204 static struct z_candidate *
8205 tourney (struct z_candidate *candidates)
8206 {
8207   struct z_candidate *champ = candidates, *challenger;
8208   int fate;
8209   int champ_compared_to_predecessor = 0;
8210
8211   /* Walk through the list once, comparing each current champ to the next
8212      candidate, knocking out a candidate or two with each comparison.  */
8213
8214   for (challenger = champ->next; challenger; )
8215     {
8216       fate = joust (champ, challenger, 0);
8217       if (fate == 1)
8218         challenger = challenger->next;
8219       else
8220         {
8221           if (fate == 0)
8222             {
8223               champ = challenger->next;
8224               if (champ == 0)
8225                 return NULL;
8226               champ_compared_to_predecessor = 0;
8227             }
8228           else
8229             {
8230               champ = challenger;
8231               champ_compared_to_predecessor = 1;
8232             }
8233
8234           challenger = champ->next;
8235         }
8236     }
8237
8238   /* Make sure the champ is better than all the candidates it hasn't yet
8239      been compared to.  */
8240
8241   for (challenger = candidates;
8242        challenger != champ
8243          && !(champ_compared_to_predecessor && challenger->next == champ);
8244        challenger = challenger->next)
8245     {
8246       fate = joust (champ, challenger, 0);
8247       if (fate != 1)
8248         return NULL;
8249     }
8250
8251   return champ;
8252 }
8253
8254 /* Returns nonzero if things of type FROM can be converted to TO.  */
8255
8256 bool
8257 can_convert (tree to, tree from)
8258 {
8259   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
8260 }
8261
8262 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
8263
8264 bool
8265 can_convert_arg (tree to, tree from, tree arg, int flags)
8266 {
8267   conversion *t;
8268   void *p;
8269   bool ok_p;
8270
8271   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8272   p = conversion_obstack_alloc (0);
8273
8274   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8275                             flags);
8276   ok_p = (t && !t->bad_p);
8277
8278   /* Free all the conversions we allocated.  */
8279   obstack_free (&conversion_obstack, p);
8280
8281   return ok_p;
8282 }
8283
8284 /* Like can_convert_arg, but allows dubious conversions as well.  */
8285
8286 bool
8287 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
8288 {
8289   conversion *t;
8290   void *p;
8291
8292   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8293   p = conversion_obstack_alloc (0);
8294   /* Try to perform the conversion.  */
8295   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8296                             flags);
8297   /* Free all the conversions we allocated.  */
8298   obstack_free (&conversion_obstack, p);
8299
8300   return t != NULL;
8301 }
8302
8303 /* Convert EXPR to TYPE.  Return the converted expression.
8304
8305    Note that we allow bad conversions here because by the time we get to
8306    this point we are committed to doing the conversion.  If we end up
8307    doing a bad conversion, convert_like will complain.  */
8308
8309 tree
8310 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
8311 {
8312   conversion *conv;
8313   void *p;
8314
8315   if (error_operand_p (expr))
8316     return error_mark_node;
8317
8318   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8319   p = conversion_obstack_alloc (0);
8320
8321   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8322                               /*c_cast_p=*/false,
8323                               flags);
8324
8325   if (!conv)
8326     {
8327       if (complain & tf_error)
8328         {
8329           /* If expr has unknown type, then it is an overloaded function.
8330              Call instantiate_type to get good error messages.  */
8331           if (TREE_TYPE (expr) == unknown_type_node)
8332             instantiate_type (type, expr, complain);
8333           else if (invalid_nonstatic_memfn_p (expr, complain))
8334             /* We gave an error.  */;
8335           else
8336             error ("could not convert %qE from %qT to %qT", expr,
8337                    TREE_TYPE (expr), type);
8338         }
8339       expr = error_mark_node;
8340     }
8341   else if (processing_template_decl)
8342     {
8343       /* In a template, we are only concerned about determining the
8344          type of non-dependent expressions, so we do not have to
8345          perform the actual conversion.  */
8346       if (TREE_TYPE (expr) != type)
8347         expr = build_nop (type, expr);
8348     }
8349   else
8350     expr = convert_like (conv, expr, complain);
8351
8352   /* Free all the conversions we allocated.  */
8353   obstack_free (&conversion_obstack, p);
8354
8355   return expr;
8356 }
8357
8358 tree
8359 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8360 {
8361   return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
8362 }
8363
8364 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8365    permitted.  If the conversion is valid, the converted expression is
8366    returned.  Otherwise, NULL_TREE is returned, except in the case
8367    that TYPE is a class type; in that case, an error is issued.  If
8368    C_CAST_P is true, then this direction initialization is taking
8369    place as part of a static_cast being attempted as part of a C-style
8370    cast.  */
8371
8372 tree
8373 perform_direct_initialization_if_possible (tree type,
8374                                            tree expr,
8375                                            bool c_cast_p,
8376                                            tsubst_flags_t complain)
8377 {
8378   conversion *conv;
8379   void *p;
8380
8381   if (type == error_mark_node || error_operand_p (expr))
8382     return error_mark_node;
8383   /* [dcl.init]
8384
8385      If the destination type is a (possibly cv-qualified) class type:
8386
8387      -- If the initialization is direct-initialization ...,
8388      constructors are considered. ... If no constructor applies, or
8389      the overload resolution is ambiguous, the initialization is
8390      ill-formed.  */
8391   if (CLASS_TYPE_P (type))
8392     {
8393       VEC(tree,gc) *args = make_tree_vector_single (expr);
8394       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8395                                         &args, type, LOOKUP_NORMAL, complain);
8396       release_tree_vector (args);
8397       return build_cplus_new (type, expr, complain);
8398     }
8399
8400   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8401   p = conversion_obstack_alloc (0);
8402
8403   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8404                               c_cast_p,
8405                               LOOKUP_NORMAL);
8406   if (!conv || conv->bad_p)
8407     expr = NULL_TREE;
8408   else
8409     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8410                               /*issue_conversion_warnings=*/false,
8411                               c_cast_p,
8412                               complain);
8413
8414   /* Free all the conversions we allocated.  */
8415   obstack_free (&conversion_obstack, p);
8416
8417   return expr;
8418 }
8419
8420 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
8421    is being bound to a temporary.  Create and return a new VAR_DECL
8422    with the indicated TYPE; this variable will store the value to
8423    which the reference is bound.  */
8424
8425 tree
8426 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8427 {
8428   tree var;
8429
8430   /* Create the variable.  */
8431   var = create_temporary_var (type);
8432
8433   /* Register the variable.  */
8434   if (TREE_STATIC (decl))
8435     {
8436       /* Namespace-scope or local static; give it a mangled name.  */
8437       tree name;
8438
8439       TREE_STATIC (var) = 1;
8440       name = mangle_ref_init_variable (decl);
8441       DECL_NAME (var) = name;
8442       SET_DECL_ASSEMBLER_NAME (var, name);
8443       var = pushdecl_top_level (var);
8444     }
8445   else
8446     /* Create a new cleanup level if necessary.  */
8447     maybe_push_cleanup_level (type);
8448
8449   return var;
8450 }
8451
8452 /* EXPR is the initializer for a variable DECL of reference or
8453    std::initializer_list type.  Create, push and return a new VAR_DECL
8454    for the initializer so that it will live as long as DECL.  Any
8455    cleanup for the new variable is returned through CLEANUP, and the
8456    code to initialize the new variable is returned through INITP.  */
8457
8458 tree
8459 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
8460 {
8461   tree init;
8462   tree type;
8463   tree var;
8464
8465   /* Create the temporary variable.  */
8466   type = TREE_TYPE (expr);
8467   var = make_temporary_var_for_ref_to_temp (decl, type);
8468   layout_decl (var, 0);
8469   /* If the rvalue is the result of a function call it will be
8470      a TARGET_EXPR.  If it is some other construct (such as a
8471      member access expression where the underlying object is
8472      itself the result of a function call), turn it into a
8473      TARGET_EXPR here.  It is important that EXPR be a
8474      TARGET_EXPR below since otherwise the INIT_EXPR will
8475      attempt to make a bitwise copy of EXPR to initialize
8476      VAR.  */
8477   if (TREE_CODE (expr) != TARGET_EXPR)
8478     expr = get_target_expr (expr);
8479
8480   /* If the initializer is constant, put it in DECL_INITIAL so we get
8481      static initialization and use in constant expressions.  */
8482   init = maybe_constant_init (expr);
8483   if (TREE_CONSTANT (init))
8484     {
8485       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
8486         {
8487           /* 5.19 says that a constant expression can include an
8488              lvalue-rvalue conversion applied to "a glvalue of literal type
8489              that refers to a non-volatile temporary object initialized
8490              with a constant expression".  Rather than try to communicate
8491              that this VAR_DECL is a temporary, just mark it constexpr.
8492
8493              Currently this is only useful for initializer_list temporaries,
8494              since reference vars can't appear in constant expressions.  */
8495           DECL_DECLARED_CONSTEXPR_P (var) = true;
8496           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
8497           TREE_CONSTANT (var) = true;
8498         }
8499       DECL_INITIAL (var) = init;
8500       init = NULL_TREE;
8501     }
8502   else
8503     /* Create the INIT_EXPR that will initialize the temporary
8504        variable.  */
8505     init = build2 (INIT_EXPR, type, var, expr);
8506   if (at_function_scope_p ())
8507     {
8508       add_decl_expr (var);
8509
8510       if (TREE_STATIC (var))
8511         init = add_stmt_to_compound (init, register_dtor_fn (var));
8512       else
8513         *cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
8514
8515       /* We must be careful to destroy the temporary only
8516          after its initialization has taken place.  If the
8517          initialization throws an exception, then the
8518          destructor should not be run.  We cannot simply
8519          transform INIT into something like:
8520
8521          (INIT, ({ CLEANUP_STMT; }))
8522
8523          because emit_local_var always treats the
8524          initializer as a full-expression.  Thus, the
8525          destructor would run too early; it would run at the
8526          end of initializing the reference variable, rather
8527          than at the end of the block enclosing the
8528          reference variable.
8529
8530          The solution is to pass back a cleanup expression
8531          which the caller is responsible for attaching to
8532          the statement tree.  */
8533     }
8534   else
8535     {
8536       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
8537       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8538         static_aggregates = tree_cons (NULL_TREE, var,
8539                                        static_aggregates);
8540     }
8541
8542   *initp = init;
8543   return var;
8544 }
8545
8546 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
8547    initializing a variable of that TYPE.  If DECL is non-NULL, it is
8548    the VAR_DECL being initialized with the EXPR.  (In that case, the
8549    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
8550    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
8551    return, if *CLEANUP is no longer NULL, it will be an expression
8552    that should be pushed as a cleanup after the returned expression
8553    is used to initialize DECL.
8554
8555    Return the converted expression.  */
8556
8557 tree
8558 initialize_reference (tree type, tree expr, tree decl, tree *cleanup,
8559                       tsubst_flags_t complain)
8560 {
8561   conversion *conv;
8562   void *p;
8563
8564   if (type == error_mark_node || error_operand_p (expr))
8565     return error_mark_node;
8566
8567   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8568   p = conversion_obstack_alloc (0);
8569
8570   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
8571                             LOOKUP_NORMAL);
8572   if (!conv || conv->bad_p)
8573     {
8574       if (complain & tf_error)
8575         {
8576           if (!CP_TYPE_CONST_P (TREE_TYPE (type))
8577               && !TYPE_REF_IS_RVALUE (type)
8578               && !real_lvalue_p (expr))
8579             error ("invalid initialization of non-const reference of "
8580                    "type %qT from an rvalue of type %qT",
8581                    type, TREE_TYPE (expr));
8582           else
8583             error ("invalid initialization of reference of type "
8584                    "%qT from expression of type %qT", type,
8585                    TREE_TYPE (expr));
8586         }
8587       return error_mark_node;
8588     }
8589
8590   /* If DECL is non-NULL, then this special rule applies:
8591
8592        [class.temporary]
8593
8594        The temporary to which the reference is bound or the temporary
8595        that is the complete object to which the reference is bound
8596        persists for the lifetime of the reference.
8597
8598        The temporaries created during the evaluation of the expression
8599        initializing the reference, except the temporary to which the
8600        reference is bound, are destroyed at the end of the
8601        full-expression in which they are created.
8602
8603      In that case, we store the converted expression into a new
8604      VAR_DECL in a new scope.
8605
8606      However, we want to be careful not to create temporaries when
8607      they are not required.  For example, given:
8608
8609        struct B {};
8610        struct D : public B {};
8611        D f();
8612        const B& b = f();
8613
8614      there is no need to copy the return value from "f"; we can just
8615      extend its lifetime.  Similarly, given:
8616
8617        struct S {};
8618        struct T { operator S(); };
8619        T t;
8620        const S& s = t;
8621
8622     we can extend the lifetime of the return value of the conversion
8623     operator.  */
8624   gcc_assert (conv->kind == ck_ref_bind);
8625   if (decl)
8626     {
8627       tree var;
8628       tree base_conv_type;
8629
8630       gcc_assert (complain == tf_warning_or_error);
8631
8632       /* Skip over the REF_BIND.  */
8633       conv = conv->u.next;
8634       /* If the next conversion is a BASE_CONV, skip that too -- but
8635          remember that the conversion was required.  */
8636       if (conv->kind == ck_base)
8637         {
8638           base_conv_type = conv->type;
8639           conv = conv->u.next;
8640         }
8641       else
8642         base_conv_type = NULL_TREE;
8643       /* Perform the remainder of the conversion.  */
8644       expr = convert_like_real (conv, expr,
8645                                 /*fn=*/NULL_TREE, /*argnum=*/0,
8646                                 /*inner=*/-1,
8647                                 /*issue_conversion_warnings=*/true,
8648                                 /*c_cast_p=*/false,
8649                                 complain);
8650       if (error_operand_p (expr))
8651         expr = error_mark_node;
8652       else
8653         {
8654           if (!lvalue_or_rvalue_with_address_p (expr))
8655             {
8656               tree init;
8657               var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
8658               /* Use its address to initialize the reference variable.  */
8659               expr = build_address (var);
8660               if (base_conv_type)
8661                 expr = convert_to_base (expr,
8662                                         build_pointer_type (base_conv_type),
8663                                         /*check_access=*/true,
8664                                         /*nonnull=*/true, complain);
8665               if (init)
8666                 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
8667             }
8668           else
8669             /* Take the address of EXPR.  */
8670             expr = cp_build_addr_expr (expr, complain);
8671           /* If a BASE_CONV was required, perform it now.  */
8672           if (base_conv_type)
8673             expr = (perform_implicit_conversion
8674                     (build_pointer_type (base_conv_type), expr,
8675                      complain));
8676           expr = build_nop (type, expr);
8677           if (DECL_DECLARED_CONSTEXPR_P (decl))
8678             {
8679               expr = cxx_constant_value (expr);
8680               DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
8681                 = reduced_constant_expression_p (expr);
8682             }
8683         }
8684     }
8685   else
8686     /* Perform the conversion.  */
8687     expr = convert_like (conv, expr, complain);
8688
8689   /* Free all the conversions we allocated.  */
8690   obstack_free (&conversion_obstack, p);
8691
8692   return expr;
8693 }
8694
8695 /* Returns true iff TYPE is some variant of std::initializer_list.  */
8696
8697 bool
8698 is_std_init_list (tree type)
8699 {
8700   /* Look through typedefs.  */
8701   if (!TYPE_P (type))
8702     return false;
8703   type = TYPE_MAIN_VARIANT (type);
8704   return (CLASS_TYPE_P (type)
8705           && CP_TYPE_CONTEXT (type) == std_node
8706           && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
8707 }
8708
8709 /* Returns true iff DECL is a list constructor: i.e. a constructor which
8710    will accept an argument list of a single std::initializer_list<T>.  */
8711
8712 bool
8713 is_list_ctor (tree decl)
8714 {
8715   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
8716   tree arg;
8717
8718   if (!args || args == void_list_node)
8719     return false;
8720
8721   arg = non_reference (TREE_VALUE (args));
8722   if (!is_std_init_list (arg))
8723     return false;
8724
8725   args = TREE_CHAIN (args);
8726
8727   if (args && args != void_list_node && !TREE_PURPOSE (args))
8728     /* There are more non-defaulted parms.  */
8729     return false;
8730
8731   return true;
8732 }
8733
8734 #include "gt-cp-call.h"