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