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