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