gdb - Local mods (compile)
[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 /* Return true iff T refers to a base field.  */
7006
7007 static bool
7008 is_base_field_ref (tree t)
7009 {
7010   STRIP_NOPS (t);
7011   if (TREE_CODE (t) == ADDR_EXPR)
7012     t = TREE_OPERAND (t, 0);
7013   if (TREE_CODE (t) == COMPONENT_REF)
7014     t = TREE_OPERAND (t, 1);
7015   if (TREE_CODE (t) == FIELD_DECL)
7016     return DECL_FIELD_IS_BASE (t);
7017   return false;
7018 }
7019
7020 /* We can't elide a copy from a function returning by value to a base
7021    subobject, as the callee might clobber tail padding.  Return true iff this
7022    could be that case.  */
7023
7024 static bool
7025 unsafe_copy_elision_p (tree target, tree exp)
7026 {
7027   tree type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7028   if (type == CLASSTYPE_AS_BASE (type))
7029     return false;
7030   if (!is_base_field_ref (target)
7031       && resolves_to_fixed_type_p (target, NULL))
7032     return false;
7033   tree init = TARGET_EXPR_INITIAL (exp);
7034   return (TREE_CODE (init) == AGGR_INIT_EXPR
7035           && !AGGR_INIT_VIA_CTOR_P (init));
7036 }
7037
7038 /* Subroutine of the various build_*_call functions.  Overload resolution
7039    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
7040    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
7041    bitmask of various LOOKUP_* flags which apply to the call itself.  */
7042
7043 static tree
7044 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
7045 {
7046   tree fn = cand->fn;
7047   const vec<tree, va_gc> *args = cand->args;
7048   tree first_arg = cand->first_arg;
7049   conversion **convs = cand->convs;
7050   conversion *conv;
7051   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
7052   int parmlen;
7053   tree val;
7054   int i = 0;
7055   int j = 0;
7056   unsigned int arg_index = 0;
7057   int is_method = 0;
7058   int nargs;
7059   tree *argarray;
7060   bool already_used = false;
7061
7062   /* In a template, there is no need to perform all of the work that
7063      is normally done.  We are only interested in the type of the call
7064      expression, i.e., the return type of the function.  Any semantic
7065      errors will be deferred until the template is instantiated.  */
7066   if (processing_template_decl)
7067     {
7068       tree expr, addr;
7069       tree return_type;
7070       const tree *argarray;
7071       unsigned int nargs;
7072
7073       return_type = TREE_TYPE (TREE_TYPE (fn));
7074       nargs = vec_safe_length (args);
7075       if (first_arg == NULL_TREE)
7076         argarray = args->address ();
7077       else
7078         {
7079           tree *alcarray;
7080           unsigned int ix;
7081           tree arg;
7082
7083           ++nargs;
7084           alcarray = XALLOCAVEC (tree, nargs);
7085           alcarray[0] = build_this (first_arg);
7086           FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
7087             alcarray[ix + 1] = arg;
7088           argarray = alcarray;
7089         }
7090
7091       addr = build_addr_func (fn, complain);
7092       if (addr == error_mark_node)
7093         return error_mark_node;
7094       expr = build_call_array_loc (input_location, return_type,
7095                                    addr, nargs, argarray);
7096       if (TREE_THIS_VOLATILE (fn) && cfun)
7097         current_function_returns_abnormally = 1;
7098       return convert_from_reference (expr);
7099     }
7100
7101   /* Give any warnings we noticed during overload resolution.  */
7102   if (cand->warnings && (complain & tf_warning))
7103     {
7104       struct candidate_warning *w;
7105       for (w = cand->warnings; w; w = w->next)
7106         joust (cand, w->loser, 1, complain);
7107     }
7108
7109   /* Make =delete work with SFINAE.  */
7110   if (DECL_DELETED_FN (fn) && !(complain & tf_error))
7111     return error_mark_node;
7112
7113   if (DECL_FUNCTION_MEMBER_P (fn))
7114     {
7115       tree access_fn;
7116       /* If FN is a template function, two cases must be considered.
7117          For example:
7118
7119            struct A {
7120              protected:
7121                template <class T> void f();
7122            };
7123            template <class T> struct B {
7124              protected:
7125                void g();
7126            };
7127            struct C : A, B<int> {
7128              using A::f;        // #1
7129              using B<int>::g;   // #2
7130            };
7131
7132          In case #1 where `A::f' is a member template, DECL_ACCESS is
7133          recorded in the primary template but not in its specialization.
7134          We check access of FN using its primary template.
7135
7136          In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
7137          because it is a member of class template B, DECL_ACCESS is
7138          recorded in the specialization `B<int>::g'.  We cannot use its
7139          primary template because `B<T>::g' and `B<int>::g' may have
7140          different access.  */
7141       if (DECL_TEMPLATE_INFO (fn)
7142           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
7143         access_fn = DECL_TI_TEMPLATE (fn);
7144       else
7145         access_fn = fn;
7146       if (!perform_or_defer_access_check (cand->access_path, access_fn,
7147                                           fn, complain))
7148         return error_mark_node;
7149     }
7150
7151   /* If we're checking for implicit delete, don't bother with argument
7152      conversions.  */
7153   if (flags & LOOKUP_SPECULATIVE)
7154     {
7155       if (DECL_DELETED_FN (fn))
7156         {
7157           if (complain & tf_error)
7158             mark_used (fn);
7159           return error_mark_node;
7160         }
7161       if (cand->viable == 1)
7162         return fn;
7163       else if (!(complain & tf_error))
7164         /* Reject bad conversions now.  */
7165         return error_mark_node;
7166       /* else continue to get conversion error.  */
7167     }
7168
7169   /* N3276 magic doesn't apply to nested calls.  */
7170   int decltype_flag = (complain & tf_decltype);
7171   complain &= ~tf_decltype;
7172
7173   /* Find maximum size of vector to hold converted arguments.  */
7174   parmlen = list_length (parm);
7175   nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7176   if (parmlen > nargs)
7177     nargs = parmlen;
7178   argarray = XALLOCAVEC (tree, nargs);
7179
7180   /* The implicit parameters to a constructor are not considered by overload
7181      resolution, and must be of the proper type.  */
7182   if (DECL_CONSTRUCTOR_P (fn))
7183     {
7184       tree object_arg;
7185       if (first_arg != NULL_TREE)
7186         {
7187           object_arg = first_arg;
7188           first_arg = NULL_TREE;
7189         }
7190       else
7191         {
7192           object_arg = (*args)[arg_index];
7193           ++arg_index;
7194         }
7195       argarray[j++] = build_this (object_arg);
7196       parm = TREE_CHAIN (parm);
7197       /* We should never try to call the abstract constructor.  */
7198       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7199
7200       if (DECL_HAS_VTT_PARM_P (fn))
7201         {
7202           argarray[j++] = (*args)[arg_index];
7203           ++arg_index;
7204           parm = TREE_CHAIN (parm);
7205         }
7206     }
7207   /* Bypass access control for 'this' parameter.  */
7208   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7209     {
7210       tree parmtype = TREE_VALUE (parm);
7211       tree arg = build_this (first_arg != NULL_TREE
7212                              ? first_arg
7213                              : (*args)[arg_index]);
7214       tree argtype = TREE_TYPE (arg);
7215       tree converted_arg;
7216       tree base_binfo;
7217
7218       if (convs[i]->bad_p)
7219         {
7220           if (complain & tf_error)
7221             {
7222               if (permerror (input_location, "passing %qT as %<this%> "
7223                              "argument discards qualifiers",
7224                              TREE_TYPE (argtype)))
7225                 inform (DECL_SOURCE_LOCATION (fn), "  in call to %qD", fn);
7226             }
7227           else
7228             return error_mark_node;
7229         }
7230
7231       /* See if the function member or the whole class type is declared
7232          final and the call can be devirtualized.  */
7233       if (DECL_FINAL_P (fn)
7234           || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7235         flags |= LOOKUP_NONVIRTUAL;
7236
7237       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7238          X is called for an object that is not of type X, or of a type
7239          derived from X, the behavior is undefined.
7240
7241          So we can assume that anything passed as 'this' is non-null, and
7242          optimize accordingly.  */
7243       gcc_assert (TYPE_PTR_P (parmtype));
7244       /* Convert to the base in which the function was declared.  */
7245       gcc_assert (cand->conversion_path != NULL_TREE);
7246       converted_arg = build_base_path (PLUS_EXPR,
7247                                        arg,
7248                                        cand->conversion_path,
7249                                        1, complain);
7250       /* Check that the base class is accessible.  */
7251       if (!accessible_base_p (TREE_TYPE (argtype),
7252                               BINFO_TYPE (cand->conversion_path), true))
7253         {
7254           if (complain & tf_error)
7255             error ("%qT is not an accessible base of %qT",
7256                    BINFO_TYPE (cand->conversion_path),
7257                    TREE_TYPE (argtype));
7258           else
7259             return error_mark_node;
7260         }
7261       /* If fn was found by a using declaration, the conversion path
7262          will be to the derived class, not the base declaring fn. We
7263          must convert from derived to base.  */
7264       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7265                                 TREE_TYPE (parmtype), ba_unique,
7266                                 NULL, complain);
7267       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7268                                        base_binfo, 1, complain);
7269
7270       argarray[j++] = converted_arg;
7271       parm = TREE_CHAIN (parm);
7272       if (first_arg != NULL_TREE)
7273         first_arg = NULL_TREE;
7274       else
7275         ++arg_index;
7276       ++i;
7277       is_method = 1;
7278     }
7279
7280   gcc_assert (first_arg == NULL_TREE);
7281   for (; arg_index < vec_safe_length (args) && parm;
7282        parm = TREE_CHAIN (parm), ++arg_index, ++i)
7283     {
7284       tree type = TREE_VALUE (parm);
7285       tree arg = (*args)[arg_index];
7286       bool conversion_warning = true;
7287
7288       conv = convs[i];
7289
7290       /* If the argument is NULL and used to (implicitly) instantiate a
7291          template function (and bind one of the template arguments to
7292          the type of 'long int'), we don't want to warn about passing NULL
7293          to non-pointer argument.
7294          For example, if we have this template function:
7295
7296            template<typename T> void func(T x) {}
7297
7298          we want to warn (when -Wconversion is enabled) in this case:
7299
7300            void foo() {
7301              func<int>(NULL);
7302            }
7303
7304          but not in this case:
7305
7306            void foo() {
7307              func(NULL);
7308            }
7309       */
7310       if (arg == null_node
7311           && DECL_TEMPLATE_INFO (fn)
7312           && cand->template_decl
7313           && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7314         conversion_warning = false;
7315
7316       /* Warn about initializer_list deduction that isn't currently in the
7317          working draft.  */
7318       if (cxx_dialect > cxx98
7319           && flag_deduce_init_list
7320           && cand->template_decl
7321           && is_std_init_list (non_reference (type))
7322           && BRACE_ENCLOSED_INITIALIZER_P (arg))
7323         {
7324           tree tmpl = TI_TEMPLATE (cand->template_decl);
7325           tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7326           tree patparm = get_pattern_parm (realparm, tmpl);
7327           tree pattype = TREE_TYPE (patparm);
7328           if (PACK_EXPANSION_P (pattype))
7329             pattype = PACK_EXPANSION_PATTERN (pattype);
7330           pattype = non_reference (pattype);
7331
7332           if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7333               && (cand->explicit_targs == NULL_TREE
7334                   || (TREE_VEC_LENGTH (cand->explicit_targs)
7335                       <= TEMPLATE_TYPE_IDX (pattype))))
7336             {
7337               pedwarn (input_location, 0, "deducing %qT as %qT",
7338                        non_reference (TREE_TYPE (patparm)),
7339                        non_reference (type));
7340               pedwarn (input_location, 0, "  in call to %q+D", cand->fn);
7341               pedwarn (input_location, 0,
7342                        "  (you can disable this with -fno-deduce-init-list)");
7343             }
7344         }
7345       val = convert_like_with_context (conv, arg, fn, i - is_method,
7346                                        conversion_warning
7347                                        ? complain
7348                                        : complain & (~tf_warning));
7349
7350       val = convert_for_arg_passing (type, val, complain);
7351         
7352       if (val == error_mark_node)
7353         return error_mark_node;
7354       else
7355         argarray[j++] = val;
7356     }
7357
7358   /* Default arguments */
7359   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
7360     {
7361       if (TREE_VALUE (parm) == error_mark_node)
7362         return error_mark_node;
7363       argarray[j++] = convert_default_arg (TREE_VALUE (parm),
7364                                            TREE_PURPOSE (parm),
7365                                            fn, i - is_method,
7366                                            complain);
7367     }
7368
7369   /* Ellipsis */
7370   for (; arg_index < vec_safe_length (args); ++arg_index)
7371     {
7372       tree a = (*args)[arg_index];
7373       if (magic_varargs_p (fn))
7374         /* Do no conversions for magic varargs.  */
7375         a = mark_type_use (a);
7376       else if (DECL_CONSTRUCTOR_P (fn)
7377                && same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
7378                                                              TREE_TYPE (a)))
7379         {
7380           /* Avoid infinite recursion trying to call A(...).  */
7381           if (complain & tf_error)
7382             /* Try to call the actual copy constructor for a good error.  */
7383             call_copy_ctor (a, complain);
7384           return error_mark_node;
7385         }
7386       else
7387         a = convert_arg_to_ellipsis (a, complain);
7388       argarray[j++] = a;
7389     }
7390
7391   gcc_assert (j <= nargs);
7392   nargs = j;
7393
7394   check_function_arguments (TREE_TYPE (fn), nargs, argarray);
7395
7396   /* Avoid actually calling copy constructors and copy assignment operators,
7397      if possible.  */
7398
7399   if (! flag_elide_constructors)
7400     /* Do things the hard way.  */;
7401   else if (cand->num_convs == 1 
7402            && (DECL_COPY_CONSTRUCTOR_P (fn) 
7403                || DECL_MOVE_CONSTRUCTOR_P (fn))
7404            /* It's unsafe to elide the constructor when handling
7405               a noexcept-expression, it may evaluate to the wrong
7406               value (c++/53025).  */
7407            && cp_noexcept_operand == 0)
7408     {
7409       tree targ;
7410       tree arg = argarray[num_artificial_parms_for (fn)];
7411       tree fa;
7412       bool trivial = trivial_fn_p (fn);
7413
7414       /* Pull out the real argument, disregarding const-correctness.  */
7415       targ = arg;
7416       while (CONVERT_EXPR_P (targ)
7417              || TREE_CODE (targ) == NON_LVALUE_EXPR)
7418         targ = TREE_OPERAND (targ, 0);
7419       if (TREE_CODE (targ) == ADDR_EXPR)
7420         {
7421           targ = TREE_OPERAND (targ, 0);
7422           if (!same_type_ignoring_top_level_qualifiers_p
7423               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7424             targ = NULL_TREE;
7425         }
7426       else
7427         targ = NULL_TREE;
7428
7429       if (targ)
7430         arg = targ;
7431       else
7432         arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7433
7434       /* [class.copy]: the copy constructor is implicitly defined even if
7435          the implementation elided its use.  */
7436       if (!trivial || DECL_DELETED_FN (fn))
7437         {
7438           mark_used (fn);
7439           already_used = true;
7440         }
7441
7442       /* If we're creating a temp and we already have one, don't create a
7443          new one.  If we're not creating a temp but we get one, use
7444          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
7445          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7446          temp or an INIT_EXPR otherwise.  */
7447       fa = argarray[0];
7448       if (is_dummy_object (fa))
7449         {
7450           if (TREE_CODE (arg) == TARGET_EXPR)
7451             return arg;
7452           else if (trivial)
7453             return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7454         }
7455       else if (trivial
7456                || (TREE_CODE (arg) == TARGET_EXPR
7457                    && !unsafe_copy_elision_p (fa, arg)))
7458         {
7459           tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
7460                                                                 complain));
7461
7462           val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7463           return val;
7464         }
7465     }
7466   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7467            && trivial_fn_p (fn)
7468            && !DECL_DELETED_FN (fn))
7469     {
7470       tree to = stabilize_reference
7471         (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7472       tree type = TREE_TYPE (to);
7473       tree as_base = CLASSTYPE_AS_BASE (type);
7474       tree arg = argarray[1];
7475
7476       if (is_really_empty_class (type))
7477         {
7478           /* Avoid copying empty classes.  */
7479           val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
7480           TREE_NO_WARNING (val) = 1;
7481           val = build2 (COMPOUND_EXPR, type, val, to);
7482           TREE_NO_WARNING (val) = 1;
7483         }
7484       else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7485         {
7486           arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7487           val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7488         }
7489       else
7490         {
7491           /* We must only copy the non-tail padding parts.  */
7492           tree arg0, arg2, t;
7493           tree array_type, alias_set;
7494
7495           arg2 = TYPE_SIZE_UNIT (as_base);
7496           arg0 = cp_build_addr_expr (to, complain);
7497
7498           array_type = build_array_type (char_type_node,
7499                                          build_index_type
7500                                            (size_binop (MINUS_EXPR,
7501                                                         arg2, size_int (1))));
7502           alias_set = build_int_cst (build_pointer_type (type), 0);
7503           t = build2 (MODIFY_EXPR, void_type_node,
7504                       build2 (MEM_REF, array_type, arg0, alias_set),
7505                       build2 (MEM_REF, array_type, arg, alias_set));
7506           val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7507           TREE_NO_WARNING (val) = 1;
7508         }
7509
7510       return val;
7511     }
7512   else if (DECL_DESTRUCTOR_P (fn)
7513            && trivial_fn_p (fn)
7514            && !DECL_DELETED_FN (fn))
7515     return fold_convert (void_type_node, argarray[0]);
7516   /* FIXME handle trivial default constructor, too.  */
7517
7518   /* For calls to a multi-versioned function, overload resolution
7519      returns the function with the highest target priority, that is,
7520      the version that will checked for dispatching first.  If this
7521      version is inlinable, a direct call to this version can be made
7522      otherwise the call should go through the dispatcher.  */
7523
7524   if (DECL_FUNCTION_VERSIONED (fn)
7525       && (current_function_decl == NULL
7526           || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7527     {
7528       fn = get_function_version_dispatcher (fn);
7529       if (fn == NULL)
7530         return NULL;
7531       if (!already_used)
7532         mark_versions_used (fn);
7533     }
7534
7535   if (!already_used
7536       && !mark_used (fn, complain))
7537     return error_mark_node;
7538
7539   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7540       /* Don't mess with virtual lookup in instantiate_non_dependent_expr;
7541          virtual functions can't be constexpr.  */
7542       && !in_template_function ())
7543     {
7544       tree t;
7545       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7546                                 DECL_CONTEXT (fn),
7547                                 ba_any, NULL, complain);
7548       gcc_assert (binfo && binfo != error_mark_node);
7549
7550       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7551                                      complain);
7552       if (TREE_SIDE_EFFECTS (argarray[0]))
7553         argarray[0] = save_expr (argarray[0]);
7554       t = build_pointer_type (TREE_TYPE (fn));
7555       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7556         fn = build_java_interface_fn_ref (fn, argarray[0]);
7557       else
7558         fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7559       TREE_TYPE (fn) = t;
7560     }
7561   else
7562     {
7563       fn = build_addr_func (fn, complain);
7564       if (fn == error_mark_node)
7565         return error_mark_node;
7566     }
7567
7568   tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7569   if (TREE_CODE (call) == CALL_EXPR
7570       && (cand->flags & LOOKUP_LIST_INIT_CTOR))
7571     CALL_EXPR_LIST_INIT_P (call) = true;
7572   return call;
7573 }
7574
7575 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7576    This function performs no overload resolution, conversion, or other
7577    high-level operations.  */
7578
7579 tree
7580 build_cxx_call (tree fn, int nargs, tree *argarray,
7581                 tsubst_flags_t complain)
7582 {
7583   tree fndecl;
7584   int optimize_sav;
7585
7586   /* Remember roughly where this call is.  */
7587   location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7588   fn = build_call_a (fn, nargs, argarray);
7589   SET_EXPR_LOCATION (fn, loc);
7590
7591   fndecl = get_callee_fndecl (fn);
7592
7593   /* Check that arguments to builtin functions match the expectations.  */
7594   if (fndecl
7595       && DECL_BUILT_IN (fndecl)
7596       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7597       && !check_builtin_function_arguments (fndecl, nargs, argarray))
7598     return error_mark_node;
7599
7600     /* If it is a built-in array notation function, then the return type of
7601      the function is the element type of the array passed in as array 
7602      notation (i.e. the first parameter of the function).  */
7603   if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR) 
7604     {
7605       enum built_in_function bif = 
7606         is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7607       if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7608           || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7609           || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7610           || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7611           || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7612           || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7613         { 
7614           if (call_expr_nargs (fn) == 0)
7615             {
7616               error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
7617               return error_mark_node;
7618             }
7619           /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7620              BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7621              BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or 
7622              BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7623              BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7624              BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7625              The pre-defined return-type is the correct one.  */
7626           tree array_ntn = CALL_EXPR_ARG (fn, 0); 
7627           TREE_TYPE (fn) = TREE_TYPE (array_ntn); 
7628           return fn;
7629         }
7630     }
7631
7632   /* Some built-in function calls will be evaluated at compile-time in
7633      fold ().  Set optimize to 1 when folding __builtin_constant_p inside
7634      a constexpr function so that fold_builtin_1 doesn't fold it to 0.  */
7635   optimize_sav = optimize;
7636   if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7637       && current_function_decl
7638       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7639     optimize = 1;
7640   fn = fold_if_not_in_template (fn);
7641   optimize = optimize_sav;
7642
7643   if (VOID_TYPE_P (TREE_TYPE (fn)))
7644     return fn;
7645
7646   /* 5.2.2/11: If a function call is a prvalue of object type: if the
7647      function call is either the operand of a decltype-specifier or the
7648      right operand of a comma operator that is the operand of a
7649      decltype-specifier, a temporary object is not introduced for the
7650      prvalue. The type of the prvalue may be incomplete.  */
7651   if (!(complain & tf_decltype))
7652     {
7653       fn = require_complete_type_sfinae (fn, complain);
7654       if (fn == error_mark_node)
7655         return error_mark_node;
7656
7657       if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7658         fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7659     }
7660   return convert_from_reference (fn);
7661 }
7662
7663 static GTY(()) tree java_iface_lookup_fn;
7664
7665 /* Make an expression which yields the address of the Java interface
7666    method FN.  This is achieved by generating a call to libjava's
7667    _Jv_LookupInterfaceMethodIdx().  */
7668
7669 static tree
7670 build_java_interface_fn_ref (tree fn, tree instance)
7671 {
7672   tree lookup_fn, method, idx;
7673   tree klass_ref, iface, iface_ref;
7674   int i;
7675
7676   if (!java_iface_lookup_fn)
7677     {
7678       tree ftype = build_function_type_list (ptr_type_node,
7679                                              ptr_type_node, ptr_type_node,
7680                                              java_int_type_node, NULL_TREE);
7681       java_iface_lookup_fn
7682         = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7683                                 0, NOT_BUILT_IN, NULL, NULL_TREE);
7684     }
7685
7686   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7687      This is the first entry in the vtable.  */
7688   klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL, 
7689                                                      tf_warning_or_error),
7690                               integer_zero_node);
7691
7692   /* Get the java.lang.Class pointer for the interface being called.  */
7693   iface = DECL_CONTEXT (fn);
7694   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7695   if (!iface_ref || !VAR_P (iface_ref)
7696       || DECL_CONTEXT (iface_ref) != iface)
7697     {
7698       error ("could not find class$ field in java interface type %qT",
7699                 iface);
7700       return error_mark_node;
7701     }
7702   iface_ref = build_address (iface_ref);
7703   iface_ref = convert (build_pointer_type (iface), iface_ref);
7704
7705   /* Determine the itable index of FN.  */
7706   i = 1;
7707   for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7708     {
7709       if (!DECL_VIRTUAL_P (method))
7710         continue;
7711       if (fn == method)
7712         break;
7713       i++;
7714     }
7715   idx = build_int_cst (NULL_TREE, i);
7716
7717   lookup_fn = build1 (ADDR_EXPR,
7718                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7719                       java_iface_lookup_fn);
7720   return build_call_nary (ptr_type_node, lookup_fn,
7721                           3, klass_ref, iface_ref, idx);
7722 }
7723
7724 /* Returns the value to use for the in-charge parameter when making a
7725    call to a function with the indicated NAME.
7726
7727    FIXME:Can't we find a neater way to do this mapping?  */
7728
7729 tree
7730 in_charge_arg_for_name (tree name)
7731 {
7732  if (name == base_ctor_identifier
7733       || name == base_dtor_identifier)
7734     return integer_zero_node;
7735   else if (name == complete_ctor_identifier)
7736     return integer_one_node;
7737   else if (name == complete_dtor_identifier)
7738     return integer_two_node;
7739   else if (name == deleting_dtor_identifier)
7740     return integer_three_node;
7741
7742   /* This function should only be called with one of the names listed
7743      above.  */
7744   gcc_unreachable ();
7745   return NULL_TREE;
7746 }
7747
7748 /* Build a call to a constructor, destructor, or an assignment
7749    operator for INSTANCE, an expression with class type.  NAME
7750    indicates the special member function to call; *ARGS are the
7751    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
7752    indicates the base of INSTANCE that is to be passed as the `this'
7753    parameter to the member function called.
7754
7755    FLAGS are the LOOKUP_* flags to use when processing the call.
7756
7757    If NAME indicates a complete object constructor, INSTANCE may be
7758    NULL_TREE.  In this case, the caller will call build_cplus_new to
7759    store the newly constructed object into a VAR_DECL.  */
7760
7761 tree
7762 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7763                            tree binfo, int flags, tsubst_flags_t complain)
7764 {
7765   tree fns;
7766   /* The type of the subobject to be constructed or destroyed.  */
7767   tree class_type;
7768   vec<tree, va_gc> *allocated = NULL;
7769   tree ret;
7770
7771   gcc_assert (name == complete_ctor_identifier
7772               || name == base_ctor_identifier
7773               || name == complete_dtor_identifier
7774               || name == base_dtor_identifier
7775               || name == deleting_dtor_identifier
7776               || name == ansi_assopname (NOP_EXPR));
7777   if (TYPE_P (binfo))
7778     {
7779       /* Resolve the name.  */
7780       if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7781         return error_mark_node;
7782
7783       binfo = TYPE_BINFO (binfo);
7784     }
7785
7786   gcc_assert (binfo != NULL_TREE);
7787
7788   class_type = BINFO_TYPE (binfo);
7789
7790   /* Handle the special case where INSTANCE is NULL_TREE.  */
7791   if (name == complete_ctor_identifier && !instance)
7792     instance = build_dummy_object (class_type);
7793   else
7794     {
7795       if (name == complete_dtor_identifier
7796           || name == base_dtor_identifier
7797           || name == deleting_dtor_identifier)
7798         gcc_assert (args == NULL || vec_safe_is_empty (*args));
7799
7800       /* Convert to the base class, if necessary.  */
7801       if (!same_type_ignoring_top_level_qualifiers_p
7802           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7803         {
7804           if (name != ansi_assopname (NOP_EXPR))
7805             /* For constructors and destructors, either the base is
7806                non-virtual, or it is virtual but we are doing the
7807                conversion from a constructor or destructor for the
7808                complete object.  In either case, we can convert
7809                statically.  */
7810             instance = convert_to_base_statically (instance, binfo);
7811           else
7812             /* However, for assignment operators, we must convert
7813                dynamically if the base is virtual.  */
7814             instance = build_base_path (PLUS_EXPR, instance,
7815                                         binfo, /*nonnull=*/1, complain);
7816         }
7817     }
7818
7819   gcc_assert (instance != NULL_TREE);
7820
7821   fns = lookup_fnfields (binfo, name, 1);
7822
7823   /* When making a call to a constructor or destructor for a subobject
7824      that uses virtual base classes, pass down a pointer to a VTT for
7825      the subobject.  */
7826   if ((name == base_ctor_identifier
7827        || name == base_dtor_identifier)
7828       && CLASSTYPE_VBASECLASSES (class_type))
7829     {
7830       tree vtt;
7831       tree sub_vtt;
7832
7833       /* If the current function is a complete object constructor
7834          or destructor, then we fetch the VTT directly.
7835          Otherwise, we look it up using the VTT we were given.  */
7836       vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7837       vtt = decay_conversion (vtt, complain);
7838       if (vtt == error_mark_node)
7839         return error_mark_node;
7840       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7841                     build2 (EQ_EXPR, boolean_type_node,
7842                             current_in_charge_parm, integer_zero_node),
7843                     current_vtt_parm,
7844                     vtt);
7845       if (BINFO_SUBVTT_INDEX (binfo))
7846         sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7847       else
7848         sub_vtt = vtt;
7849
7850       if (args == NULL)
7851         {
7852           allocated = make_tree_vector ();
7853           args = &allocated;
7854         }
7855
7856       vec_safe_insert (*args, 0, sub_vtt);
7857     }
7858
7859   ret = build_new_method_call (instance, fns, args,
7860                                TYPE_BINFO (BINFO_TYPE (binfo)),
7861                                flags, /*fn=*/NULL,
7862                                complain);
7863
7864   if (allocated != NULL)
7865     release_tree_vector (allocated);
7866
7867   if ((complain & tf_error)
7868       && (flags & LOOKUP_DELEGATING_CONS)
7869       && name == complete_ctor_identifier 
7870       && TREE_CODE (ret) == CALL_EXPR
7871       && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
7872           == current_function_decl))
7873     error ("constructor delegates to itself");
7874
7875   return ret;
7876 }
7877
7878 /* Return the NAME, as a C string.  The NAME indicates a function that
7879    is a member of TYPE.  *FREE_P is set to true if the caller must
7880    free the memory returned.
7881
7882    Rather than go through all of this, we should simply set the names
7883    of constructors and destructors appropriately, and dispense with
7884    ctor_identifier, dtor_identifier, etc.  */
7885
7886 static char *
7887 name_as_c_string (tree name, tree type, bool *free_p)
7888 {
7889   char *pretty_name;
7890
7891   /* Assume that we will not allocate memory.  */
7892   *free_p = false;
7893   /* Constructors and destructors are special.  */
7894   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7895     {
7896       pretty_name
7897         = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7898       /* For a destructor, add the '~'.  */
7899       if (name == complete_dtor_identifier
7900           || name == base_dtor_identifier
7901           || name == deleting_dtor_identifier)
7902         {
7903           pretty_name = concat ("~", pretty_name, NULL);
7904           /* Remember that we need to free the memory allocated.  */
7905           *free_p = true;
7906         }
7907     }
7908   else if (IDENTIFIER_TYPENAME_P (name))
7909     {
7910       pretty_name = concat ("operator ",
7911                             type_as_string_translate (TREE_TYPE (name),
7912                                                       TFF_PLAIN_IDENTIFIER),
7913                             NULL);
7914       /* Remember that we need to free the memory allocated.  */
7915       *free_p = true;
7916     }
7917   else
7918     pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7919
7920   return pretty_name;
7921 }
7922
7923 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
7924    be set, upon return, to the function called.  ARGS may be NULL.
7925    This may change ARGS.  */
7926
7927 static tree
7928 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7929                          tree conversion_path, int flags,
7930                          tree *fn_p, tsubst_flags_t complain)
7931 {
7932   struct z_candidate *candidates = 0, *cand;
7933   tree explicit_targs = NULL_TREE;
7934   tree basetype = NULL_TREE;
7935   tree access_binfo, binfo;
7936   tree optype;
7937   tree first_mem_arg = NULL_TREE;
7938   tree name;
7939   bool skip_first_for_error;
7940   vec<tree, va_gc> *user_args;
7941   tree call;
7942   tree fn;
7943   int template_only = 0;
7944   bool any_viable_p;
7945   tree orig_instance;
7946   tree orig_fns;
7947   vec<tree, va_gc> *orig_args = NULL;
7948   void *p;
7949
7950   gcc_assert (instance != NULL_TREE);
7951
7952   /* We don't know what function we're going to call, yet.  */
7953   if (fn_p)
7954     *fn_p = NULL_TREE;
7955
7956   if (error_operand_p (instance)
7957       || !fns || error_operand_p (fns))
7958     return error_mark_node;
7959
7960   if (!BASELINK_P (fns))
7961     {
7962       if (complain & tf_error)
7963         error ("call to non-function %qD", fns);
7964       return error_mark_node;
7965     }
7966
7967   orig_instance = instance;
7968   orig_fns = fns;
7969
7970   /* Dismantle the baselink to collect all the information we need.  */
7971   if (!conversion_path)
7972     conversion_path = BASELINK_BINFO (fns);
7973   access_binfo = BASELINK_ACCESS_BINFO (fns);
7974   binfo = BASELINK_BINFO (fns);
7975   optype = BASELINK_OPTYPE (fns);
7976   fns = BASELINK_FUNCTIONS (fns);
7977   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7978     {
7979       explicit_targs = TREE_OPERAND (fns, 1);
7980       fns = TREE_OPERAND (fns, 0);
7981       template_only = 1;
7982     }
7983   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7984               || TREE_CODE (fns) == TEMPLATE_DECL
7985               || TREE_CODE (fns) == OVERLOAD);
7986   fn = get_first_fn (fns);
7987   name = DECL_NAME (fn);
7988
7989   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7990   gcc_assert (CLASS_TYPE_P (basetype));
7991
7992   if (processing_template_decl)
7993     {
7994       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7995       instance = build_non_dependent_expr (instance);
7996       if (args != NULL)
7997         make_args_non_dependent (*args);
7998     }
7999
8000   user_args = args == NULL ? NULL : *args;
8001   /* Under DR 147 A::A() is an invalid constructor call,
8002      not a functional cast.  */
8003   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
8004     {
8005       if (! (complain & tf_error))
8006         return error_mark_node;
8007
8008       if (permerror (input_location,
8009                      "cannot call constructor %<%T::%D%> directly",
8010                      basetype, name))
8011         inform (input_location, "for a function-style cast, remove the "
8012                 "redundant %<::%D%>", name);
8013       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
8014                                     complain);
8015       return call;
8016     }
8017
8018   /* Figure out whether to skip the first argument for the error
8019      message we will display to users if an error occurs.  We don't
8020      want to display any compiler-generated arguments.  The "this"
8021      pointer hasn't been added yet.  However, we must remove the VTT
8022      pointer if this is a call to a base-class constructor or
8023      destructor.  */
8024   skip_first_for_error = false;
8025   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
8026     {
8027       /* Callers should explicitly indicate whether they want to construct
8028          the complete object or just the part without virtual bases.  */
8029       gcc_assert (name != ctor_identifier);
8030       /* Similarly for destructors.  */
8031       gcc_assert (name != dtor_identifier);
8032       /* Remove the VTT pointer, if present.  */
8033       if ((name == base_ctor_identifier || name == base_dtor_identifier)
8034           && CLASSTYPE_VBASECLASSES (basetype))
8035         skip_first_for_error = true;
8036     }
8037
8038   /* Process the argument list.  */
8039   if (args != NULL && *args != NULL)
8040     {
8041       *args = resolve_args (*args, complain);
8042       if (*args == NULL)
8043         return error_mark_node;
8044     }
8045
8046   /* Consider the object argument to be used even if we end up selecting a
8047      static member function.  */
8048   instance = mark_type_use (instance);
8049
8050   /* It's OK to call destructors and constructors on cv-qualified objects.
8051      Therefore, convert the INSTANCE to the unqualified type, if
8052      necessary.  */
8053   if (DECL_DESTRUCTOR_P (fn)
8054       || DECL_CONSTRUCTOR_P (fn))
8055     {
8056       if (!same_type_p (basetype, TREE_TYPE (instance)))
8057         {
8058           instance = build_this (instance);
8059           instance = build_nop (build_pointer_type (basetype), instance);
8060           instance = build_fold_indirect_ref (instance);
8061         }
8062     }
8063   if (DECL_DESTRUCTOR_P (fn))
8064     name = complete_dtor_identifier;
8065
8066   /* For the overload resolution we need to find the actual `this`
8067      that would be captured if the call turns out to be to a
8068      non-static member function.  Do not actually capture it at this
8069      point.  */
8070   if (DECL_CONSTRUCTOR_P (fn))
8071     /* Constructors don't use the enclosing 'this'.  */
8072     first_mem_arg = instance;
8073   else
8074     first_mem_arg = maybe_resolve_dummy (instance, false);
8075
8076   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8077   p = conversion_obstack_alloc (0);
8078
8079   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
8080      initializer, not T({ }).  */
8081   if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
8082       && DIRECT_LIST_INIT_P ((**args)[0]))
8083     {
8084       tree init_list = (**args)[0];
8085       tree init = NULL_TREE;
8086
8087       gcc_assert ((*args)->length () == 1
8088                   && !(flags & LOOKUP_ONLYCONVERTING));
8089
8090       /* If the initializer list has no elements and T is a class type with
8091          a default constructor, the object is value-initialized.  Handle
8092          this here so we don't need to handle it wherever we use
8093          build_special_member_call.  */
8094       if (CONSTRUCTOR_NELTS (init_list) == 0
8095           && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
8096           /* For a user-provided default constructor, use the normal
8097              mechanisms so that protected access works.  */
8098           && type_has_non_user_provided_default_constructor (basetype)
8099           && !processing_template_decl)
8100         init = build_value_init (basetype, complain);
8101
8102       /* If BASETYPE is an aggregate, we need to do aggregate
8103          initialization.  */
8104       else if (CP_AGGREGATE_TYPE_P (basetype))
8105         init = digest_init (basetype, init_list, complain);
8106
8107       if (init)
8108         {
8109           if (is_dummy_object (instance))
8110             return get_target_expr_sfinae (init, complain);
8111           init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
8112           TREE_SIDE_EFFECTS (init) = true;
8113           return init;
8114         }
8115
8116       /* Otherwise go ahead with overload resolution.  */
8117       add_list_candidates (fns, first_mem_arg, init_list,
8118                            basetype, explicit_targs, template_only,
8119                            conversion_path, access_binfo, flags,
8120                            &candidates, complain);
8121     }
8122   else
8123     {
8124       add_candidates (fns, first_mem_arg, user_args, optype,
8125                       explicit_targs, template_only, conversion_path,
8126                       access_binfo, flags, &candidates, complain);
8127     }
8128   any_viable_p = false;
8129   candidates = splice_viable (candidates, false, &any_viable_p);
8130
8131   if (!any_viable_p)
8132     {
8133       if (complain & tf_error)
8134         {
8135           if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
8136             cxx_incomplete_type_error (instance, basetype);
8137           else if (optype)
8138             error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
8139                    basetype, optype, build_tree_list_vec (user_args),
8140                    TREE_TYPE (instance));
8141           else
8142             {
8143               char *pretty_name;
8144               bool free_p;
8145               tree arglist;
8146
8147               pretty_name = name_as_c_string (name, basetype, &free_p);
8148               arglist = build_tree_list_vec (user_args);
8149               if (skip_first_for_error)
8150                 arglist = TREE_CHAIN (arglist);
8151               error ("no matching function for call to %<%T::%s(%A)%#V%>",
8152                      basetype, pretty_name, arglist,
8153                      TREE_TYPE (instance));
8154               if (free_p)
8155                 free (pretty_name);
8156             }
8157           print_z_candidates (location_of (name), candidates);
8158         }
8159       call = error_mark_node;
8160     }
8161   else
8162     {
8163       cand = tourney (candidates, complain);
8164       if (cand == 0)
8165         {
8166           char *pretty_name;
8167           bool free_p;
8168           tree arglist;
8169
8170           if (complain & tf_error)
8171             {
8172               pretty_name = name_as_c_string (name, basetype, &free_p);
8173               arglist = build_tree_list_vec (user_args);
8174               if (skip_first_for_error)
8175                 arglist = TREE_CHAIN (arglist);
8176               if (!any_strictly_viable (candidates))
8177                 error ("no matching function for call to %<%s(%A)%>",
8178                        pretty_name, arglist);
8179               else
8180                 error ("call of overloaded %<%s(%A)%> is ambiguous",
8181                        pretty_name, arglist);
8182               print_z_candidates (location_of (name), candidates);
8183               if (free_p)
8184                 free (pretty_name);
8185             }
8186           call = error_mark_node;
8187         }
8188       else
8189         {
8190           fn = cand->fn;
8191           call = NULL_TREE;
8192
8193           if (!(flags & LOOKUP_NONVIRTUAL)
8194               && DECL_PURE_VIRTUAL_P (fn)
8195               && instance == current_class_ref
8196               && (complain & tf_warning))
8197             {
8198               /* This is not an error, it is runtime undefined
8199                  behavior.  */
8200               if (!current_function_decl)
8201                 warning (0, "pure virtual %q#D called from "
8202                          "non-static data member initializer", fn);
8203               else if (DECL_CONSTRUCTOR_P (current_function_decl)
8204                        || DECL_DESTRUCTOR_P (current_function_decl))
8205                 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
8206                              ? "pure virtual %q#D called from constructor"
8207                              : "pure virtual %q#D called from destructor"),
8208                          fn);
8209             }
8210
8211           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
8212               && !DECL_CONSTRUCTOR_P (fn)
8213               && is_dummy_object (instance))
8214             {
8215               instance = maybe_resolve_dummy (instance, true);
8216               if (instance == error_mark_node)
8217                 call = error_mark_node;
8218               else if (!is_dummy_object (instance))
8219                 {
8220                   /* We captured 'this' in the current lambda now that
8221                      we know we really need it.  */
8222                   cand->first_arg = instance;
8223                 }
8224               else
8225                 {
8226                   if (complain & tf_error)
8227                     error ("cannot call member function %qD without object",
8228                            fn);
8229                   call = error_mark_node;
8230                 }
8231             }
8232
8233           if (call != error_mark_node)
8234             {
8235               /* Optimize away vtable lookup if we know that this
8236                  function can't be overridden.  We need to check if
8237                  the context and the type where we found fn are the same,
8238                  actually FN might be defined in a different class
8239                  type because of a using-declaration. In this case, we
8240                  do not want to perform a non-virtual call.  */
8241               if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
8242                   && same_type_ignoring_top_level_qualifiers_p
8243                   (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
8244                   && resolves_to_fixed_type_p (instance, 0))
8245                 flags |= LOOKUP_NONVIRTUAL;
8246               if (explicit_targs)
8247                 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
8248               /* Now we know what function is being called.  */
8249               if (fn_p)
8250                 *fn_p = fn;
8251               /* Build the actual CALL_EXPR.  */
8252               call = build_over_call (cand, flags, complain);
8253               /* In an expression of the form `a->f()' where `f' turns
8254                  out to be a static member function, `a' is
8255                  none-the-less evaluated.  */
8256               if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
8257                   && !is_dummy_object (instance)
8258                   && TREE_SIDE_EFFECTS (instance))
8259                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
8260                                instance, call);
8261               else if (call != error_mark_node
8262                        && DECL_DESTRUCTOR_P (cand->fn)
8263                        && !VOID_TYPE_P (TREE_TYPE (call)))
8264                 /* An explicit call of the form "x->~X()" has type
8265                    "void".  However, on platforms where destructors
8266                    return "this" (i.e., those where
8267                    targetm.cxx.cdtor_returns_this is true), such calls
8268                    will appear to have a return value of pointer type
8269                    to the low-level call machinery.  We do not want to
8270                    change the low-level machinery, since we want to be
8271                    able to optimize "delete f()" on such platforms as
8272                    "operator delete(~X(f()))" (rather than generating
8273                    "t = f(), ~X(t), operator delete (t)").  */
8274                 call = build_nop (void_type_node, call);
8275             }
8276         }
8277     }
8278
8279   if (processing_template_decl && call != error_mark_node)
8280     {
8281       bool cast_to_void = false;
8282
8283       if (TREE_CODE (call) == COMPOUND_EXPR)
8284         call = TREE_OPERAND (call, 1);
8285       else if (TREE_CODE (call) == NOP_EXPR)
8286         {
8287           cast_to_void = true;
8288           call = TREE_OPERAND (call, 0);
8289         }
8290       if (INDIRECT_REF_P (call))
8291         call = TREE_OPERAND (call, 0);
8292       call = (build_min_non_dep_call_vec
8293               (call,
8294                build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
8295                           orig_instance, orig_fns, NULL_TREE),
8296                orig_args));
8297       SET_EXPR_LOCATION (call, input_location);
8298       call = convert_from_reference (call);
8299       if (cast_to_void)
8300         call = build_nop (void_type_node, call);
8301     }
8302
8303  /* Free all the conversions we allocated.  */
8304   obstack_free (&conversion_obstack, p);
8305
8306   if (orig_args != NULL)
8307     release_tree_vector (orig_args);
8308
8309   return call;
8310 }
8311
8312 /* Wrapper for above.  */
8313
8314 tree
8315 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
8316                        tree conversion_path, int flags,
8317                        tree *fn_p, tsubst_flags_t complain)
8318 {
8319   tree ret;
8320   bool subtime = timevar_cond_start (TV_OVERLOAD);
8321   ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
8322                                  fn_p, complain);
8323   timevar_cond_stop (TV_OVERLOAD, subtime);
8324   return ret;
8325 }
8326
8327 /* Returns true iff standard conversion sequence ICS1 is a proper
8328    subsequence of ICS2.  */
8329
8330 static bool
8331 is_subseq (conversion *ics1, conversion *ics2)
8332 {
8333   /* We can assume that a conversion of the same code
8334      between the same types indicates a subsequence since we only get
8335      here if the types we are converting from are the same.  */
8336
8337   while (ics1->kind == ck_rvalue
8338          || ics1->kind == ck_lvalue)
8339     ics1 = next_conversion (ics1);
8340
8341   while (1)
8342     {
8343       while (ics2->kind == ck_rvalue
8344              || ics2->kind == ck_lvalue)
8345         ics2 = next_conversion (ics2);
8346
8347       if (ics2->kind == ck_user
8348           || ics2->kind == ck_ambig
8349           || ics2->kind == ck_aggr
8350           || ics2->kind == ck_list
8351           || ics2->kind == ck_identity)
8352         /* At this point, ICS1 cannot be a proper subsequence of
8353            ICS2.  We can get a USER_CONV when we are comparing the
8354            second standard conversion sequence of two user conversion
8355            sequences.  */
8356         return false;
8357
8358       ics2 = next_conversion (ics2);
8359
8360       if (ics2->kind == ics1->kind
8361           && same_type_p (ics2->type, ics1->type)
8362           && same_type_p (next_conversion (ics2)->type,
8363                           next_conversion (ics1)->type))
8364         return true;
8365     }
8366 }
8367
8368 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
8369    be any _TYPE nodes.  */
8370
8371 bool
8372 is_properly_derived_from (tree derived, tree base)
8373 {
8374   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
8375     return false;
8376
8377   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
8378      considers every class derived from itself.  */
8379   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
8380           && DERIVED_FROM_P (base, derived));
8381 }
8382
8383 /* We build the ICS for an implicit object parameter as a pointer
8384    conversion sequence.  However, such a sequence should be compared
8385    as if it were a reference conversion sequence.  If ICS is the
8386    implicit conversion sequence for an implicit object parameter,
8387    modify it accordingly.  */
8388
8389 static void
8390 maybe_handle_implicit_object (conversion **ics)
8391 {
8392   if ((*ics)->this_p)
8393     {
8394       /* [over.match.funcs]
8395
8396          For non-static member functions, the type of the
8397          implicit object parameter is "reference to cv X"
8398          where X is the class of which the function is a
8399          member and cv is the cv-qualification on the member
8400          function declaration.  */
8401       conversion *t = *ics;
8402       tree reference_type;
8403
8404       /* The `this' parameter is a pointer to a class type.  Make the
8405          implicit conversion talk about a reference to that same class
8406          type.  */
8407       reference_type = TREE_TYPE (t->type);
8408       reference_type = build_reference_type (reference_type);
8409
8410       if (t->kind == ck_qual)
8411         t = next_conversion (t);
8412       if (t->kind == ck_ptr)
8413         t = next_conversion (t);
8414       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
8415       t = direct_reference_binding (reference_type, t);
8416       t->this_p = 1;
8417       t->rvaluedness_matches_p = 0;
8418       *ics = t;
8419     }
8420 }
8421
8422 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8423    and return the initial reference binding conversion. Otherwise,
8424    leave *ICS unchanged and return NULL.  */
8425
8426 static conversion *
8427 maybe_handle_ref_bind (conversion **ics)
8428 {
8429   if ((*ics)->kind == ck_ref_bind)
8430     {
8431       conversion *old_ics = *ics;
8432       *ics = next_conversion (old_ics);
8433       (*ics)->user_conv_p = old_ics->user_conv_p;
8434       return old_ics;
8435     }
8436
8437   return NULL;
8438 }
8439
8440 /* Compare two implicit conversion sequences according to the rules set out in
8441    [over.ics.rank].  Return values:
8442
8443       1: ics1 is better than ics2
8444      -1: ics2 is better than ics1
8445       0: ics1 and ics2 are indistinguishable */
8446
8447 static int
8448 compare_ics (conversion *ics1, conversion *ics2)
8449 {
8450   tree from_type1;
8451   tree from_type2;
8452   tree to_type1;
8453   tree to_type2;
8454   tree deref_from_type1 = NULL_TREE;
8455   tree deref_from_type2 = NULL_TREE;
8456   tree deref_to_type1 = NULL_TREE;
8457   tree deref_to_type2 = NULL_TREE;
8458   conversion_rank rank1, rank2;
8459
8460   /* REF_BINDING is nonzero if the result of the conversion sequence
8461      is a reference type.   In that case REF_CONV is the reference
8462      binding conversion. */
8463   conversion *ref_conv1;
8464   conversion *ref_conv2;
8465
8466   /* Compare badness before stripping the reference conversion.  */
8467   if (ics1->bad_p > ics2->bad_p)
8468     return -1;
8469   else if (ics1->bad_p < ics2->bad_p)
8470     return 1;
8471
8472   /* Handle implicit object parameters.  */
8473   maybe_handle_implicit_object (&ics1);
8474   maybe_handle_implicit_object (&ics2);
8475
8476   /* Handle reference parameters.  */
8477   ref_conv1 = maybe_handle_ref_bind (&ics1);
8478   ref_conv2 = maybe_handle_ref_bind (&ics2);
8479
8480   /* List-initialization sequence L1 is a better conversion sequence than
8481      list-initialization sequence L2 if L1 converts to
8482      std::initializer_list<X> for some X and L2 does not.  */
8483   if (ics1->kind == ck_list && ics2->kind != ck_list)
8484     return 1;
8485   if (ics2->kind == ck_list && ics1->kind != ck_list)
8486     return -1;
8487
8488   /* [over.ics.rank]
8489
8490      When  comparing  the  basic forms of implicit conversion sequences (as
8491      defined in _over.best.ics_)
8492
8493      --a standard conversion sequence (_over.ics.scs_) is a better
8494        conversion sequence than a user-defined conversion sequence
8495        or an ellipsis conversion sequence, and
8496
8497      --a user-defined conversion sequence (_over.ics.user_) is a
8498        better conversion sequence than an ellipsis conversion sequence
8499        (_over.ics.ellipsis_).  */
8500   /* Use BAD_CONVERSION_RANK because we already checked for a badness
8501      mismatch.  If both ICS are bad, we try to make a decision based on
8502      what would have happened if they'd been good.  This is not an
8503      extension, we'll still give an error when we build up the call; this
8504      just helps us give a more helpful error message.  */
8505   rank1 = BAD_CONVERSION_RANK (ics1);
8506   rank2 = BAD_CONVERSION_RANK (ics2);
8507
8508   if (rank1 > rank2)
8509     return -1;
8510   else if (rank1 < rank2)
8511     return 1;
8512
8513   if (ics1->ellipsis_p)
8514     /* Both conversions are ellipsis conversions.  */
8515     return 0;
8516
8517   /* User-defined  conversion sequence U1 is a better conversion sequence
8518      than another user-defined conversion sequence U2 if they contain the
8519      same user-defined conversion operator or constructor and if the sec-
8520      ond standard conversion sequence of U1 is  better  than  the  second
8521      standard conversion sequence of U2.  */
8522
8523   /* Handle list-conversion with the same code even though it isn't always
8524      ranked as a user-defined conversion and it doesn't have a second
8525      standard conversion sequence; it will still have the desired effect.
8526      Specifically, we need to do the reference binding comparison at the
8527      end of this function.  */
8528
8529   if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8530     {
8531       conversion *t1;
8532       conversion *t2;
8533
8534       for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8535         if (t1->kind == ck_ambig || t1->kind == ck_aggr
8536             || t1->kind == ck_list)
8537           break;
8538       for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8539         if (t2->kind == ck_ambig || t2->kind == ck_aggr
8540             || t2->kind == ck_list)
8541           break;
8542
8543       if (t1->kind != t2->kind)
8544         return 0;
8545       else if (t1->kind == ck_user)
8546         {
8547           if (t1->cand->fn != t2->cand->fn)
8548             return 0;
8549         }
8550       else
8551         {
8552           /* For ambiguous or aggregate conversions, use the target type as
8553              a proxy for the conversion function.  */
8554           if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8555             return 0;
8556         }
8557
8558       /* We can just fall through here, after setting up
8559          FROM_TYPE1 and FROM_TYPE2.  */
8560       from_type1 = t1->type;
8561       from_type2 = t2->type;
8562     }
8563   else
8564     {
8565       conversion *t1;
8566       conversion *t2;
8567
8568       /* We're dealing with two standard conversion sequences.
8569
8570          [over.ics.rank]
8571
8572          Standard conversion sequence S1 is a better conversion
8573          sequence than standard conversion sequence S2 if
8574
8575          --S1 is a proper subsequence of S2 (comparing the conversion
8576            sequences in the canonical form defined by _over.ics.scs_,
8577            excluding any Lvalue Transformation; the identity
8578            conversion sequence is considered to be a subsequence of
8579            any non-identity conversion sequence */
8580
8581       t1 = ics1;
8582       while (t1->kind != ck_identity)
8583         t1 = next_conversion (t1);
8584       from_type1 = t1->type;
8585
8586       t2 = ics2;
8587       while (t2->kind != ck_identity)
8588         t2 = next_conversion (t2);
8589       from_type2 = t2->type;
8590     }
8591
8592   /* One sequence can only be a subsequence of the other if they start with
8593      the same type.  They can start with different types when comparing the
8594      second standard conversion sequence in two user-defined conversion
8595      sequences.  */
8596   if (same_type_p (from_type1, from_type2))
8597     {
8598       if (is_subseq (ics1, ics2))
8599         return 1;
8600       if (is_subseq (ics2, ics1))
8601         return -1;
8602     }
8603
8604   /* [over.ics.rank]
8605
8606      Or, if not that,
8607
8608      --the rank of S1 is better than the rank of S2 (by the rules
8609        defined below):
8610
8611     Standard conversion sequences are ordered by their ranks: an Exact
8612     Match is a better conversion than a Promotion, which is a better
8613     conversion than a Conversion.
8614
8615     Two conversion sequences with the same rank are indistinguishable
8616     unless one of the following rules applies:
8617
8618     --A conversion that does not a convert a pointer, pointer to member,
8619       or std::nullptr_t to bool is better than one that does.
8620
8621     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8622     so that we do not have to check it explicitly.  */
8623   if (ics1->rank < ics2->rank)
8624     return 1;
8625   else if (ics2->rank < ics1->rank)
8626     return -1;
8627
8628   to_type1 = ics1->type;
8629   to_type2 = ics2->type;
8630
8631   /* A conversion from scalar arithmetic type to complex is worse than a
8632      conversion between scalar arithmetic types.  */
8633   if (same_type_p (from_type1, from_type2)
8634       && ARITHMETIC_TYPE_P (from_type1)
8635       && ARITHMETIC_TYPE_P (to_type1)
8636       && ARITHMETIC_TYPE_P (to_type2)
8637       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8638           != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8639     {
8640       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8641         return -1;
8642       else
8643         return 1;
8644     }
8645
8646   if (TYPE_PTR_P (from_type1)
8647       && TYPE_PTR_P (from_type2)
8648       && TYPE_PTR_P (to_type1)
8649       && TYPE_PTR_P (to_type2))
8650     {
8651       deref_from_type1 = TREE_TYPE (from_type1);
8652       deref_from_type2 = TREE_TYPE (from_type2);
8653       deref_to_type1 = TREE_TYPE (to_type1);
8654       deref_to_type2 = TREE_TYPE (to_type2);
8655     }
8656   /* The rules for pointers to members A::* are just like the rules
8657      for pointers A*, except opposite: if B is derived from A then
8658      A::* converts to B::*, not vice versa.  For that reason, we
8659      switch the from_ and to_ variables here.  */
8660   else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8661             && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8662            || (TYPE_PTRMEMFUNC_P (from_type1)
8663                && TYPE_PTRMEMFUNC_P (from_type2)
8664                && TYPE_PTRMEMFUNC_P (to_type1)
8665                && TYPE_PTRMEMFUNC_P (to_type2)))
8666     {
8667       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8668       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8669       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8670       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8671     }
8672
8673   if (deref_from_type1 != NULL_TREE
8674       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8675       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8676     {
8677       /* This was one of the pointer or pointer-like conversions.
8678
8679          [over.ics.rank]
8680
8681          --If class B is derived directly or indirectly from class A,
8682            conversion of B* to A* is better than conversion of B* to
8683            void*, and conversion of A* to void* is better than
8684            conversion of B* to void*.  */
8685       if (VOID_TYPE_P (deref_to_type1)
8686           && VOID_TYPE_P (deref_to_type2))
8687         {
8688           if (is_properly_derived_from (deref_from_type1,
8689                                         deref_from_type2))
8690             return -1;
8691           else if (is_properly_derived_from (deref_from_type2,
8692                                              deref_from_type1))
8693             return 1;
8694         }
8695       else if (VOID_TYPE_P (deref_to_type1)
8696                || VOID_TYPE_P (deref_to_type2))
8697         {
8698           if (same_type_p (deref_from_type1, deref_from_type2))
8699             {
8700               if (VOID_TYPE_P (deref_to_type2))
8701                 {
8702                   if (is_properly_derived_from (deref_from_type1,
8703                                                 deref_to_type1))
8704                     return 1;
8705                 }
8706               /* We know that DEREF_TO_TYPE1 is `void' here.  */
8707               else if (is_properly_derived_from (deref_from_type1,
8708                                                  deref_to_type2))
8709                 return -1;
8710             }
8711         }
8712       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8713                && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8714         {
8715           /* [over.ics.rank]
8716
8717              --If class B is derived directly or indirectly from class A
8718                and class C is derived directly or indirectly from B,
8719
8720              --conversion of C* to B* is better than conversion of C* to
8721                A*,
8722
8723              --conversion of B* to A* is better than conversion of C* to
8724                A*  */
8725           if (same_type_p (deref_from_type1, deref_from_type2))
8726             {
8727               if (is_properly_derived_from (deref_to_type1,
8728                                             deref_to_type2))
8729                 return 1;
8730               else if (is_properly_derived_from (deref_to_type2,
8731                                                  deref_to_type1))
8732                 return -1;
8733             }
8734           else if (same_type_p (deref_to_type1, deref_to_type2))
8735             {
8736               if (is_properly_derived_from (deref_from_type2,
8737                                             deref_from_type1))
8738                 return 1;
8739               else if (is_properly_derived_from (deref_from_type1,
8740                                                  deref_from_type2))
8741                 return -1;
8742             }
8743         }
8744     }
8745   else if (CLASS_TYPE_P (non_reference (from_type1))
8746            && same_type_p (from_type1, from_type2))
8747     {
8748       tree from = non_reference (from_type1);
8749
8750       /* [over.ics.rank]
8751
8752          --binding of an expression of type C to a reference of type
8753            B& is better than binding an expression of type C to a
8754            reference of type A&
8755
8756          --conversion of C to B is better than conversion of C to A,  */
8757       if (is_properly_derived_from (from, to_type1)
8758           && is_properly_derived_from (from, to_type2))
8759         {
8760           if (is_properly_derived_from (to_type1, to_type2))
8761             return 1;
8762           else if (is_properly_derived_from (to_type2, to_type1))
8763             return -1;
8764         }
8765     }
8766   else if (CLASS_TYPE_P (non_reference (to_type1))
8767            && same_type_p (to_type1, to_type2))
8768     {
8769       tree to = non_reference (to_type1);
8770
8771       /* [over.ics.rank]
8772
8773          --binding of an expression of type B to a reference of type
8774            A& is better than binding an expression of type C to a
8775            reference of type A&,
8776
8777          --conversion of B to A is better than conversion of C to A  */
8778       if (is_properly_derived_from (from_type1, to)
8779           && is_properly_derived_from (from_type2, to))
8780         {
8781           if (is_properly_derived_from (from_type2, from_type1))
8782             return 1;
8783           else if (is_properly_derived_from (from_type1, from_type2))
8784             return -1;
8785         }
8786     }
8787
8788   /* [over.ics.rank]
8789
8790      --S1 and S2 differ only in their qualification conversion and  yield
8791        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
8792        qualification signature of type T1 is a proper subset of  the  cv-
8793        qualification signature of type T2  */
8794   if (ics1->kind == ck_qual
8795       && ics2->kind == ck_qual
8796       && same_type_p (from_type1, from_type2))
8797     {
8798       int result = comp_cv_qual_signature (to_type1, to_type2);
8799       if (result != 0)
8800         return result;
8801     }
8802
8803   /* [over.ics.rank]
8804
8805      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8806      to an implicit object parameter of a non-static member function
8807      declared without a ref-qualifier, and either S1 binds an lvalue
8808      reference to an lvalue and S2 binds an rvalue reference or S1 binds an
8809      rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
8810      draft standard, 13.3.3.2)
8811
8812      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8813      types to which the references refer are the same type except for
8814      top-level cv-qualifiers, and the type to which the reference
8815      initialized by S2 refers is more cv-qualified than the type to
8816      which the reference initialized by S1 refers.
8817
8818      DR 1328 [over.match.best]: the context is an initialization by
8819      conversion function for direct reference binding (13.3.1.6) of a
8820      reference to function type, the return type of F1 is the same kind of
8821      reference (i.e. lvalue or rvalue) as the reference being initialized,
8822      and the return type of F2 is not.  */
8823
8824   if (ref_conv1 && ref_conv2)
8825     {
8826       if (!ref_conv1->this_p && !ref_conv2->this_p
8827           && (ref_conv1->rvaluedness_matches_p
8828               != ref_conv2->rvaluedness_matches_p)
8829           && (same_type_p (ref_conv1->type, ref_conv2->type)
8830               || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8831                   != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8832         {
8833           if (ref_conv1->bad_p
8834               && !same_type_p (TREE_TYPE (ref_conv1->type),
8835                                TREE_TYPE (ref_conv2->type)))
8836             /* Don't prefer a bad conversion that drops cv-quals to a bad
8837                conversion with the wrong rvalueness.  */
8838             return 0;
8839           return (ref_conv1->rvaluedness_matches_p
8840                   - ref_conv2->rvaluedness_matches_p);
8841         }
8842
8843       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8844         {
8845           int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
8846           int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
8847           if (ref_conv1->bad_p)
8848             {
8849               /* Prefer the one that drops fewer cv-quals.  */
8850               tree ftype = next_conversion (ref_conv1)->type;
8851               int fquals = cp_type_quals (ftype);
8852               q1 ^= fquals;
8853               q2 ^= fquals;
8854             }
8855           return comp_cv_qualification (q2, q1);
8856         }
8857     }
8858
8859   /* Neither conversion sequence is better than the other.  */
8860   return 0;
8861 }
8862
8863 /* The source type for this standard conversion sequence.  */
8864
8865 static tree
8866 source_type (conversion *t)
8867 {
8868   for (;; t = next_conversion (t))
8869     {
8870       if (t->kind == ck_user
8871           || t->kind == ck_ambig
8872           || t->kind == ck_identity)
8873         return t->type;
8874     }
8875   gcc_unreachable ();
8876 }
8877
8878 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
8879    a pointer to LOSER and re-running joust to produce the warning if WINNER
8880    is actually used.  */
8881
8882 static void
8883 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8884 {
8885   candidate_warning *cw = (candidate_warning *)
8886     conversion_obstack_alloc (sizeof (candidate_warning));
8887   cw->loser = loser;
8888   cw->next = winner->warnings;
8889   winner->warnings = cw;
8890 }
8891
8892 /* Compare two candidates for overloading as described in
8893    [over.match.best].  Return values:
8894
8895       1: cand1 is better than cand2
8896      -1: cand2 is better than cand1
8897       0: cand1 and cand2 are indistinguishable */
8898
8899 static int
8900 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8901        tsubst_flags_t complain)
8902 {
8903   int winner = 0;
8904   int off1 = 0, off2 = 0;
8905   size_t i;
8906   size_t len;
8907
8908   /* Candidates that involve bad conversions are always worse than those
8909      that don't.  */
8910   if (cand1->viable > cand2->viable)
8911     return 1;
8912   if (cand1->viable < cand2->viable)
8913     return -1;
8914
8915   /* If we have two pseudo-candidates for conversions to the same type,
8916      or two candidates for the same function, arbitrarily pick one.  */
8917   if (cand1->fn == cand2->fn
8918       && (IS_TYPE_OR_DECL_P (cand1->fn)))
8919     return 1;
8920
8921   /* Prefer a non-deleted function over an implicitly deleted move
8922      constructor or assignment operator.  This differs slightly from the
8923      wording for issue 1402 (which says the move op is ignored by overload
8924      resolution), but this way produces better error messages.  */
8925   if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8926       && TREE_CODE (cand2->fn) == FUNCTION_DECL
8927       && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8928     {
8929       if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8930           && move_fn_p (cand1->fn))
8931         return -1;
8932       if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8933           && move_fn_p (cand2->fn))
8934         return 1;
8935     }
8936
8937   /* a viable function F1
8938      is defined to be a better function than another viable function F2  if
8939      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
8940      ICSi(F2), and then */
8941
8942   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
8943      ICSj(F2) */
8944
8945   /* For comparing static and non-static member functions, we ignore
8946      the implicit object parameter of the non-static function.  The
8947      standard says to pretend that the static function has an object
8948      parm, but that won't work with operator overloading.  */
8949   len = cand1->num_convs;
8950   if (len != cand2->num_convs)
8951     {
8952       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8953       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8954
8955       if (DECL_CONSTRUCTOR_P (cand1->fn)
8956           && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8957         /* We're comparing a near-match list constructor and a near-match
8958            non-list constructor.  Just treat them as unordered.  */
8959         return 0;
8960
8961       gcc_assert (static_1 != static_2);
8962
8963       if (static_1)
8964         off2 = 1;
8965       else
8966         {
8967           off1 = 1;
8968           --len;
8969         }
8970     }
8971
8972   for (i = 0; i < len; ++i)
8973     {
8974       conversion *t1 = cand1->convs[i + off1];
8975       conversion *t2 = cand2->convs[i + off2];
8976       int comp = compare_ics (t1, t2);
8977
8978       if (comp != 0)
8979         {
8980           if ((complain & tf_warning)
8981               && warn_sign_promo
8982               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8983                   == cr_std + cr_promotion)
8984               && t1->kind == ck_std
8985               && t2->kind == ck_std
8986               && TREE_CODE (t1->type) == INTEGER_TYPE
8987               && TREE_CODE (t2->type) == INTEGER_TYPE
8988               && (TYPE_PRECISION (t1->type)
8989                   == TYPE_PRECISION (t2->type))
8990               && (TYPE_UNSIGNED (next_conversion (t1)->type)
8991                   || (TREE_CODE (next_conversion (t1)->type)
8992                       == ENUMERAL_TYPE)))
8993             {
8994               tree type = next_conversion (t1)->type;
8995               tree type1, type2;
8996               struct z_candidate *w, *l;
8997               if (comp > 0)
8998                 type1 = t1->type, type2 = t2->type,
8999                   w = cand1, l = cand2;
9000               else
9001                 type1 = t2->type, type2 = t1->type,
9002                   w = cand2, l = cand1;
9003
9004               if (warn)
9005                 {
9006                   warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
9007                            type, type1, type2);
9008                   warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
9009                 }
9010               else
9011                 add_warning (w, l);
9012             }
9013
9014           if (winner && comp != winner)
9015             {
9016               winner = 0;
9017               goto tweak;
9018             }
9019           winner = comp;
9020         }
9021     }
9022
9023   /* warn about confusing overload resolution for user-defined conversions,
9024      either between a constructor and a conversion op, or between two
9025      conversion ops.  */
9026   if ((complain & tf_warning)
9027       && winner && warn_conversion && cand1->second_conv
9028       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
9029       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
9030     {
9031       struct z_candidate *w, *l;
9032       bool give_warning = false;
9033
9034       if (winner == 1)
9035         w = cand1, l = cand2;
9036       else
9037         w = cand2, l = cand1;
9038
9039       /* We don't want to complain about `X::operator T1 ()'
9040          beating `X::operator T2 () const', when T2 is a no less
9041          cv-qualified version of T1.  */
9042       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
9043           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
9044         {
9045           tree t = TREE_TYPE (TREE_TYPE (l->fn));
9046           tree f = TREE_TYPE (TREE_TYPE (w->fn));
9047
9048           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
9049             {
9050               t = TREE_TYPE (t);
9051               f = TREE_TYPE (f);
9052             }
9053           if (!comp_ptr_ttypes (t, f))
9054             give_warning = true;
9055         }
9056       else
9057         give_warning = true;
9058
9059       if (!give_warning)
9060         /*NOP*/;
9061       else if (warn)
9062         {
9063           tree source = source_type (w->convs[0]);
9064           if (! DECL_CONSTRUCTOR_P (w->fn))
9065             source = TREE_TYPE (source);
9066           if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
9067               && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
9068                           source, w->second_conv->type)) 
9069             {
9070               inform (input_location, "  because conversion sequence for the argument is better");
9071             }
9072         }
9073       else
9074         add_warning (w, l);
9075     }
9076
9077   if (winner)
9078     return winner;
9079
9080   /* DR 495 moved this tiebreaker above the template ones.  */
9081   /* or, if not that,
9082      the  context  is  an  initialization by user-defined conversion (see
9083      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
9084      sequence  from  the return type of F1 to the destination type (i.e.,
9085      the type of the entity being initialized)  is  a  better  conversion
9086      sequence  than the standard conversion sequence from the return type
9087      of F2 to the destination type.  */
9088
9089   if (cand1->second_conv)
9090     {
9091       winner = compare_ics (cand1->second_conv, cand2->second_conv);
9092       if (winner)
9093         return winner;
9094     }
9095
9096   /* or, if not that,
9097      F1 is a non-template function and F2 is a template function
9098      specialization.  */
9099
9100   if (!cand1->template_decl && cand2->template_decl)
9101     return 1;
9102   else if (cand1->template_decl && !cand2->template_decl)
9103     return -1;
9104
9105   /* or, if not that,
9106      F1 and F2 are template functions and the function template for F1 is
9107      more specialized than the template for F2 according to the partial
9108      ordering rules.  */
9109
9110   if (cand1->template_decl && cand2->template_decl)
9111     {
9112       winner = more_specialized_fn
9113         (TI_TEMPLATE (cand1->template_decl),
9114          TI_TEMPLATE (cand2->template_decl),
9115          /* [temp.func.order]: The presence of unused ellipsis and default
9116             arguments has no effect on the partial ordering of function
9117             templates.   add_function_candidate() will not have
9118             counted the "this" argument for constructors.  */
9119          cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
9120       if (winner)
9121         return winner;
9122     }
9123
9124   /* Check whether we can discard a builtin candidate, either because we
9125      have two identical ones or matching builtin and non-builtin candidates.
9126
9127      (Pedantically in the latter case the builtin which matched the user
9128      function should not be added to the overload set, but we spot it here.
9129
9130      [over.match.oper]
9131      ... the builtin candidates include ...
9132      - do not have the same parameter type list as any non-template
9133        non-member candidate.  */
9134
9135   if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
9136     {
9137       for (i = 0; i < len; ++i)
9138         if (!same_type_p (cand1->convs[i]->type,
9139                           cand2->convs[i]->type))
9140           break;
9141       if (i == cand1->num_convs)
9142         {
9143           if (cand1->fn == cand2->fn)
9144             /* Two built-in candidates; arbitrarily pick one.  */
9145             return 1;
9146           else if (identifier_p (cand1->fn))
9147             /* cand1 is built-in; prefer cand2.  */
9148             return -1;
9149           else
9150             /* cand2 is built-in; prefer cand1.  */
9151             return 1;
9152         }
9153     }
9154
9155   /* For candidates of a multi-versioned function,  make the version with
9156      the highest priority win.  This version will be checked for dispatching
9157      first.  If this version can be inlined into the caller, the front-end
9158      will simply make a direct call to this function.  */
9159
9160   if (TREE_CODE (cand1->fn) == FUNCTION_DECL
9161       && DECL_FUNCTION_VERSIONED (cand1->fn)
9162       && TREE_CODE (cand2->fn) == FUNCTION_DECL
9163       && DECL_FUNCTION_VERSIONED (cand2->fn))
9164     {
9165       tree f1 = TREE_TYPE (cand1->fn);
9166       tree f2 = TREE_TYPE (cand2->fn);
9167       tree p1 = TYPE_ARG_TYPES (f1);
9168       tree p2 = TYPE_ARG_TYPES (f2);
9169      
9170       /* Check if cand1->fn and cand2->fn are versions of the same function.  It
9171          is possible that cand1->fn and cand2->fn are function versions but of
9172          different functions.  Check types to see if they are versions of the same
9173          function.  */
9174       if (compparms (p1, p2)
9175           && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
9176         {
9177           /* Always make the version with the higher priority, more
9178              specialized, win.  */
9179           gcc_assert (targetm.compare_version_priority);
9180           if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
9181             return 1;
9182           else
9183             return -1;
9184         }
9185     }
9186
9187   /* If the two function declarations represent the same function (this can
9188      happen with declarations in multiple scopes and arg-dependent lookup),
9189      arbitrarily choose one.  But first make sure the default args we're
9190      using match.  */
9191   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
9192       && equal_functions (cand1->fn, cand2->fn))
9193     {
9194       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
9195       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
9196
9197       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
9198
9199       for (i = 0; i < len; ++i)
9200         {
9201           /* Don't crash if the fn is variadic.  */
9202           if (!parms1)
9203             break;
9204           parms1 = TREE_CHAIN (parms1);
9205           parms2 = TREE_CHAIN (parms2);
9206         }
9207
9208       if (off1)
9209         parms1 = TREE_CHAIN (parms1);
9210       else if (off2)
9211         parms2 = TREE_CHAIN (parms2);
9212
9213       for (; parms1; ++i)
9214         {
9215           if (!cp_tree_equal (TREE_PURPOSE (parms1),
9216                               TREE_PURPOSE (parms2)))
9217             {
9218               if (warn)
9219                 {
9220                   if (complain & tf_error)
9221                     {
9222                       if (permerror (input_location,
9223                                      "default argument mismatch in "
9224                                      "overload resolution"))
9225                         {
9226                           inform (input_location,
9227                                   " candidate 1: %q+#F", cand1->fn);
9228                           inform (input_location,
9229                                   " candidate 2: %q+#F", cand2->fn);
9230                         }
9231                     }
9232                   else
9233                     return 0;
9234                 }
9235               else
9236                 add_warning (cand1, cand2);
9237               break;
9238             }
9239           parms1 = TREE_CHAIN (parms1);
9240           parms2 = TREE_CHAIN (parms2);
9241         }
9242
9243       return 1;
9244     }
9245
9246 tweak:
9247
9248   /* Extension: If the worst conversion for one candidate is worse than the
9249      worst conversion for the other, take the first.  */
9250   if (!pedantic && (complain & tf_warning_or_error))
9251     {
9252       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
9253       struct z_candidate *w = 0, *l = 0;
9254
9255       for (i = 0; i < len; ++i)
9256         {
9257           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
9258             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
9259           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
9260             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
9261         }
9262       if (rank1 < rank2)
9263         winner = 1, w = cand1, l = cand2;
9264       if (rank1 > rank2)
9265         winner = -1, w = cand2, l = cand1;
9266       if (winner)
9267         {
9268           /* Don't choose a deleted function over ambiguity.  */
9269           if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
9270             return 0;
9271           if (warn)
9272             {
9273               pedwarn (input_location, 0,
9274               "ISO C++ says that these are ambiguous, even "
9275               "though the worst conversion for the first is better than "
9276               "the worst conversion for the second:");
9277               print_z_candidate (input_location, _("candidate 1:"), w);
9278               print_z_candidate (input_location, _("candidate 2:"), l);
9279             }
9280           else
9281             add_warning (w, l);
9282           return winner;
9283         }
9284     }
9285
9286   gcc_assert (!winner);
9287   return 0;
9288 }
9289
9290 /* Given a list of candidates for overloading, find the best one, if any.
9291    This algorithm has a worst case of O(2n) (winner is last), and a best
9292    case of O(n/2) (totally ambiguous); much better than a sorting
9293    algorithm.  */
9294
9295 static struct z_candidate *
9296 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
9297 {
9298   struct z_candidate *champ = candidates, *challenger;
9299   int fate;
9300   int champ_compared_to_predecessor = 0;
9301
9302   /* Walk through the list once, comparing each current champ to the next
9303      candidate, knocking out a candidate or two with each comparison.  */
9304
9305   for (challenger = champ->next; challenger; )
9306     {
9307       fate = joust (champ, challenger, 0, complain);
9308       if (fate == 1)
9309         challenger = challenger->next;
9310       else
9311         {
9312           if (fate == 0)
9313             {
9314               champ = challenger->next;
9315               if (champ == 0)
9316                 return NULL;
9317               champ_compared_to_predecessor = 0;
9318             }
9319           else
9320             {
9321               champ = challenger;
9322               champ_compared_to_predecessor = 1;
9323             }
9324
9325           challenger = champ->next;
9326         }
9327     }
9328
9329   /* Make sure the champ is better than all the candidates it hasn't yet
9330      been compared to.  */
9331
9332   for (challenger = candidates;
9333        challenger != champ
9334          && !(champ_compared_to_predecessor && challenger->next == champ);
9335        challenger = challenger->next)
9336     {
9337       fate = joust (champ, challenger, 0, complain);
9338       if (fate != 1)
9339         return NULL;
9340     }
9341
9342   return champ;
9343 }
9344
9345 /* Returns nonzero if things of type FROM can be converted to TO.  */
9346
9347 bool
9348 can_convert (tree to, tree from, tsubst_flags_t complain)
9349 {
9350   tree arg = NULL_TREE;
9351   /* implicit_conversion only considers user-defined conversions
9352      if it has an expression for the call argument list.  */
9353   if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
9354     arg = build1 (CAST_EXPR, from, NULL_TREE);
9355   return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
9356 }
9357
9358 /* Returns nonzero if things of type FROM can be converted to TO with a
9359    standard conversion.  */
9360
9361 bool
9362 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
9363 {
9364   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
9365 }
9366
9367 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
9368
9369 bool
9370 can_convert_arg (tree to, tree from, tree arg, int flags,
9371                  tsubst_flags_t complain)
9372 {
9373   conversion *t;
9374   void *p;
9375   bool ok_p;
9376
9377   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9378   p = conversion_obstack_alloc (0);
9379   /* We want to discard any access checks done for this test,
9380      as we might not be in the appropriate access context and
9381      we'll do the check again when we actually perform the
9382      conversion.  */
9383   push_deferring_access_checks (dk_deferred);
9384
9385   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9386                             flags, complain);
9387   ok_p = (t && !t->bad_p);
9388
9389   /* Discard the access checks now.  */
9390   pop_deferring_access_checks ();
9391   /* Free all the conversions we allocated.  */
9392   obstack_free (&conversion_obstack, p);
9393
9394   return ok_p;
9395 }
9396
9397 /* Like can_convert_arg, but allows dubious conversions as well.  */
9398
9399 bool
9400 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
9401                      tsubst_flags_t complain)
9402 {
9403   conversion *t;
9404   void *p;
9405
9406   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9407   p = conversion_obstack_alloc (0);
9408   /* Try to perform the conversion.  */
9409   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9410                             flags, complain);
9411   /* Free all the conversions we allocated.  */
9412   obstack_free (&conversion_obstack, p);
9413
9414   return t != NULL;
9415 }
9416
9417 /* Convert EXPR to TYPE.  Return the converted expression.
9418
9419    Note that we allow bad conversions here because by the time we get to
9420    this point we are committed to doing the conversion.  If we end up
9421    doing a bad conversion, convert_like will complain.  */
9422
9423 tree
9424 perform_implicit_conversion_flags (tree type, tree expr,
9425                                    tsubst_flags_t complain, int flags)
9426 {
9427   conversion *conv;
9428   void *p;
9429   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9430
9431   if (error_operand_p (expr))
9432     return error_mark_node;
9433
9434   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9435   p = conversion_obstack_alloc (0);
9436
9437   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9438                               /*c_cast_p=*/false,
9439                               flags, complain);
9440
9441   if (!conv)
9442     {
9443       if (complain & tf_error)
9444         {
9445           /* If expr has unknown type, then it is an overloaded function.
9446              Call instantiate_type to get good error messages.  */
9447           if (TREE_TYPE (expr) == unknown_type_node)
9448             instantiate_type (type, expr, complain);
9449           else if (invalid_nonstatic_memfn_p (expr, complain))
9450             /* We gave an error.  */;
9451           else
9452             error_at (loc, "could not convert %qE from %qT to %qT", expr,
9453                       TREE_TYPE (expr), type);
9454         }
9455       expr = error_mark_node;
9456     }
9457   else if (processing_template_decl && conv->kind != ck_identity)
9458     {
9459       /* In a template, we are only concerned about determining the
9460          type of non-dependent expressions, so we do not have to
9461          perform the actual conversion.  But for initializers, we
9462          need to be able to perform it at instantiation
9463          (or instantiate_non_dependent_expr) time.  */
9464       expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9465       if (!(flags & LOOKUP_ONLYCONVERTING))
9466         IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9467     }
9468   else
9469     expr = convert_like (conv, expr, complain);
9470
9471   /* Free all the conversions we allocated.  */
9472   obstack_free (&conversion_obstack, p);
9473
9474   return expr;
9475 }
9476
9477 tree
9478 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9479 {
9480   return perform_implicit_conversion_flags (type, expr, complain,
9481                                             LOOKUP_IMPLICIT);
9482 }
9483
9484 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9485    permitted.  If the conversion is valid, the converted expression is
9486    returned.  Otherwise, NULL_TREE is returned, except in the case
9487    that TYPE is a class type; in that case, an error is issued.  If
9488    C_CAST_P is true, then this direct-initialization is taking
9489    place as part of a static_cast being attempted as part of a C-style
9490    cast.  */
9491
9492 tree
9493 perform_direct_initialization_if_possible (tree type,
9494                                            tree expr,
9495                                            bool c_cast_p,
9496                                            tsubst_flags_t complain)
9497 {
9498   conversion *conv;
9499   void *p;
9500
9501   if (type == error_mark_node || error_operand_p (expr))
9502     return error_mark_node;
9503   /* [dcl.init]
9504
9505      If the destination type is a (possibly cv-qualified) class type:
9506
9507      -- If the initialization is direct-initialization ...,
9508      constructors are considered. ... If no constructor applies, or
9509      the overload resolution is ambiguous, the initialization is
9510      ill-formed.  */
9511   if (CLASS_TYPE_P (type))
9512     {
9513       vec<tree, va_gc> *args = make_tree_vector_single (expr);
9514       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9515                                         &args, type, LOOKUP_NORMAL, complain);
9516       release_tree_vector (args);
9517       return build_cplus_new (type, expr, complain);
9518     }
9519
9520   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9521   p = conversion_obstack_alloc (0);
9522
9523   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9524                               c_cast_p,
9525                               LOOKUP_NORMAL, complain);
9526   if (!conv || conv->bad_p)
9527     expr = NULL_TREE;
9528   else
9529     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9530                               /*issue_conversion_warnings=*/false,
9531                               c_cast_p,
9532                               complain);
9533
9534   /* Free all the conversions we allocated.  */
9535   obstack_free (&conversion_obstack, p);
9536
9537   return expr;
9538 }
9539
9540 /* When initializing a reference that lasts longer than a full-expression,
9541    this special rule applies:
9542
9543      [class.temporary]
9544
9545      The temporary to which the reference is bound or the temporary
9546      that is the complete object to which the reference is bound
9547      persists for the lifetime of the reference.
9548
9549      The temporaries created during the evaluation of the expression
9550      initializing the reference, except the temporary to which the
9551      reference is bound, are destroyed at the end of the
9552      full-expression in which they are created.
9553
9554    In that case, we store the converted expression into a new
9555    VAR_DECL in a new scope.
9556
9557    However, we want to be careful not to create temporaries when
9558    they are not required.  For example, given:
9559
9560      struct B {};
9561      struct D : public B {};
9562      D f();
9563      const B& b = f();
9564
9565    there is no need to copy the return value from "f"; we can just
9566    extend its lifetime.  Similarly, given:
9567
9568      struct S {};
9569      struct T { operator S(); };
9570      T t;
9571      const S& s = t;
9572
9573   we can extend the lifetime of the return value of the conversion
9574   operator.
9575
9576   The next several functions are involved in this lifetime extension.  */
9577
9578 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE.  The
9579    reference is being bound to a temporary.  Create and return a new
9580    VAR_DECL with the indicated TYPE; this variable will store the value to
9581    which the reference is bound.  */
9582
9583 tree
9584 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9585 {
9586   tree var;
9587
9588   /* Create the variable.  */
9589   var = create_temporary_var (type);
9590
9591   /* Register the variable.  */
9592   if (VAR_P (decl)
9593       && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9594     {
9595       /* Namespace-scope or local static; give it a mangled name.  */
9596       /* FIXME share comdat with decl?  */
9597       tree name;
9598
9599       TREE_STATIC (var) = TREE_STATIC (decl);
9600       set_decl_tls_model (var, DECL_TLS_MODEL (decl));
9601       name = mangle_ref_init_variable (decl);
9602       DECL_NAME (var) = name;
9603       SET_DECL_ASSEMBLER_NAME (var, name);
9604       var = pushdecl_top_level (var);
9605     }
9606   else
9607     /* Create a new cleanup level if necessary.  */
9608     maybe_push_cleanup_level (type);
9609
9610   return var;
9611 }
9612
9613 /* EXPR is the initializer for a variable DECL of reference or
9614    std::initializer_list type.  Create, push and return a new VAR_DECL
9615    for the initializer so that it will live as long as DECL.  Any
9616    cleanup for the new variable is returned through CLEANUP, and the
9617    code to initialize the new variable is returned through INITP.  */
9618
9619 static tree
9620 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9621                           tree *initp)
9622 {
9623   tree init;
9624   tree type;
9625   tree var;
9626
9627   /* Create the temporary variable.  */
9628   type = TREE_TYPE (expr);
9629   var = make_temporary_var_for_ref_to_temp (decl, type);
9630   layout_decl (var, 0);
9631   /* If the rvalue is the result of a function call it will be
9632      a TARGET_EXPR.  If it is some other construct (such as a
9633      member access expression where the underlying object is
9634      itself the result of a function call), turn it into a
9635      TARGET_EXPR here.  It is important that EXPR be a
9636      TARGET_EXPR below since otherwise the INIT_EXPR will
9637      attempt to make a bitwise copy of EXPR to initialize
9638      VAR.  */
9639   if (TREE_CODE (expr) != TARGET_EXPR)
9640     expr = get_target_expr (expr);
9641
9642   if (TREE_CODE (decl) == FIELD_DECL
9643       && extra_warnings && !TREE_NO_WARNING (decl))
9644     {
9645       warning (OPT_Wextra, "a temporary bound to %qD only persists "
9646                "until the constructor exits", decl);
9647       TREE_NO_WARNING (decl) = true;
9648     }
9649
9650   /* Recursively extend temps in this initializer.  */
9651   TARGET_EXPR_INITIAL (expr)
9652     = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9653
9654   /* Any reference temp has a non-trivial initializer.  */
9655   DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9656
9657   /* If the initializer is constant, put it in DECL_INITIAL so we get
9658      static initialization and use in constant expressions.  */
9659   init = maybe_constant_init (expr);
9660   if (TREE_CONSTANT (init))
9661     {
9662       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9663         {
9664           /* 5.19 says that a constant expression can include an
9665              lvalue-rvalue conversion applied to "a glvalue of literal type
9666              that refers to a non-volatile temporary object initialized
9667              with a constant expression".  Rather than try to communicate
9668              that this VAR_DECL is a temporary, just mark it constexpr.
9669
9670              Currently this is only useful for initializer_list temporaries,
9671              since reference vars can't appear in constant expressions.  */
9672           DECL_DECLARED_CONSTEXPR_P (var) = true;
9673           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9674           TREE_CONSTANT (var) = true;
9675         }
9676       DECL_INITIAL (var) = init;
9677       init = NULL_TREE;
9678     }
9679   else
9680     /* Create the INIT_EXPR that will initialize the temporary
9681        variable.  */
9682     init = split_nonconstant_init (var, expr);
9683   if (at_function_scope_p ())
9684     {
9685       add_decl_expr (var);
9686
9687       if (TREE_STATIC (var))
9688         init = add_stmt_to_compound (init, register_dtor_fn (var));
9689       else
9690         {
9691           tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9692           if (cleanup)
9693             vec_safe_push (*cleanups, cleanup);
9694         }
9695
9696       /* We must be careful to destroy the temporary only
9697          after its initialization has taken place.  If the
9698          initialization throws an exception, then the
9699          destructor should not be run.  We cannot simply
9700          transform INIT into something like:
9701
9702          (INIT, ({ CLEANUP_STMT; }))
9703
9704          because emit_local_var always treats the
9705          initializer as a full-expression.  Thus, the
9706          destructor would run too early; it would run at the
9707          end of initializing the reference variable, rather
9708          than at the end of the block enclosing the
9709          reference variable.
9710
9711          The solution is to pass back a cleanup expression
9712          which the caller is responsible for attaching to
9713          the statement tree.  */
9714     }
9715   else
9716     {
9717       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9718       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9719         {
9720           if (DECL_THREAD_LOCAL_P (var))
9721             tls_aggregates = tree_cons (NULL_TREE, var,
9722                                         tls_aggregates);
9723           else
9724             static_aggregates = tree_cons (NULL_TREE, var,
9725                                            static_aggregates);
9726         }
9727       else
9728         /* Check whether the dtor is callable.  */
9729         cxx_maybe_build_cleanup (var, tf_warning_or_error);
9730     }
9731   /* Avoid -Wunused-variable warning (c++/38958).  */
9732   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
9733       && TREE_CODE (decl) == VAR_DECL)
9734     TREE_USED (decl) = DECL_READ_P (decl) = true;
9735
9736   *initp = init;
9737   return var;
9738 }
9739
9740 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9741    initializing a variable of that TYPE.  */
9742
9743 tree
9744 initialize_reference (tree type, tree expr,
9745                       int flags, tsubst_flags_t complain)
9746 {
9747   conversion *conv;
9748   void *p;
9749   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9750
9751   if (type == error_mark_node || error_operand_p (expr))
9752     return error_mark_node;
9753
9754   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9755   p = conversion_obstack_alloc (0);
9756
9757   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9758                             flags, complain);
9759   if (!conv || conv->bad_p)
9760     {
9761       if (complain & tf_error)
9762         {
9763           if (conv)
9764             convert_like (conv, expr, complain);
9765           else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9766                    && !TYPE_REF_IS_RVALUE (type)
9767                    && !real_lvalue_p (expr))
9768             error_at (loc, "invalid initialization of non-const reference of "
9769                       "type %qT from an rvalue of type %qT",
9770                       type, TREE_TYPE (expr));
9771           else
9772             error_at (loc, "invalid initialization of reference of type "
9773                       "%qT from expression of type %qT", type,
9774                       TREE_TYPE (expr));
9775         }
9776       return error_mark_node;
9777     }
9778
9779   if (conv->kind == ck_ref_bind)
9780     /* Perform the conversion.  */
9781     expr = convert_like (conv, expr, complain);
9782   else if (conv->kind == ck_ambig)
9783     /* We gave an error in build_user_type_conversion_1.  */
9784     expr = error_mark_node;
9785   else
9786     gcc_unreachable ();
9787
9788   /* Free all the conversions we allocated.  */
9789   obstack_free (&conversion_obstack, p);
9790
9791   return expr;
9792 }
9793
9794 /* Subroutine of extend_ref_init_temps.  Possibly extend one initializer,
9795    which is bound either to a reference or a std::initializer_list.  */
9796
9797 static tree
9798 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9799 {
9800   tree sub = init;
9801   tree *p;
9802   STRIP_NOPS (sub);
9803   if (TREE_CODE (sub) == COMPOUND_EXPR)
9804     {
9805       TREE_OPERAND (sub, 1)
9806         = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9807       return init;
9808     }
9809   if (TREE_CODE (sub) != ADDR_EXPR)
9810     return init;
9811   /* Deal with binding to a subobject.  */
9812   for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9813     p = &TREE_OPERAND (*p, 0);
9814   if (TREE_CODE (*p) == TARGET_EXPR)
9815     {
9816       tree subinit = NULL_TREE;
9817       *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9818       recompute_tree_invariant_for_addr_expr (sub);
9819       if (init != sub)
9820         init = fold_convert (TREE_TYPE (init), sub);
9821       if (subinit)
9822         init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9823     }
9824   return init;
9825 }
9826
9827 /* INIT is part of the initializer for DECL.  If there are any
9828    reference or initializer lists being initialized, extend their
9829    lifetime to match that of DECL.  */
9830
9831 tree
9832 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9833 {
9834   tree type = TREE_TYPE (init);
9835   if (processing_template_decl)
9836     return init;
9837   if (TREE_CODE (type) == REFERENCE_TYPE)
9838     init = extend_ref_init_temps_1 (decl, init, cleanups);
9839   else if (is_std_init_list (type))
9840     {
9841       /* The temporary array underlying a std::initializer_list
9842          is handled like a reference temporary.  */
9843       tree ctor = init;
9844       if (TREE_CODE (ctor) == TARGET_EXPR)
9845         ctor = TARGET_EXPR_INITIAL (ctor);
9846       if (TREE_CODE (ctor) == CONSTRUCTOR)
9847         {
9848           tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9849           array = extend_ref_init_temps_1 (decl, array, cleanups);
9850           CONSTRUCTOR_ELT (ctor, 0)->value = array;
9851         }
9852     }
9853   else if (TREE_CODE (init) == CONSTRUCTOR)
9854     {
9855       unsigned i;
9856       constructor_elt *p;
9857       vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9858       FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9859         p->value = extend_ref_init_temps (decl, p->value, cleanups);
9860     }
9861
9862   return init;
9863 }
9864
9865 /* Returns true iff an initializer for TYPE could contain temporaries that
9866    need to be extended because they are bound to references or
9867    std::initializer_list.  */
9868
9869 bool
9870 type_has_extended_temps (tree type)
9871 {
9872   type = strip_array_types (type);
9873   if (TREE_CODE (type) == REFERENCE_TYPE)
9874     return true;
9875   if (CLASS_TYPE_P (type))
9876     {
9877       if (is_std_init_list (type))
9878         return true;
9879       for (tree f = next_initializable_field (TYPE_FIELDS (type));
9880            f; f = next_initializable_field (DECL_CHAIN (f)))
9881         if (type_has_extended_temps (TREE_TYPE (f)))
9882           return true;
9883     }
9884   return false;
9885 }
9886
9887 /* Returns true iff TYPE is some variant of std::initializer_list.  */
9888
9889 bool
9890 is_std_init_list (tree type)
9891 {
9892   /* Look through typedefs.  */
9893   if (!TYPE_P (type))
9894     return false;
9895   if (cxx_dialect == cxx98)
9896     return false;
9897   type = TYPE_MAIN_VARIANT (type);
9898   return (CLASS_TYPE_P (type)
9899           && CP_TYPE_CONTEXT (type) == std_node
9900           && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9901 }
9902
9903 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9904    will accept an argument list of a single std::initializer_list<T>.  */
9905
9906 bool
9907 is_list_ctor (tree decl)
9908 {
9909   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9910   tree arg;
9911
9912   if (!args || args == void_list_node)
9913     return false;
9914
9915   arg = non_reference (TREE_VALUE (args));
9916   if (!is_std_init_list (arg))
9917     return false;
9918
9919   args = TREE_CHAIN (args);
9920
9921   if (args && args != void_list_node && !TREE_PURPOSE (args))
9922     /* There are more non-defaulted parms.  */
9923     return false;
9924
9925   return true;
9926 }
9927
9928 #include "gt-cp-call.h"