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