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