OSDN Git Service

PR c++/42115
[pf3gnuchains/gcc-fork.git] / gcc / cp / call.c
1 /* Functions related to invoking methods and overloaded functions.
2    Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5    Contributed by Michael Tiemann (tiemann@cygnus.com) and
6    modified by Brendan Kehoe (brendan@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24
25 /* High-level class interface.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "output.h"
34 #include "flags.h"
35 #include "rtl.h"
36 #include "toplev.h"
37 #include "expr.h"
38 #include "diagnostic.h"
39 #include "intl.h"
40 #include "target.h"
41 #include "convert.h"
42 #include "langhooks.h"
43
44 /* The various kinds of conversion.  */
45
46 typedef enum conversion_kind {
47   ck_identity,
48   ck_lvalue,
49   ck_qual,
50   ck_std,
51   ck_ptr,
52   ck_pmem,
53   ck_base,
54   ck_ref_bind,
55   ck_user,
56   ck_ambig,
57   ck_list,
58   ck_aggr,
59   ck_rvalue
60 } conversion_kind;
61
62 /* The rank of the conversion.  Order of the enumerals matters; better
63    conversions should come earlier in the list.  */
64
65 typedef enum conversion_rank {
66   cr_identity,
67   cr_exact,
68   cr_promotion,
69   cr_std,
70   cr_pbool,
71   cr_user,
72   cr_ellipsis,
73   cr_bad
74 } conversion_rank;
75
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77    The first conversion to be performed is at the end of the chain.
78    That conversion is always a cr_identity conversion.  */
79
80 typedef struct conversion conversion;
81 struct conversion {
82   /* The kind of conversion represented by this step.  */
83   conversion_kind kind;
84   /* The rank of this conversion.  */
85   conversion_rank rank;
86   BOOL_BITFIELD user_conv_p : 1;
87   BOOL_BITFIELD ellipsis_p : 1;
88   BOOL_BITFIELD this_p : 1;
89   BOOL_BITFIELD bad_p : 1;
90   /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
91      temporary should be created to hold the result of the
92      conversion.  */
93   BOOL_BITFIELD need_temporary_p : 1;
94   /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
95      from a pointer-to-derived to pointer-to-base is being performed.  */
96   BOOL_BITFIELD base_p : 1;
97   /* If KIND is ck_ref_bind, true when either an lvalue reference is
98      being bound to an lvalue expression or an rvalue reference is
99      being bound to an rvalue expression. */
100   BOOL_BITFIELD rvaluedness_matches_p: 1;
101   BOOL_BITFIELD check_narrowing: 1;
102   /* The type of the expression resulting from the conversion.  */
103   tree type;
104   union {
105     /* The next conversion in the chain.  Since the conversions are
106        arranged from outermost to innermost, the NEXT conversion will
107        actually be performed before this conversion.  This variant is
108        used only when KIND is neither ck_identity nor ck_ambig.  */
109     conversion *next;
110     /* The expression at the beginning of the conversion chain.  This
111        variant is used only if KIND is ck_identity or ck_ambig.  */
112     tree expr;
113     /* The array of conversions for an initializer_list.  */
114     conversion **list;
115   } u;
116   /* The function candidate corresponding to this conversion
117      sequence.  This field is only used if KIND is ck_user.  */
118   struct z_candidate *cand;
119 };
120
121 #define CONVERSION_RANK(NODE)                   \
122   ((NODE)->bad_p ? cr_bad                       \
123    : (NODE)->ellipsis_p ? cr_ellipsis           \
124    : (NODE)->user_conv_p ? cr_user              \
125    : (NODE)->rank)
126
127 static struct obstack conversion_obstack;
128 static bool conversion_obstack_initialized;
129
130 static struct z_candidate * tourney (struct z_candidate *);
131 static int equal_functions (tree, tree);
132 static int joust (struct z_candidate *, struct z_candidate *, bool);
133 static int compare_ics (conversion *, conversion *);
134 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
135 static tree build_java_interface_fn_ref (tree, tree);
136 #define convert_like(CONV, EXPR, COMPLAIN)                      \
137   convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0,           \
138                      /*issue_conversion_warnings=*/true,        \
139                      /*c_cast_p=*/false, (COMPLAIN))
140 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN )     \
141   convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0,                  \
142                      /*issue_conversion_warnings=*/true,                \
143                      /*c_cast_p=*/false, (COMPLAIN))
144 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
145                                bool, tsubst_flags_t);
146 static void op_error (enum tree_code, enum tree_code, tree, tree,
147                       tree, const char *);
148 static VEC(tree,gc) *resolve_args (VEC(tree,gc) *);
149 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
150 static void print_z_candidate (const char *, struct z_candidate *);
151 static void print_z_candidates (struct z_candidate *);
152 static tree build_this (tree);
153 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
154 static bool any_strictly_viable (struct z_candidate *);
155 static struct z_candidate *add_template_candidate
156         (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
157          tree, tree, tree, int, unification_kind_t);
158 static struct z_candidate *add_template_candidate_real
159         (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
160          tree, tree, tree, int, tree, unification_kind_t);
161 static struct z_candidate *add_template_conv_candidate
162         (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
163          tree, tree);
164 static void add_builtin_candidates
165         (struct z_candidate **, enum tree_code, enum tree_code,
166          tree, tree *, int);
167 static void add_builtin_candidate
168         (struct z_candidate **, enum tree_code, enum tree_code,
169          tree, tree, tree, tree *, tree *, int);
170 static bool is_complete (tree);
171 static void build_builtin_candidate
172         (struct z_candidate **, tree, tree, tree, tree *, tree *,
173          int);
174 static struct z_candidate *add_conv_candidate
175         (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
176          tree);
177 static struct z_candidate *add_function_candidate
178         (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
179          tree, int);
180 static conversion *implicit_conversion (tree, tree, tree, bool, int);
181 static conversion *standard_conversion (tree, tree, tree, bool, int);
182 static conversion *reference_binding (tree, tree, tree, bool, int);
183 static conversion *build_conv (conversion_kind, tree, conversion *);
184 static conversion *build_list_conv (tree, tree, int);
185 static bool is_subseq (conversion *, conversion *);
186 static conversion *maybe_handle_ref_bind (conversion **);
187 static void maybe_handle_implicit_object (conversion **);
188 static struct z_candidate *add_candidate
189         (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
190          conversion **, tree, tree, int);
191 static tree source_type (conversion *);
192 static void add_warning (struct z_candidate *, struct z_candidate *);
193 static bool reference_compatible_p (tree, tree);
194 static conversion *convert_class_to_reference (tree, tree, tree, int);
195 static conversion *direct_reference_binding (tree, conversion *);
196 static bool promoted_arithmetic_type_p (tree);
197 static conversion *conditional_conversion (tree, tree);
198 static char *name_as_c_string (tree, tree, bool *);
199 static tree prep_operand (tree);
200 static void add_candidates (tree, const VEC(tree,gc) *, tree, bool, tree, tree,
201                             int, struct z_candidate **);
202 static conversion *merge_conversion_sequences (conversion *, conversion *);
203 static bool magic_varargs_p (tree);
204 static tree build_temp (tree, tree, int, diagnostic_t *);
205
206 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
207    NAME can take many forms...  */
208
209 bool
210 check_dtor_name (tree basetype, tree name)
211 {
212   /* Just accept something we've already complained about.  */
213   if (name == error_mark_node)
214     return true;
215
216   if (TREE_CODE (name) == TYPE_DECL)
217     name = TREE_TYPE (name);
218   else if (TYPE_P (name))
219     /* OK */;
220   else if (TREE_CODE (name) == IDENTIFIER_NODE)
221     {
222       if ((MAYBE_CLASS_TYPE_P (basetype)
223            && name == constructor_name (basetype))
224           || (TREE_CODE (basetype) == ENUMERAL_TYPE
225               && name == TYPE_IDENTIFIER (basetype)))
226         return true;
227       else
228         name = get_type_value (name);
229     }
230   else
231     {
232       /* In the case of:
233
234          template <class T> struct S { ~S(); };
235          int i;
236          i.~S();
237
238          NAME will be a class template.  */
239       gcc_assert (DECL_CLASS_TEMPLATE_P (name));
240       return false;
241     }
242
243   if (!name || name == error_mark_node)
244     return false;
245   return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
246 }
247
248 /* We want the address of a function or method.  We avoid creating a
249    pointer-to-member function.  */
250
251 tree
252 build_addr_func (tree function)
253 {
254   tree type = TREE_TYPE (function);
255
256   /* We have to do these by hand to avoid real pointer to member
257      functions.  */
258   if (TREE_CODE (type) == METHOD_TYPE)
259     {
260       if (TREE_CODE (function) == OFFSET_REF)
261         {
262           tree object = build_address (TREE_OPERAND (function, 0));
263           return get_member_function_from_ptrfunc (&object,
264                                                    TREE_OPERAND (function, 1));
265         }
266       function = build_address (function);
267     }
268   else
269     function = decay_conversion (function);
270
271   return function;
272 }
273
274 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
275    POINTER_TYPE to those.  Note, pointer to member function types
276    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  There are
277    two variants.  build_call_a is the primitive taking an array of
278    arguments, while build_call_n is a wrapper that handles varargs.  */
279
280 tree
281 build_call_n (tree function, int n, ...)
282 {
283   if (n == 0)
284     return build_call_a (function, 0, NULL);
285   else
286     {
287       tree *argarray = (tree *) alloca (n * sizeof (tree));
288       va_list ap;
289       int i;
290
291       va_start (ap, n);
292       for (i = 0; i < n; i++)
293         argarray[i] = va_arg (ap, tree);
294       va_end (ap);
295       return build_call_a (function, n, argarray);
296     }
297 }
298
299 tree
300 build_call_a (tree function, int n, tree *argarray)
301 {
302   int is_constructor = 0;
303   int nothrow;
304   tree decl;
305   tree result_type;
306   tree fntype;
307   int i;
308
309   function = build_addr_func (function);
310
311   gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
312   fntype = TREE_TYPE (TREE_TYPE (function));
313   gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
314               || TREE_CODE (fntype) == METHOD_TYPE);
315   result_type = TREE_TYPE (fntype);
316   /* An rvalue has no cv-qualifiers.  */
317   if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
318     result_type = cv_unqualified (result_type);
319
320   if (TREE_CODE (function) == ADDR_EXPR
321       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
322     {
323       decl = TREE_OPERAND (function, 0);
324       if (!TREE_USED (decl))
325         {
326           /* We invoke build_call directly for several library
327              functions.  These may have been declared normally if
328              we're building libgcc, so we can't just check
329              DECL_ARTIFICIAL.  */
330           gcc_assert (DECL_ARTIFICIAL (decl)
331                       || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
332                                    "__", 2));
333           mark_used (decl);
334         }
335     }
336   else
337     decl = NULL_TREE;
338
339   /* We check both the decl and the type; a function may be known not to
340      throw without being declared throw().  */
341   nothrow = ((decl && TREE_NOTHROW (decl))
342              || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
343
344   if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
345     current_function_returns_abnormally = 1;
346
347   if (decl && TREE_DEPRECATED (decl))
348     warn_deprecated_use (decl, NULL_TREE);
349   require_complete_eh_spec_types (fntype, decl);
350
351   if (decl && DECL_CONSTRUCTOR_P (decl))
352     is_constructor = 1;
353
354   /* Don't pass empty class objects by value.  This is useful
355      for tags in STL, which are used to control overload resolution.
356      We don't need to handle other cases of copying empty classes.  */
357   if (! decl || ! DECL_BUILT_IN (decl))
358     for (i = 0; i < n; i++)
359       if (is_empty_class (TREE_TYPE (argarray[i]))
360           && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
361         {
362           tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
363           argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
364                                 argarray[i], t);
365         }
366
367   function = build_call_array_loc (input_location,
368                                    result_type, function, n, argarray);
369   TREE_HAS_CONSTRUCTOR (function) = is_constructor;
370   TREE_NOTHROW (function) = nothrow;
371
372   return function;
373 }
374
375 /* Build something of the form ptr->method (args)
376    or object.method (args).  This can also build
377    calls to constructors, and find friends.
378
379    Member functions always take their class variable
380    as a pointer.
381
382    INSTANCE is a class instance.
383
384    NAME is the name of the method desired, usually an IDENTIFIER_NODE.
385
386    PARMS help to figure out what that NAME really refers to.
387
388    BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
389    down to the real instance type to use for access checking.  We need this
390    information to get protected accesses correct.
391
392    FLAGS is the logical disjunction of zero or more LOOKUP_
393    flags.  See cp-tree.h for more info.
394
395    If this is all OK, calls build_function_call with the resolved
396    member function.
397
398    This function must also handle being called to perform
399    initialization, promotion/coercion of arguments, and
400    instantiation of default parameters.
401
402    Note that NAME may refer to an instance variable name.  If
403    `operator()()' is defined for the type of that field, then we return
404    that result.  */
405
406 /* New overloading code.  */
407
408 typedef struct z_candidate z_candidate;
409
410 typedef struct candidate_warning candidate_warning;
411 struct candidate_warning {
412   z_candidate *loser;
413   candidate_warning *next;
414 };
415
416 struct z_candidate {
417   /* The FUNCTION_DECL that will be called if this candidate is
418      selected by overload resolution.  */
419   tree fn;
420   /* If not NULL_TREE, the first argument to use when calling this
421      function.  */
422   tree first_arg;
423   /* The rest of the arguments to use when calling this function.  If
424      there are no further arguments this may be NULL or it may be an
425      empty vector.  */
426   const VEC(tree,gc) *args;
427   /* The implicit conversion sequences for each of the arguments to
428      FN.  */
429   conversion **convs;
430   /* The number of implicit conversion sequences.  */
431   size_t num_convs;
432   /* If FN is a user-defined conversion, the standard conversion
433      sequence from the type returned by FN to the desired destination
434      type.  */
435   conversion *second_conv;
436   int viable;
437   /* If FN is a member function, the binfo indicating the path used to
438      qualify the name of FN at the call site.  This path is used to
439      determine whether or not FN is accessible if it is selected by
440      overload resolution.  The DECL_CONTEXT of FN will always be a
441      (possibly improper) base of this binfo.  */
442   tree access_path;
443   /* If FN is a non-static member function, the binfo indicating the
444      subobject to which the `this' pointer should be converted if FN
445      is selected by overload resolution.  The type pointed to the by
446      the `this' pointer must correspond to the most derived class
447      indicated by the CONVERSION_PATH.  */
448   tree conversion_path;
449   tree template_decl;
450   candidate_warning *warnings;
451   z_candidate *next;
452 };
453
454 /* Returns true iff T is a null pointer constant in the sense of
455    [conv.ptr].  */
456
457 bool
458 null_ptr_cst_p (tree t)
459 {
460   /* [conv.ptr]
461
462      A null pointer constant is an integral constant expression
463      (_expr.const_) rvalue of integer type that evaluates to zero.  */
464   t = integral_constant_value (t);
465   if (t == null_node)
466     return true;
467   if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t))
468     {
469       STRIP_NOPS (t);
470       if (!TREE_OVERFLOW (t))
471         return true;
472     }
473   return false;
474 }
475
476 /* Returns nonzero if PARMLIST consists of only default parms and/or
477    ellipsis.  */
478
479 bool
480 sufficient_parms_p (const_tree parmlist)
481 {
482   for (; parmlist && parmlist != void_list_node;
483        parmlist = TREE_CHAIN (parmlist))
484     if (!TREE_PURPOSE (parmlist))
485       return false;
486   return true;
487 }
488
489 /* Allocate N bytes of memory from the conversion obstack.  The memory
490    is zeroed before being returned.  */
491
492 static void *
493 conversion_obstack_alloc (size_t n)
494 {
495   void *p;
496   if (!conversion_obstack_initialized)
497     {
498       gcc_obstack_init (&conversion_obstack);
499       conversion_obstack_initialized = true;
500     }
501   p = obstack_alloc (&conversion_obstack, n);
502   memset (p, 0, n);
503   return p;
504 }
505
506 /* Dynamically allocate a conversion.  */
507
508 static conversion *
509 alloc_conversion (conversion_kind kind)
510 {
511   conversion *c;
512   c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
513   c->kind = kind;
514   return c;
515 }
516
517 #ifdef ENABLE_CHECKING
518
519 /* Make sure that all memory on the conversion obstack has been
520    freed.  */
521
522 void
523 validate_conversion_obstack (void)
524 {
525   if (conversion_obstack_initialized)
526     gcc_assert ((obstack_next_free (&conversion_obstack)
527                  == obstack_base (&conversion_obstack)));
528 }
529
530 #endif /* ENABLE_CHECKING */
531
532 /* Dynamically allocate an array of N conversions.  */
533
534 static conversion **
535 alloc_conversions (size_t n)
536 {
537   return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
538 }
539
540 static conversion *
541 build_conv (conversion_kind code, tree type, conversion *from)
542 {
543   conversion *t;
544   conversion_rank rank = CONVERSION_RANK (from);
545
546   /* Note that the caller is responsible for filling in t->cand for
547      user-defined conversions.  */
548   t = alloc_conversion (code);
549   t->type = type;
550   t->u.next = from;
551
552   switch (code)
553     {
554     case ck_ptr:
555     case ck_pmem:
556     case ck_base:
557     case ck_std:
558       if (rank < cr_std)
559         rank = cr_std;
560       break;
561
562     case ck_qual:
563       if (rank < cr_exact)
564         rank = cr_exact;
565       break;
566
567     default:
568       break;
569     }
570   t->rank = rank;
571   t->user_conv_p = (code == ck_user || from->user_conv_p);
572   t->bad_p = from->bad_p;
573   t->base_p = false;
574   return t;
575 }
576
577 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
578    specialization of std::initializer_list<T>, if such a conversion is
579    possible.  */
580
581 static conversion *
582 build_list_conv (tree type, tree ctor, int flags)
583 {
584   tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
585   unsigned len = CONSTRUCTOR_NELTS (ctor);
586   conversion **subconvs = alloc_conversions (len);
587   conversion *t;
588   unsigned i;
589   tree val;
590
591   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
592     {
593       conversion *sub
594         = implicit_conversion (elttype, TREE_TYPE (val), val,
595                                false, flags);
596       if (sub == NULL)
597         return NULL;
598
599       subconvs[i] = sub;
600     }
601
602   t = alloc_conversion (ck_list);
603   t->type = type;
604   t->u.list = subconvs;
605   t->rank = cr_exact;
606
607   for (i = 0; i < len; ++i)
608     {
609       conversion *sub = subconvs[i];
610       if (sub->rank > t->rank)
611         t->rank = sub->rank;
612       if (sub->user_conv_p)
613         t->user_conv_p = true;
614       if (sub->bad_p)
615         t->bad_p = true;
616     }
617
618   return t;
619 }
620
621 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
622    aggregate class, if such a conversion is possible.  */
623
624 static conversion *
625 build_aggr_conv (tree type, tree ctor, int flags)
626 {
627   unsigned HOST_WIDE_INT i = 0;
628   conversion *c;
629   tree field = TYPE_FIELDS (type);
630
631   for (; field; field = TREE_CHAIN (field), ++i)
632     {
633       if (TREE_CODE (field) != FIELD_DECL)
634         continue;
635       if (i < CONSTRUCTOR_NELTS (ctor))
636         {
637           constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
638           if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
639                                 ce->value, flags))
640             return NULL;
641         }
642       else if (build_value_init (TREE_TYPE (field)) == error_mark_node)
643         return NULL;
644     }
645
646   c = alloc_conversion (ck_aggr);
647   c->type = type;
648   c->rank = cr_exact;
649   c->user_conv_p = true;
650   c->u.next = NULL;
651   return c;
652 }
653
654 /* Build a representation of the identity conversion from EXPR to
655    itself.  The TYPE should match the type of EXPR, if EXPR is non-NULL.  */
656
657 static conversion *
658 build_identity_conv (tree type, tree expr)
659 {
660   conversion *c;
661
662   c = alloc_conversion (ck_identity);
663   c->type = type;
664   c->u.expr = expr;
665
666   return c;
667 }
668
669 /* Converting from EXPR to TYPE was ambiguous in the sense that there
670    were multiple user-defined conversions to accomplish the job.
671    Build a conversion that indicates that ambiguity.  */
672
673 static conversion *
674 build_ambiguous_conv (tree type, tree expr)
675 {
676   conversion *c;
677
678   c = alloc_conversion (ck_ambig);
679   c->type = type;
680   c->u.expr = expr;
681
682   return c;
683 }
684
685 tree
686 strip_top_quals (tree t)
687 {
688   if (TREE_CODE (t) == ARRAY_TYPE)
689     return t;
690   return cp_build_qualified_type (t, 0);
691 }
692
693 /* Returns the standard conversion path (see [conv]) from type FROM to type
694    TO, if any.  For proper handling of null pointer constants, you must
695    also pass the expression EXPR to convert from.  If C_CAST_P is true,
696    this conversion is coming from a C-style cast.  */
697
698 static conversion *
699 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
700                      int flags)
701 {
702   enum tree_code fcode, tcode;
703   conversion *conv;
704   bool fromref = false;
705
706   to = non_reference (to);
707   if (TREE_CODE (from) == REFERENCE_TYPE)
708     {
709       fromref = true;
710       from = TREE_TYPE (from);
711     }
712   to = strip_top_quals (to);
713   from = strip_top_quals (from);
714
715   if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
716       && expr && type_unknown_p (expr))
717     {
718       tsubst_flags_t tflags = tf_conv;
719       if (!(flags & LOOKUP_PROTECT))
720         tflags |= tf_no_access_control;
721       expr = instantiate_type (to, expr, tflags);
722       if (expr == error_mark_node)
723         return NULL;
724       from = TREE_TYPE (expr);
725     }
726
727   fcode = TREE_CODE (from);
728   tcode = TREE_CODE (to);
729
730   conv = build_identity_conv (from, expr);
731   if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
732     {
733       from = type_decays_to (from);
734       fcode = TREE_CODE (from);
735       conv = build_conv (ck_lvalue, from, conv);
736     }
737   else if (fromref || (expr && lvalue_p (expr)))
738     {
739       if (expr)
740         {
741           tree bitfield_type;
742           bitfield_type = is_bitfield_expr_with_lowered_type (expr);
743           if (bitfield_type)
744             {
745               from = strip_top_quals (bitfield_type);
746               fcode = TREE_CODE (from);
747             }
748         }
749       conv = build_conv (ck_rvalue, from, conv);
750     }
751
752    /* Allow conversion between `__complex__' data types.  */
753   if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
754     {
755       /* The standard conversion sequence to convert FROM to TO is
756          the standard conversion sequence to perform componentwise
757          conversion.  */
758       conversion *part_conv = standard_conversion
759         (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
760
761       if (part_conv)
762         {
763           conv = build_conv (part_conv->kind, to, conv);
764           conv->rank = part_conv->rank;
765         }
766       else
767         conv = NULL;
768
769       return conv;
770     }
771
772   if (same_type_p (from, to))
773     return conv;
774
775   if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
776       && expr && null_ptr_cst_p (expr))
777     conv = build_conv (ck_std, to, conv);
778   else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
779            || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
780     {
781       /* For backwards brain damage compatibility, allow interconversion of
782          pointers and integers with a pedwarn.  */
783       conv = build_conv (ck_std, to, conv);
784       conv->bad_p = true;
785     }
786   else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
787     {
788       /* For backwards brain damage compatibility, allow interconversion of
789          enums and integers with a pedwarn.  */
790       conv = build_conv (ck_std, to, conv);
791       conv->bad_p = true;
792     }
793   else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
794            || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
795     {
796       tree to_pointee;
797       tree from_pointee;
798
799       if (tcode == POINTER_TYPE
800           && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
801                                                         TREE_TYPE (to)))
802         ;
803       else if (VOID_TYPE_P (TREE_TYPE (to))
804                && !TYPE_PTRMEM_P (from)
805                && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
806         {
807           from = build_pointer_type
808             (cp_build_qualified_type (void_type_node,
809                                       cp_type_quals (TREE_TYPE (from))));
810           conv = build_conv (ck_ptr, from, conv);
811         }
812       else if (TYPE_PTRMEM_P (from))
813         {
814           tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
815           tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
816
817           if (DERIVED_FROM_P (fbase, tbase)
818               && (same_type_ignoring_top_level_qualifiers_p
819                   (TYPE_PTRMEM_POINTED_TO_TYPE (from),
820                    TYPE_PTRMEM_POINTED_TO_TYPE (to))))
821             {
822               from = build_ptrmem_type (tbase,
823                                         TYPE_PTRMEM_POINTED_TO_TYPE (from));
824               conv = build_conv (ck_pmem, from, conv);
825             }
826           else if (!same_type_p (fbase, tbase))
827             return NULL;
828         }
829       else if (CLASS_TYPE_P (TREE_TYPE (from))
830                && CLASS_TYPE_P (TREE_TYPE (to))
831                /* [conv.ptr]
832
833                   An rvalue of type "pointer to cv D," where D is a
834                   class type, can be converted to an rvalue of type
835                   "pointer to cv B," where B is a base class (clause
836                   _class.derived_) of D.  If B is an inaccessible
837                   (clause _class.access_) or ambiguous
838                   (_class.member.lookup_) base class of D, a program
839                   that necessitates this conversion is ill-formed.
840                   Therefore, we use DERIVED_FROM_P, and do not check
841                   access or uniqueness.  */
842                && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
843         {
844           from =
845             cp_build_qualified_type (TREE_TYPE (to),
846                                      cp_type_quals (TREE_TYPE (from)));
847           from = build_pointer_type (from);
848           conv = build_conv (ck_ptr, from, conv);
849           conv->base_p = true;
850         }
851
852       if (tcode == POINTER_TYPE)
853         {
854           to_pointee = TREE_TYPE (to);
855           from_pointee = TREE_TYPE (from);
856         }
857       else
858         {
859           to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
860           from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
861         }
862
863       if (same_type_p (from, to))
864         /* OK */;
865       else if (c_cast_p && comp_ptr_ttypes_const (to, from))
866         /* In a C-style cast, we ignore CV-qualification because we
867            are allowed to perform a static_cast followed by a
868            const_cast.  */
869         conv = build_conv (ck_qual, to, conv);
870       else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
871         conv = build_conv (ck_qual, to, conv);
872       else if (expr && string_conv_p (to, expr, 0))
873         /* converting from string constant to char *.  */
874         conv = build_conv (ck_qual, to, conv);
875       else if (ptr_reasonably_similar (to_pointee, from_pointee))
876         {
877           conv = build_conv (ck_ptr, to, conv);
878           conv->bad_p = true;
879         }
880       else
881         return NULL;
882
883       from = to;
884     }
885   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
886     {
887       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
888       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
889       tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
890       tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
891
892       if (!DERIVED_FROM_P (fbase, tbase)
893           || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
894           || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
895                          TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
896           || cp_type_quals (fbase) != cp_type_quals (tbase))
897         return NULL;
898
899       from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
900       from = build_ptrmemfunc_type (build_pointer_type (from));
901       conv = build_conv (ck_pmem, from, conv);
902       conv->base_p = true;
903     }
904   else if (tcode == BOOLEAN_TYPE)
905     {
906       /* [conv.bool]
907
908           An rvalue of arithmetic, unscoped enumeration, pointer, or
909           pointer to member type can be converted to an rvalue of type
910           bool.  */
911       if (ARITHMETIC_TYPE_P (from)
912           || UNSCOPED_ENUM_P (from)
913           || fcode == POINTER_TYPE
914           || TYPE_PTR_TO_MEMBER_P (from))
915         {
916           conv = build_conv (ck_std, to, conv);
917           if (fcode == POINTER_TYPE
918               || TYPE_PTRMEM_P (from)
919               || (TYPE_PTRMEMFUNC_P (from)
920                   && conv->rank < cr_pbool))
921             conv->rank = cr_pbool;
922           return conv;
923         }
924
925       return NULL;
926     }
927   /* We don't check for ENUMERAL_TYPE here because there are no standard
928      conversions to enum type.  */
929   /* As an extension, allow conversion to complex type.  */
930   else if (ARITHMETIC_TYPE_P (to))
931     {
932       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
933           || SCOPED_ENUM_P (from))
934         return NULL;
935       conv = build_conv (ck_std, to, conv);
936
937       /* Give this a better rank if it's a promotion.  */
938       if (same_type_p (to, type_promotes_to (from))
939           && conv->u.next->rank <= cr_promotion)
940         conv->rank = cr_promotion;
941     }
942   else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
943            && vector_types_convertible_p (from, to, false))
944     return build_conv (ck_std, to, conv);
945   else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
946            && is_properly_derived_from (from, to))
947     {
948       if (conv->kind == ck_rvalue)
949         conv = conv->u.next;
950       conv = build_conv (ck_base, to, conv);
951       /* The derived-to-base conversion indicates the initialization
952          of a parameter with base type from an object of a derived
953          type.  A temporary object is created to hold the result of
954          the conversion unless we're binding directly to a reference.  */
955       conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
956     }
957   else
958     return NULL;
959
960   if (flags & LOOKUP_NO_NARROWING)
961     conv->check_narrowing = true;
962
963   return conv;
964 }
965
966 /* Returns nonzero if T1 is reference-related to T2.  */
967
968 bool
969 reference_related_p (tree t1, tree t2)
970 {
971   t1 = TYPE_MAIN_VARIANT (t1);
972   t2 = TYPE_MAIN_VARIANT (t2);
973
974   /* [dcl.init.ref]
975
976      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
977      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
978      of T2.  */
979   return (same_type_p (t1, t2)
980           || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
981               && DERIVED_FROM_P (t1, t2)));
982 }
983
984 /* Returns nonzero if T1 is reference-compatible with T2.  */
985
986 static bool
987 reference_compatible_p (tree t1, tree t2)
988 {
989   /* [dcl.init.ref]
990
991      "cv1 T1" is reference compatible with "cv2 T2" if T1 is
992      reference-related to T2 and cv1 is the same cv-qualification as,
993      or greater cv-qualification than, cv2.  */
994   return (reference_related_p (t1, t2)
995           && at_least_as_qualified_p (t1, t2));
996 }
997
998 /* Determine whether or not the EXPR (of class type S) can be
999    converted to T as in [over.match.ref].  */
1000
1001 static conversion *
1002 convert_class_to_reference (tree reference_type, tree s, tree expr, int flags)
1003 {
1004   tree conversions;
1005   tree first_arg;
1006   conversion *conv;
1007   tree t;
1008   struct z_candidate *candidates;
1009   struct z_candidate *cand;
1010   bool any_viable_p;
1011
1012   conversions = lookup_conversions (s);
1013   if (!conversions)
1014     return NULL;
1015
1016   /* [over.match.ref]
1017
1018      Assuming that "cv1 T" is the underlying type of the reference
1019      being initialized, and "cv S" is the type of the initializer
1020      expression, with S a class type, the candidate functions are
1021      selected as follows:
1022
1023      --The conversion functions of S and its base classes are
1024        considered.  Those that are not hidden within S and yield type
1025        "reference to cv2 T2", where "cv1 T" is reference-compatible
1026        (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1027
1028      The argument list has one argument, which is the initializer
1029      expression.  */
1030
1031   candidates = 0;
1032
1033   /* Conceptually, we should take the address of EXPR and put it in
1034      the argument list.  Unfortunately, however, that can result in
1035      error messages, which we should not issue now because we are just
1036      trying to find a conversion operator.  Therefore, we use NULL,
1037      cast to the appropriate type.  */
1038   first_arg = build_int_cst (build_pointer_type (s), 0);
1039
1040   t = TREE_TYPE (reference_type);
1041
1042   for (; conversions; conversions = TREE_CHAIN (conversions))
1043     {
1044       tree fns = TREE_VALUE (conversions);
1045
1046       for (; fns; fns = OVL_NEXT (fns))
1047         {
1048           tree f = OVL_CURRENT (fns);
1049           tree t2 = TREE_TYPE (TREE_TYPE (f));
1050
1051           if (DECL_NONCONVERTING_P (f)
1052               && (flags & LOOKUP_ONLYCONVERTING))
1053             continue;
1054
1055           cand = NULL;
1056
1057           /* If this is a template function, try to get an exact
1058              match.  */
1059           if (TREE_CODE (f) == TEMPLATE_DECL)
1060             {
1061               cand = add_template_candidate (&candidates,
1062                                              f, s,
1063                                              NULL_TREE,
1064                                              first_arg,
1065                                              NULL,
1066                                              reference_type,
1067                                              TYPE_BINFO (s),
1068                                              TREE_PURPOSE (conversions),
1069                                              LOOKUP_NORMAL,
1070                                              DEDUCE_CONV);
1071
1072               if (cand)
1073                 {
1074                   /* Now, see if the conversion function really returns
1075                      an lvalue of the appropriate type.  From the
1076                      point of view of unification, simply returning an
1077                      rvalue of the right type is good enough.  */
1078                   f = cand->fn;
1079                   t2 = TREE_TYPE (TREE_TYPE (f));
1080                   if (TREE_CODE (t2) != REFERENCE_TYPE
1081                       || !reference_compatible_p (t, TREE_TYPE (t2)))
1082                     {
1083                       candidates = candidates->next;
1084                       cand = NULL;
1085                     }
1086                 }
1087             }
1088           else if (TREE_CODE (t2) == REFERENCE_TYPE
1089                    && reference_compatible_p (t, TREE_TYPE (t2)))
1090             cand = add_function_candidate (&candidates, f, s, first_arg,
1091                                            NULL, TYPE_BINFO (s),
1092                                            TREE_PURPOSE (conversions),
1093                                            LOOKUP_NORMAL);
1094
1095           if (cand)
1096             {
1097               conversion *identity_conv;
1098               /* Build a standard conversion sequence indicating the
1099                  binding from the reference type returned by the
1100                  function to the desired REFERENCE_TYPE.  */
1101               identity_conv
1102                 = build_identity_conv (TREE_TYPE (TREE_TYPE
1103                                                   (TREE_TYPE (cand->fn))),
1104                                        NULL_TREE);
1105               cand->second_conv
1106                 = (direct_reference_binding
1107                    (reference_type, identity_conv));
1108               cand->second_conv->rvaluedness_matches_p
1109                 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1110                   == TYPE_REF_IS_RVALUE (reference_type);
1111               cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1112
1113               /* Don't allow binding of lvalues to rvalue references.  */
1114               if (TYPE_REF_IS_RVALUE (reference_type)
1115                   && !TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn))))
1116                 cand->second_conv->bad_p = true;
1117             }
1118         }
1119     }
1120
1121   candidates = splice_viable (candidates, pedantic, &any_viable_p);
1122   /* If none of the conversion functions worked out, let our caller
1123      know.  */
1124   if (!any_viable_p)
1125     return NULL;
1126
1127   cand = tourney (candidates);
1128   if (!cand)
1129     return NULL;
1130
1131   /* Now that we know that this is the function we're going to use fix
1132      the dummy first argument.  */
1133   gcc_assert (cand->first_arg == NULL_TREE
1134               || integer_zerop (cand->first_arg));
1135   cand->first_arg = build_this (expr);
1136
1137   /* Build a user-defined conversion sequence representing the
1138      conversion.  */
1139   conv = build_conv (ck_user,
1140                      TREE_TYPE (TREE_TYPE (cand->fn)),
1141                      build_identity_conv (TREE_TYPE (expr), expr));
1142   conv->cand = cand;
1143
1144   if (cand->viable == -1)
1145     conv->bad_p = true;
1146
1147   /* Merge it with the standard conversion sequence from the
1148      conversion function's return type to the desired type.  */
1149   cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1150
1151   return cand->second_conv;
1152 }
1153
1154 /* A reference of the indicated TYPE is being bound directly to the
1155    expression represented by the implicit conversion sequence CONV.
1156    Return a conversion sequence for this binding.  */
1157
1158 static conversion *
1159 direct_reference_binding (tree type, conversion *conv)
1160 {
1161   tree t;
1162
1163   gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1164   gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1165
1166   t = TREE_TYPE (type);
1167
1168   /* [over.ics.rank]
1169
1170      When a parameter of reference type binds directly
1171      (_dcl.init.ref_) to an argument expression, the implicit
1172      conversion sequence is the identity conversion, unless the
1173      argument expression has a type that is a derived class of the
1174      parameter type, in which case the implicit conversion sequence is
1175      a derived-to-base Conversion.
1176
1177      If the parameter binds directly to the result of applying a
1178      conversion function to the argument expression, the implicit
1179      conversion sequence is a user-defined conversion sequence
1180      (_over.ics.user_), with the second standard conversion sequence
1181      either an identity conversion or, if the conversion function
1182      returns an entity of a type that is a derived class of the
1183      parameter type, a derived-to-base conversion.  */
1184   if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1185     {
1186       /* Represent the derived-to-base conversion.  */
1187       conv = build_conv (ck_base, t, conv);
1188       /* We will actually be binding to the base-class subobject in
1189          the derived class, so we mark this conversion appropriately.
1190          That way, convert_like knows not to generate a temporary.  */
1191       conv->need_temporary_p = false;
1192     }
1193   return build_conv (ck_ref_bind, type, conv);
1194 }
1195
1196 /* Returns the conversion path from type FROM to reference type TO for
1197    purposes of reference binding.  For lvalue binding, either pass a
1198    reference type to FROM or an lvalue expression to EXPR.  If the
1199    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1200    the conversion returned.  If C_CAST_P is true, this
1201    conversion is coming from a C-style cast.  */
1202
1203 static conversion *
1204 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1205 {
1206   conversion *conv = NULL;
1207   tree to = TREE_TYPE (rto);
1208   tree from = rfrom;
1209   tree tfrom;
1210   bool related_p;
1211   bool compatible_p;
1212   cp_lvalue_kind is_lvalue = clk_none;
1213
1214   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1215     {
1216       expr = instantiate_type (to, expr, tf_none);
1217       if (expr == error_mark_node)
1218         return NULL;
1219       from = TREE_TYPE (expr);
1220     }
1221
1222   if (TREE_CODE (from) == REFERENCE_TYPE)
1223     {
1224       /* Anything with reference type is an lvalue.  */
1225       is_lvalue = clk_ordinary;
1226       from = TREE_TYPE (from);
1227     }
1228
1229   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1230     {
1231       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1232       conv = implicit_conversion (to, from, expr, c_cast_p,
1233                                   flags);
1234       if (!CLASS_TYPE_P (to)
1235           && CONSTRUCTOR_NELTS (expr) == 1)
1236         {
1237           expr = CONSTRUCTOR_ELT (expr, 0)->value;
1238           if (error_operand_p (expr))
1239             return NULL;
1240           from = TREE_TYPE (expr);
1241         }
1242     }
1243
1244   if (is_lvalue == clk_none && expr)
1245     is_lvalue = real_lvalue_p (expr);
1246
1247   tfrom = from;
1248   if ((is_lvalue & clk_bitfield) != 0)
1249     tfrom = unlowered_expr_type (expr);
1250
1251   /* Figure out whether or not the types are reference-related and
1252      reference compatible.  We have do do this after stripping
1253      references from FROM.  */
1254   related_p = reference_related_p (to, tfrom);
1255   /* If this is a C cast, first convert to an appropriately qualified
1256      type, so that we can later do a const_cast to the desired type.  */
1257   if (related_p && c_cast_p
1258       && !at_least_as_qualified_p (to, tfrom))
1259     to = build_qualified_type (to, cp_type_quals (tfrom));
1260   compatible_p = reference_compatible_p (to, tfrom);
1261
1262   /* Directly bind reference when target expression's type is compatible with
1263      the reference and expression is an lvalue. In DR391, the wording in
1264      [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1265      const and rvalue references to rvalues of compatible class type.
1266      We should also do direct bindings for non-class "rvalues" derived from
1267      rvalue references.  */
1268   if (compatible_p
1269       && (is_lvalue
1270           || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1271                 && !(flags & LOOKUP_NO_TEMP_BIND))
1272                || TYPE_REF_IS_RVALUE (rto))
1273               && (CLASS_TYPE_P (from) || (expr && lvalue_p (expr))))))
1274     {
1275       /* [dcl.init.ref]
1276
1277          If the initializer expression
1278
1279          -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1280             is reference-compatible with "cv2 T2,"
1281
1282          the reference is bound directly to the initializer expression
1283          lvalue.
1284
1285          [...]
1286          If the initializer expression is an rvalue, with T2 a class type,
1287          and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1288          is bound to the object represented by the rvalue or to a sub-object
1289          within that object.  */
1290
1291       conv = build_identity_conv (tfrom, expr);
1292       conv = direct_reference_binding (rto, conv);
1293
1294       if (flags & LOOKUP_PREFER_RVALUE)
1295         /* The top-level caller requested that we pretend that the lvalue
1296            be treated as an rvalue.  */
1297         conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1298       else
1299         conv->rvaluedness_matches_p 
1300           = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1301
1302       if ((is_lvalue & clk_bitfield) != 0
1303           || ((is_lvalue & clk_packed) != 0 && !TYPE_PACKED (to)))
1304         /* For the purposes of overload resolution, we ignore the fact
1305            this expression is a bitfield or packed field. (In particular,
1306            [over.ics.ref] says specifically that a function with a
1307            non-const reference parameter is viable even if the
1308            argument is a bitfield.)
1309
1310            However, when we actually call the function we must create
1311            a temporary to which to bind the reference.  If the
1312            reference is volatile, or isn't const, then we cannot make
1313            a temporary, so we just issue an error when the conversion
1314            actually occurs.  */
1315         conv->need_temporary_p = true;
1316
1317       /* Don't allow binding of lvalues to rvalue references.  */
1318       if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1319           && !(flags & LOOKUP_PREFER_RVALUE))
1320         conv->bad_p = true;
1321
1322       return conv;
1323     }
1324   /* [class.conv.fct] A conversion function is never used to convert a
1325      (possibly cv-qualified) object to the (possibly cv-qualified) same
1326      object type (or a reference to it), to a (possibly cv-qualified) base
1327      class of that type (or a reference to it).... */
1328   else if (CLASS_TYPE_P (from) && !related_p
1329            && !(flags & LOOKUP_NO_CONVERSION))
1330     {
1331       /* [dcl.init.ref]
1332
1333          If the initializer expression
1334
1335          -- has a class type (i.e., T2 is a class type) can be
1336             implicitly converted to an lvalue of type "cv3 T3," where
1337             "cv1 T1" is reference-compatible with "cv3 T3".  (this
1338             conversion is selected by enumerating the applicable
1339             conversion functions (_over.match.ref_) and choosing the
1340             best one through overload resolution.  (_over.match_).
1341
1342         the reference is bound to the lvalue result of the conversion
1343         in the second case.  */
1344       conv = convert_class_to_reference (rto, from, expr, flags);
1345       if (conv)
1346         return conv;
1347     }
1348
1349   /* From this point on, we conceptually need temporaries, even if we
1350      elide them.  Only the cases above are "direct bindings".  */
1351   if (flags & LOOKUP_NO_TEMP_BIND)
1352     return NULL;
1353
1354   /* [over.ics.rank]
1355
1356      When a parameter of reference type is not bound directly to an
1357      argument expression, the conversion sequence is the one required
1358      to convert the argument expression to the underlying type of the
1359      reference according to _over.best.ics_.  Conceptually, this
1360      conversion sequence corresponds to copy-initializing a temporary
1361      of the underlying type with the argument expression.  Any
1362      difference in top-level cv-qualification is subsumed by the
1363      initialization itself and does not constitute a conversion.  */
1364
1365   /* [dcl.init.ref]
1366
1367      Otherwise, the reference shall be to a non-volatile const type.
1368
1369      Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1370   if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1371     return NULL;
1372
1373   /* [dcl.init.ref]
1374
1375      Otherwise, a temporary of type "cv1 T1" is created and
1376      initialized from the initializer expression using the rules for a
1377      non-reference copy initialization.  If T1 is reference-related to
1378      T2, cv1 must be the same cv-qualification as, or greater
1379      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1380   if (related_p && !at_least_as_qualified_p (to, from))
1381     return NULL;
1382
1383   /* We're generating a temporary now, but don't bind any more in the
1384      conversion (specifically, don't slice the temporary returned by a
1385      conversion operator).  */
1386   flags |= LOOKUP_NO_TEMP_BIND;
1387
1388   /* Temporaries are copy-initialized, except for this hack to allow
1389      explicit conversion ops to the copy ctor.  See also
1390      add_function_candidate.  */
1391   if (!(flags & LOOKUP_COPY_PARM))
1392     flags |= LOOKUP_ONLYCONVERTING;
1393
1394   if (!conv)
1395     conv = implicit_conversion (to, from, expr, c_cast_p,
1396                                 flags);
1397   if (!conv)
1398     return NULL;
1399
1400   conv = build_conv (ck_ref_bind, rto, conv);
1401   /* This reference binding, unlike those above, requires the
1402      creation of a temporary.  */
1403   conv->need_temporary_p = true;
1404   conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1405
1406   return conv;
1407 }
1408
1409 /* Returns the implicit conversion sequence (see [over.ics]) from type
1410    FROM to type TO.  The optional expression EXPR may affect the
1411    conversion.  FLAGS are the usual overloading flags.  If C_CAST_P is
1412    true, this conversion is coming from a C-style cast.  */
1413
1414 static conversion *
1415 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1416                      int flags)
1417 {
1418   conversion *conv;
1419
1420   if (from == error_mark_node || to == error_mark_node
1421       || expr == error_mark_node)
1422     return NULL;
1423
1424   if (TREE_CODE (to) == REFERENCE_TYPE)
1425     conv = reference_binding (to, from, expr, c_cast_p, flags);
1426   else
1427     conv = standard_conversion (to, from, expr, c_cast_p, flags);
1428
1429   if (conv)
1430     return conv;
1431
1432   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1433     {
1434       if (is_std_init_list (to))
1435         return build_list_conv (to, expr, flags);
1436
1437       /* Allow conversion from an initializer-list with one element to a
1438          scalar type.  */
1439       if (SCALAR_TYPE_P (to))
1440         {
1441           int nelts = CONSTRUCTOR_NELTS (expr);
1442           tree elt;
1443
1444           if (nelts == 0)
1445             elt = integer_zero_node;
1446           else if (nelts == 1)
1447             elt = CONSTRUCTOR_ELT (expr, 0)->value;
1448           else
1449             elt = error_mark_node;
1450
1451           conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1452                                       c_cast_p, flags);
1453           if (conv)
1454             {
1455               conv->check_narrowing = true;
1456               if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1457                 /* Too many levels of braces, i.e. '{{1}}'.  */
1458                 conv->bad_p = true;
1459               return conv;
1460             }
1461         }
1462     }
1463
1464   if (expr != NULL_TREE
1465       && (MAYBE_CLASS_TYPE_P (from)
1466           || MAYBE_CLASS_TYPE_P (to))
1467       && (flags & LOOKUP_NO_CONVERSION) == 0)
1468     {
1469       struct z_candidate *cand;
1470       int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING));
1471
1472       if (CLASS_TYPE_P (to)
1473           && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1474           && BRACE_ENCLOSED_INITIALIZER_P (expr))
1475         return build_aggr_conv (to, expr, flags);
1476
1477       cand = build_user_type_conversion_1 (to, expr, convflags);
1478       if (cand)
1479         conv = cand->second_conv;
1480
1481       /* We used to try to bind a reference to a temporary here, but that
1482          is now handled after the recursive call to this function at the end
1483          of reference_binding.  */
1484       return conv;
1485     }
1486
1487   return NULL;
1488 }
1489
1490 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1491    functions.  ARGS will not be changed until a single candidate is
1492    selected.  */
1493
1494 static struct z_candidate *
1495 add_candidate (struct z_candidate **candidates,
1496                tree fn, tree first_arg, const VEC(tree,gc) *args,
1497                size_t num_convs, conversion **convs,
1498                tree access_path, tree conversion_path,
1499                int viable)
1500 {
1501   struct z_candidate *cand = (struct z_candidate *)
1502     conversion_obstack_alloc (sizeof (struct z_candidate));
1503
1504   cand->fn = fn;
1505   cand->first_arg = first_arg;
1506   cand->args = args;
1507   cand->convs = convs;
1508   cand->num_convs = num_convs;
1509   cand->access_path = access_path;
1510   cand->conversion_path = conversion_path;
1511   cand->viable = viable;
1512   cand->next = *candidates;
1513   *candidates = cand;
1514
1515   return cand;
1516 }
1517
1518 /* Create an overload candidate for the function or method FN called
1519    with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1520    FLAGS is passed on to implicit_conversion.
1521
1522    This does not change ARGS.
1523
1524    CTYPE, if non-NULL, is the type we want to pretend this function
1525    comes from for purposes of overload resolution.  */
1526
1527 static struct z_candidate *
1528 add_function_candidate (struct z_candidate **candidates,
1529                         tree fn, tree ctype, tree first_arg,
1530                         const VEC(tree,gc) *args, tree access_path,
1531                         tree conversion_path, int flags)
1532 {
1533   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1534   int i, len;
1535   conversion **convs;
1536   tree parmnode;
1537   tree orig_first_arg = first_arg;
1538   int skip;
1539   int viable = 1;
1540
1541   /* At this point we should not see any functions which haven't been
1542      explicitly declared, except for friend functions which will have
1543      been found using argument dependent lookup.  */
1544   gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1545
1546   /* The `this', `in_chrg' and VTT arguments to constructors are not
1547      considered in overload resolution.  */
1548   if (DECL_CONSTRUCTOR_P (fn))
1549     {
1550       parmlist = skip_artificial_parms_for (fn, parmlist);
1551       skip = num_artificial_parms_for (fn);
1552       if (skip > 0 && first_arg != NULL_TREE)
1553         {
1554           --skip;
1555           first_arg = NULL_TREE;
1556         }
1557     }
1558   else
1559     skip = 0;
1560
1561   len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1562   convs = alloc_conversions (len);
1563
1564   /* 13.3.2 - Viable functions [over.match.viable]
1565      First, to be a viable function, a candidate function shall have enough
1566      parameters to agree in number with the arguments in the list.
1567
1568      We need to check this first; otherwise, checking the ICSes might cause
1569      us to produce an ill-formed template instantiation.  */
1570
1571   parmnode = parmlist;
1572   for (i = 0; i < len; ++i)
1573     {
1574       if (parmnode == NULL_TREE || parmnode == void_list_node)
1575         break;
1576       parmnode = TREE_CHAIN (parmnode);
1577     }
1578
1579   if (i < len && parmnode)
1580     viable = 0;
1581
1582   /* Make sure there are default args for the rest of the parms.  */
1583   else if (!sufficient_parms_p (parmnode))
1584     viable = 0;
1585
1586   if (! viable)
1587     goto out;
1588
1589   /* Second, for F to be a viable function, there shall exist for each
1590      argument an implicit conversion sequence that converts that argument
1591      to the corresponding parameter of F.  */
1592
1593   parmnode = parmlist;
1594
1595   for (i = 0; i < len; ++i)
1596     {
1597       tree arg, argtype;
1598       conversion *t;
1599       int is_this;
1600
1601       if (parmnode == void_list_node)
1602         break;
1603
1604       if (i == 0 && first_arg != NULL_TREE)
1605         arg = first_arg;
1606       else
1607         arg = VEC_index (tree, args,
1608                          i + skip - (first_arg != NULL_TREE ? 1 : 0));
1609       argtype = lvalue_type (arg);
1610
1611       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1612                  && ! DECL_CONSTRUCTOR_P (fn));
1613
1614       if (parmnode)
1615         {
1616           tree parmtype = TREE_VALUE (parmnode);
1617           int lflags = flags;
1618
1619           /* The type of the implicit object parameter ('this') for
1620              overload resolution is not always the same as for the
1621              function itself; conversion functions are considered to
1622              be members of the class being converted, and functions
1623              introduced by a using-declaration are considered to be
1624              members of the class that uses them.
1625
1626              Since build_over_call ignores the ICS for the `this'
1627              parameter, we can just change the parm type.  */
1628           if (ctype && is_this)
1629             {
1630               parmtype
1631                 = build_qualified_type (ctype,
1632                                         TYPE_QUALS (TREE_TYPE (parmtype)));
1633               parmtype = build_pointer_type (parmtype);
1634             }
1635
1636           if (ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn)
1637               && (len-skip == 1))
1638             {
1639               /* Hack: Direct-initialize copy parm (i.e. suppress
1640                  LOOKUP_ONLYCONVERTING) to make explicit conversion ops
1641                  work.  See also reference_binding.  */
1642               lflags |= LOOKUP_COPY_PARM;
1643               if (flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1644                 lflags |= LOOKUP_NO_CONVERSION;
1645             }
1646           else
1647             lflags |= LOOKUP_ONLYCONVERTING;
1648
1649           t = implicit_conversion (parmtype, argtype, arg,
1650                                    /*c_cast_p=*/false, lflags);
1651         }
1652       else
1653         {
1654           t = build_identity_conv (argtype, arg);
1655           t->ellipsis_p = true;
1656         }
1657
1658       if (t && is_this)
1659         t->this_p = true;
1660
1661       convs[i] = t;
1662       if (! t)
1663         {
1664           viable = 0;
1665           break;
1666         }
1667
1668       if (t->bad_p)
1669         viable = -1;
1670
1671       if (parmnode)
1672         parmnode = TREE_CHAIN (parmnode);
1673     }
1674
1675  out:
1676   return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
1677                         access_path, conversion_path, viable);
1678 }
1679
1680 /* Create an overload candidate for the conversion function FN which will
1681    be invoked for expression OBJ, producing a pointer-to-function which
1682    will in turn be called with the argument list FIRST_ARG/ARGLIST,
1683    and add it to CANDIDATES.  This does not change ARGLIST.  FLAGS is
1684    passed on to implicit_conversion.
1685
1686    Actually, we don't really care about FN; we care about the type it
1687    converts to.  There may be multiple conversion functions that will
1688    convert to that type, and we rely on build_user_type_conversion_1 to
1689    choose the best one; so when we create our candidate, we record the type
1690    instead of the function.  */
1691
1692 static struct z_candidate *
1693 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1694                     tree first_arg, const VEC(tree,gc) *arglist,
1695                     tree access_path, tree conversion_path)
1696 {
1697   tree totype = TREE_TYPE (TREE_TYPE (fn));
1698   int i, len, viable, flags;
1699   tree parmlist, parmnode;
1700   conversion **convs;
1701
1702   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1703     parmlist = TREE_TYPE (parmlist);
1704   parmlist = TYPE_ARG_TYPES (parmlist);
1705
1706   len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
1707   convs = alloc_conversions (len);
1708   parmnode = parmlist;
1709   viable = 1;
1710   flags = LOOKUP_IMPLICIT;
1711
1712   /* Don't bother looking up the same type twice.  */
1713   if (*candidates && (*candidates)->fn == totype)
1714     return NULL;
1715
1716   for (i = 0; i < len; ++i)
1717     {
1718       tree arg, argtype;
1719       conversion *t;
1720
1721       if (i == 0)
1722         arg = obj;
1723       else if (i == 1 && first_arg != NULL_TREE)
1724         arg = first_arg;
1725       else
1726         arg = VEC_index (tree, arglist,
1727                          i - (first_arg != NULL_TREE ? 1 : 0) - 1);
1728       argtype = lvalue_type (arg);
1729
1730       if (i == 0)
1731         t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1732                                  flags);
1733       else if (parmnode == void_list_node)
1734         break;
1735       else if (parmnode)
1736         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1737                                  /*c_cast_p=*/false, flags);
1738       else
1739         {
1740           t = build_identity_conv (argtype, arg);
1741           t->ellipsis_p = true;
1742         }
1743
1744       convs[i] = t;
1745       if (! t)
1746         break;
1747
1748       if (t->bad_p)
1749         viable = -1;
1750
1751       if (i == 0)
1752         continue;
1753
1754       if (parmnode)
1755         parmnode = TREE_CHAIN (parmnode);
1756     }
1757
1758   if (i < len)
1759     viable = 0;
1760
1761   if (!sufficient_parms_p (parmnode))
1762     viable = 0;
1763
1764   return add_candidate (candidates, totype, first_arg, arglist, len, convs,
1765                         access_path, conversion_path, viable);
1766 }
1767
1768 static void
1769 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1770                          tree type1, tree type2, tree *args, tree *argtypes,
1771                          int flags)
1772 {
1773   conversion *t;
1774   conversion **convs;
1775   size_t num_convs;
1776   int viable = 1, i;
1777   tree types[2];
1778
1779   types[0] = type1;
1780   types[1] = type2;
1781
1782   num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
1783   convs = alloc_conversions (num_convs);
1784
1785   /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
1786      conversion ops are allowed.  We handle that here by just checking for
1787      boolean_type_node because other operators don't ask for it.  COND_EXPR
1788      also does contextual conversion to bool for the first operand, but we
1789      handle that in build_conditional_expr, and type1 here is operand 2.  */
1790   if (type1 != boolean_type_node)
1791     flags |= LOOKUP_ONLYCONVERTING;
1792
1793   for (i = 0; i < 2; ++i)
1794     {
1795       if (! args[i])
1796         break;
1797
1798       t = implicit_conversion (types[i], argtypes[i], args[i],
1799                                /*c_cast_p=*/false, flags);
1800       if (! t)
1801         {
1802           viable = 0;
1803           /* We need something for printing the candidate.  */
1804           t = build_identity_conv (types[i], NULL_TREE);
1805         }
1806       else if (t->bad_p)
1807         viable = 0;
1808       convs[i] = t;
1809     }
1810
1811   /* For COND_EXPR we rearranged the arguments; undo that now.  */
1812   if (args[2])
1813     {
1814       convs[2] = convs[1];
1815       convs[1] = convs[0];
1816       t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1817                                /*c_cast_p=*/false, flags);
1818       if (t)
1819         convs[0] = t;
1820       else
1821         viable = 0;
1822     }
1823
1824   add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
1825                  num_convs, convs,
1826                  /*access_path=*/NULL_TREE,
1827                  /*conversion_path=*/NULL_TREE,
1828                  viable);
1829 }
1830
1831 static bool
1832 is_complete (tree t)
1833 {
1834   return COMPLETE_TYPE_P (complete_type (t));
1835 }
1836
1837 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
1838
1839 static bool
1840 promoted_arithmetic_type_p (tree type)
1841 {
1842   /* [over.built]
1843
1844      In this section, the term promoted integral type is used to refer
1845      to those integral types which are preserved by integral promotion
1846      (including e.g.  int and long but excluding e.g.  char).
1847      Similarly, the term promoted arithmetic type refers to promoted
1848      integral types plus floating types.  */
1849   return ((CP_INTEGRAL_TYPE_P (type)
1850            && same_type_p (type_promotes_to (type), type))
1851           || TREE_CODE (type) == REAL_TYPE);
1852 }
1853
1854 /* Create any builtin operator overload candidates for the operator in
1855    question given the converted operand types TYPE1 and TYPE2.  The other
1856    args are passed through from add_builtin_candidates to
1857    build_builtin_candidate.
1858
1859    TYPE1 and TYPE2 may not be permissible, and we must filter them.
1860    If CODE is requires candidates operands of the same type of the kind
1861    of which TYPE1 and TYPE2 are, we add both candidates
1862    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
1863
1864 static void
1865 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1866                        enum tree_code code2, tree fnname, tree type1,
1867                        tree type2, tree *args, tree *argtypes, int flags)
1868 {
1869   switch (code)
1870     {
1871     case POSTINCREMENT_EXPR:
1872     case POSTDECREMENT_EXPR:
1873       args[1] = integer_zero_node;
1874       type2 = integer_type_node;
1875       break;
1876     default:
1877       break;
1878     }
1879
1880   switch (code)
1881     {
1882
1883 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
1884      and  VQ  is  either  volatile or empty, there exist candidate operator
1885      functions of the form
1886              VQ T&   operator++(VQ T&);
1887              T       operator++(VQ T&, int);
1888    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1889      type  other than bool, and VQ is either volatile or empty, there exist
1890      candidate operator functions of the form
1891              VQ T&   operator--(VQ T&);
1892              T       operator--(VQ T&, int);
1893    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
1894      complete  object type, and VQ is either volatile or empty, there exist
1895      candidate operator functions of the form
1896              T*VQ&   operator++(T*VQ&);
1897              T*VQ&   operator--(T*VQ&);
1898              T*      operator++(T*VQ&, int);
1899              T*      operator--(T*VQ&, int);  */
1900
1901     case POSTDECREMENT_EXPR:
1902     case PREDECREMENT_EXPR:
1903       if (TREE_CODE (type1) == BOOLEAN_TYPE)
1904         return;
1905     case POSTINCREMENT_EXPR:
1906     case PREINCREMENT_EXPR:
1907       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1908         {
1909           type1 = build_reference_type (type1);
1910           break;
1911         }
1912       return;
1913
1914 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1915      exist candidate operator functions of the form
1916
1917              T&      operator*(T*);
1918
1919    8 For every function type T, there exist candidate operator functions of
1920      the form
1921              T&      operator*(T*);  */
1922
1923     case INDIRECT_REF:
1924       if (TREE_CODE (type1) == POINTER_TYPE
1925           && (TYPE_PTROB_P (type1)
1926               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1927         break;
1928       return;
1929
1930 /* 9 For every type T, there exist candidate operator functions of the form
1931              T*      operator+(T*);
1932
1933    10For  every  promoted arithmetic type T, there exist candidate operator
1934      functions of the form
1935              T       operator+(T);
1936              T       operator-(T);  */
1937
1938     case UNARY_PLUS_EXPR: /* unary + */
1939       if (TREE_CODE (type1) == POINTER_TYPE)
1940         break;
1941     case NEGATE_EXPR:
1942       if (ARITHMETIC_TYPE_P (type1))
1943         break;
1944       return;
1945
1946 /* 11For every promoted integral type T,  there  exist  candidate  operator
1947      functions of the form
1948              T       operator~(T);  */
1949
1950     case BIT_NOT_EXPR:
1951       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
1952         break;
1953       return;
1954
1955 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1956      is the same type as C2 or is a derived class of C2, T  is  a  complete
1957      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1958      there exist candidate operator functions of the form
1959              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1960      where CV12 is the union of CV1 and CV2.  */
1961
1962     case MEMBER_REF:
1963       if (TREE_CODE (type1) == POINTER_TYPE
1964           && TYPE_PTR_TO_MEMBER_P (type2))
1965         {
1966           tree c1 = TREE_TYPE (type1);
1967           tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1968
1969           if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
1970               && (TYPE_PTRMEMFUNC_P (type2)
1971                   || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1972             break;
1973         }
1974       return;
1975
1976 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
1977      didate operator functions of the form
1978              LR      operator*(L, R);
1979              LR      operator/(L, R);
1980              LR      operator+(L, R);
1981              LR      operator-(L, R);
1982              bool    operator<(L, R);
1983              bool    operator>(L, R);
1984              bool    operator<=(L, R);
1985              bool    operator>=(L, R);
1986              bool    operator==(L, R);
1987              bool    operator!=(L, R);
1988      where  LR  is  the  result of the usual arithmetic conversions between
1989      types L and R.
1990
1991    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
1992      unqualified  complete  object  type and I is a promoted integral type,
1993      there exist candidate operator functions of the form
1994              T*      operator+(T*, I);
1995              T&      operator[](T*, I);
1996              T*      operator-(T*, I);
1997              T*      operator+(I, T*);
1998              T&      operator[](I, T*);
1999
2000    15For every T, where T is a pointer to complete object type, there exist
2001      candidate operator functions of the form112)
2002              ptrdiff_t operator-(T, T);
2003
2004    16For every pointer or enumeration type T, there exist candidate operator
2005      functions of the form
2006              bool    operator<(T, T);
2007              bool    operator>(T, T);
2008              bool    operator<=(T, T);
2009              bool    operator>=(T, T);
2010              bool    operator==(T, T);
2011              bool    operator!=(T, T);
2012
2013    17For every pointer to member type T,  there  exist  candidate  operator
2014      functions of the form
2015              bool    operator==(T, T);
2016              bool    operator!=(T, T);  */
2017
2018     case MINUS_EXPR:
2019       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2020         break;
2021       if (TYPE_PTROB_P (type1)
2022           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2023         {
2024           type2 = ptrdiff_type_node;
2025           break;
2026         }
2027     case MULT_EXPR:
2028     case TRUNC_DIV_EXPR:
2029       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2030         break;
2031       return;
2032
2033     case EQ_EXPR:
2034     case NE_EXPR:
2035       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2036           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
2037         break;
2038       if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2039         {
2040           type2 = type1;
2041           break;
2042         }
2043       if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2044         {
2045           type1 = type2;
2046           break;
2047         }
2048       /* Fall through.  */
2049     case LT_EXPR:
2050     case GT_EXPR:
2051     case LE_EXPR:
2052     case GE_EXPR:
2053     case MAX_EXPR:
2054     case MIN_EXPR:
2055       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2056         break;
2057       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2058         break;
2059       if (TREE_CODE (type1) == ENUMERAL_TYPE 
2060           && TREE_CODE (type2) == ENUMERAL_TYPE)
2061         break;
2062       if (TYPE_PTR_P (type1) 
2063           && null_ptr_cst_p (args[1])
2064           && !uses_template_parms (type1))
2065         {
2066           type2 = type1;
2067           break;
2068         }
2069       if (null_ptr_cst_p (args[0]) 
2070           && TYPE_PTR_P (type2)
2071           && !uses_template_parms (type2))
2072         {
2073           type1 = type2;
2074           break;
2075         }
2076       return;
2077
2078     case PLUS_EXPR:
2079       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2080         break;
2081     case ARRAY_REF:
2082       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2083         {
2084           type1 = ptrdiff_type_node;
2085           break;
2086         }
2087       if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2088         {
2089           type2 = ptrdiff_type_node;
2090           break;
2091         }
2092       return;
2093
2094 /* 18For  every pair of promoted integral types L and R, there exist candi-
2095      date operator functions of the form
2096              LR      operator%(L, R);
2097              LR      operator&(L, R);
2098              LR      operator^(L, R);
2099              LR      operator|(L, R);
2100              L       operator<<(L, R);
2101              L       operator>>(L, R);
2102      where LR is the result of the  usual  arithmetic  conversions  between
2103      types L and R.  */
2104
2105     case TRUNC_MOD_EXPR:
2106     case BIT_AND_EXPR:
2107     case BIT_IOR_EXPR:
2108     case BIT_XOR_EXPR:
2109     case LSHIFT_EXPR:
2110     case RSHIFT_EXPR:
2111       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2112         break;
2113       return;
2114
2115 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
2116      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
2117      type, there exist candidate operator functions of the form
2118              VQ L&   operator=(VQ L&, R);
2119              VQ L&   operator*=(VQ L&, R);
2120              VQ L&   operator/=(VQ L&, R);
2121              VQ L&   operator+=(VQ L&, R);
2122              VQ L&   operator-=(VQ L&, R);
2123
2124    20For  every  pair T, VQ), where T is any type and VQ is either volatile
2125      or empty, there exist candidate operator functions of the form
2126              T*VQ&   operator=(T*VQ&, T*);
2127
2128    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
2129      either  volatile or empty, there exist candidate operator functions of
2130      the form
2131              VQ T&   operator=(VQ T&, T);
2132
2133    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
2134      unqualified  complete object type, VQ is either volatile or empty, and
2135      I is a promoted integral type, there exist  candidate  operator  func-
2136      tions of the form
2137              T*VQ&   operator+=(T*VQ&, I);
2138              T*VQ&   operator-=(T*VQ&, I);
2139
2140    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
2141      type, VQ is either volatile or empty, and R  is  a  promoted  integral
2142      type, there exist candidate operator functions of the form
2143
2144              VQ L&   operator%=(VQ L&, R);
2145              VQ L&   operator<<=(VQ L&, R);
2146              VQ L&   operator>>=(VQ L&, R);
2147              VQ L&   operator&=(VQ L&, R);
2148              VQ L&   operator^=(VQ L&, R);
2149              VQ L&   operator|=(VQ L&, R);  */
2150
2151     case MODIFY_EXPR:
2152       switch (code2)
2153         {
2154         case PLUS_EXPR:
2155         case MINUS_EXPR:
2156           if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2157             {
2158               type2 = ptrdiff_type_node;
2159               break;
2160             }
2161         case MULT_EXPR:
2162         case TRUNC_DIV_EXPR:
2163           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2164             break;
2165           return;
2166
2167         case TRUNC_MOD_EXPR:
2168         case BIT_AND_EXPR:
2169         case BIT_IOR_EXPR:
2170         case BIT_XOR_EXPR:
2171         case LSHIFT_EXPR:
2172         case RSHIFT_EXPR:
2173           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2174             break;
2175           return;
2176
2177         case NOP_EXPR:
2178           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2179             break;
2180           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2181               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2182               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2183               || ((TYPE_PTRMEMFUNC_P (type1)
2184                    || TREE_CODE (type1) == POINTER_TYPE)
2185                   && null_ptr_cst_p (args[1])))
2186             {
2187               type2 = type1;
2188               break;
2189             }
2190           return;
2191
2192         default:
2193           gcc_unreachable ();
2194         }
2195       type1 = build_reference_type (type1);
2196       break;
2197
2198     case COND_EXPR:
2199       /* [over.built]
2200
2201          For every pair of promoted arithmetic types L and R, there
2202          exist candidate operator functions of the form
2203
2204          LR operator?(bool, L, R);
2205
2206          where LR is the result of the usual arithmetic conversions
2207          between types L and R.
2208
2209          For every type T, where T is a pointer or pointer-to-member
2210          type, there exist candidate operator functions of the form T
2211          operator?(bool, T, T);  */
2212
2213       if (promoted_arithmetic_type_p (type1)
2214           && promoted_arithmetic_type_p (type2))
2215         /* That's OK.  */
2216         break;
2217
2218       /* Otherwise, the types should be pointers.  */
2219       if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2220           || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2221         return;
2222
2223       /* We don't check that the two types are the same; the logic
2224          below will actually create two candidates; one in which both
2225          parameter types are TYPE1, and one in which both parameter
2226          types are TYPE2.  */
2227       break;
2228
2229     default:
2230       gcc_unreachable ();
2231     }
2232
2233   /* If we're dealing with two pointer types or two enumeral types,
2234      we need candidates for both of them.  */
2235   if (type2 && !same_type_p (type1, type2)
2236       && TREE_CODE (type1) == TREE_CODE (type2)
2237       && (TREE_CODE (type1) == REFERENCE_TYPE
2238           || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2239           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2240           || TYPE_PTRMEMFUNC_P (type1)
2241           || MAYBE_CLASS_TYPE_P (type1)
2242           || TREE_CODE (type1) == ENUMERAL_TYPE))
2243     {
2244       build_builtin_candidate
2245         (candidates, fnname, type1, type1, args, argtypes, flags);
2246       build_builtin_candidate
2247         (candidates, fnname, type2, type2, args, argtypes, flags);
2248       return;
2249     }
2250
2251   build_builtin_candidate
2252     (candidates, fnname, type1, type2, args, argtypes, flags);
2253 }
2254
2255 tree
2256 type_decays_to (tree type)
2257 {
2258   if (TREE_CODE (type) == ARRAY_TYPE)
2259     return build_pointer_type (TREE_TYPE (type));
2260   if (TREE_CODE (type) == FUNCTION_TYPE)
2261     return build_pointer_type (type);
2262   return type;
2263 }
2264
2265 /* There are three conditions of builtin candidates:
2266
2267    1) bool-taking candidates.  These are the same regardless of the input.
2268    2) pointer-pair taking candidates.  These are generated for each type
2269       one of the input types converts to.
2270    3) arithmetic candidates.  According to the standard, we should generate
2271       all of these, but I'm trying not to...
2272
2273    Here we generate a superset of the possible candidates for this particular
2274    case.  That is a subset of the full set the standard defines, plus some
2275    other cases which the standard disallows. add_builtin_candidate will
2276    filter out the invalid set.  */
2277
2278 static void
2279 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2280                         enum tree_code code2, tree fnname, tree *args,
2281                         int flags)
2282 {
2283   int ref1, i;
2284   int enum_p = 0;
2285   tree type, argtypes[3];
2286   /* TYPES[i] is the set of possible builtin-operator parameter types
2287      we will consider for the Ith argument.  These are represented as
2288      a TREE_LIST; the TREE_VALUE of each node is the potential
2289      parameter type.  */
2290   tree types[2];
2291
2292   for (i = 0; i < 3; ++i)
2293     {
2294       if (args[i])
2295         argtypes[i] = unlowered_expr_type (args[i]);
2296       else
2297         argtypes[i] = NULL_TREE;
2298     }
2299
2300   switch (code)
2301     {
2302 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2303      and  VQ  is  either  volatile or empty, there exist candidate operator
2304      functions of the form
2305                  VQ T&   operator++(VQ T&);  */
2306
2307     case POSTINCREMENT_EXPR:
2308     case PREINCREMENT_EXPR:
2309     case POSTDECREMENT_EXPR:
2310     case PREDECREMENT_EXPR:
2311     case MODIFY_EXPR:
2312       ref1 = 1;
2313       break;
2314
2315 /* 24There also exist candidate operator functions of the form
2316              bool    operator!(bool);
2317              bool    operator&&(bool, bool);
2318              bool    operator||(bool, bool);  */
2319
2320     case TRUTH_NOT_EXPR:
2321       build_builtin_candidate
2322         (candidates, fnname, boolean_type_node,
2323          NULL_TREE, args, argtypes, flags);
2324       return;
2325
2326     case TRUTH_ORIF_EXPR:
2327     case TRUTH_ANDIF_EXPR:
2328       build_builtin_candidate
2329         (candidates, fnname, boolean_type_node,
2330          boolean_type_node, args, argtypes, flags);
2331       return;
2332
2333     case ADDR_EXPR:
2334     case COMPOUND_EXPR:
2335     case COMPONENT_REF:
2336       return;
2337
2338     case COND_EXPR:
2339     case EQ_EXPR:
2340     case NE_EXPR:
2341     case LT_EXPR:
2342     case LE_EXPR:
2343     case GT_EXPR:
2344     case GE_EXPR:
2345       enum_p = 1;
2346       /* Fall through.  */
2347
2348     default:
2349       ref1 = 0;
2350     }
2351
2352   types[0] = types[1] = NULL_TREE;
2353
2354   for (i = 0; i < 2; ++i)
2355     {
2356       if (! args[i])
2357         ;
2358       else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2359         {
2360           tree convs;
2361
2362           if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2363             return;
2364
2365           convs = lookup_conversions (argtypes[i]);
2366
2367           if (code == COND_EXPR)
2368             {
2369               if (real_lvalue_p (args[i]))
2370                 types[i] = tree_cons
2371                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2372
2373               types[i] = tree_cons
2374                 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2375             }
2376
2377           else if (! convs)
2378             return;
2379
2380           for (; convs; convs = TREE_CHAIN (convs))
2381             {
2382               type = TREE_TYPE (convs);
2383
2384               if (i == 0 && ref1
2385                   && (TREE_CODE (type) != REFERENCE_TYPE
2386                       || CP_TYPE_CONST_P (TREE_TYPE (type))))
2387                 continue;
2388
2389               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2390                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2391
2392               type = non_reference (type);
2393               if (i != 0 || ! ref1)
2394                 {
2395                   type = TYPE_MAIN_VARIANT (type_decays_to (type));
2396                   if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2397                     types[i] = tree_cons (NULL_TREE, type, types[i]);
2398                   if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2399                     type = type_promotes_to (type);
2400                 }
2401
2402               if (! value_member (type, types[i]))
2403                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2404             }
2405         }
2406       else
2407         {
2408           if (code == COND_EXPR && real_lvalue_p (args[i]))
2409             types[i] = tree_cons
2410               (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2411           type = non_reference (argtypes[i]);
2412           if (i != 0 || ! ref1)
2413             {
2414               type = TYPE_MAIN_VARIANT (type_decays_to (type));
2415               if (enum_p && UNSCOPED_ENUM_P (type))
2416                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2417               if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2418                 type = type_promotes_to (type);
2419             }
2420           types[i] = tree_cons (NULL_TREE, type, types[i]);
2421         }
2422     }
2423
2424   /* Run through the possible parameter types of both arguments,
2425      creating candidates with those parameter types.  */
2426   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2427     {
2428       if (types[1])
2429         for (type = types[1]; type; type = TREE_CHAIN (type))
2430           add_builtin_candidate
2431             (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2432              TREE_VALUE (type), args, argtypes, flags);
2433       else
2434         add_builtin_candidate
2435           (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2436            NULL_TREE, args, argtypes, flags);
2437     }
2438 }
2439
2440
2441 /* If TMPL can be successfully instantiated as indicated by
2442    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2443
2444    TMPL is the template.  EXPLICIT_TARGS are any explicit template
2445    arguments.  ARGLIST is the arguments provided at the call-site.
2446    This does not change ARGLIST.  The RETURN_TYPE is the desired type
2447    for conversion operators.  If OBJ is NULL_TREE, FLAGS and CTYPE are
2448    as for add_function_candidate.  If an OBJ is supplied, FLAGS and
2449    CTYPE are ignored, and OBJ is as for add_conv_candidate.  */
2450
2451 static struct z_candidate*
2452 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2453                              tree ctype, tree explicit_targs, tree first_arg,
2454                              const VEC(tree,gc) *arglist, tree return_type,
2455                              tree access_path, tree conversion_path,
2456                              int flags, tree obj, unification_kind_t strict)
2457 {
2458   int ntparms = DECL_NTPARMS (tmpl);
2459   tree targs = make_tree_vec (ntparms);
2460   unsigned int nargs;
2461   int skip_without_in_chrg;
2462   tree first_arg_without_in_chrg;
2463   tree *args_without_in_chrg;
2464   unsigned int nargs_without_in_chrg;
2465   unsigned int ia, ix;
2466   tree arg;
2467   struct z_candidate *cand;
2468   int i;
2469   tree fn;
2470
2471   nargs = (first_arg == NULL_TREE ? 0 : 1) + VEC_length (tree, arglist);
2472
2473   skip_without_in_chrg = 0;
2474
2475   first_arg_without_in_chrg = first_arg;
2476
2477   /* We don't do deduction on the in-charge parameter, the VTT
2478      parameter or 'this'.  */
2479   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2480     {
2481       if (first_arg_without_in_chrg != NULL_TREE)
2482         first_arg_without_in_chrg = NULL_TREE;
2483       else
2484         ++skip_without_in_chrg;
2485     }
2486
2487   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2488        || DECL_BASE_CONSTRUCTOR_P (tmpl))
2489       && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2490     {
2491       if (first_arg_without_in_chrg != NULL_TREE)
2492         first_arg_without_in_chrg = NULL_TREE;
2493       else
2494         ++skip_without_in_chrg;
2495     }
2496
2497   nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2498                            + (VEC_length (tree, arglist)
2499                               - skip_without_in_chrg));
2500   args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2501   ia = 0;
2502   if (first_arg_without_in_chrg != NULL_TREE)
2503     {
2504       args_without_in_chrg[ia] = first_arg_without_in_chrg;
2505       ++ia;
2506     }
2507   for (ix = skip_without_in_chrg;
2508        VEC_iterate (tree, arglist, ix, arg);
2509        ++ix)
2510     {
2511       args_without_in_chrg[ia] = arg;
2512       ++ia;
2513     }
2514   gcc_assert (ia == nargs_without_in_chrg);
2515
2516   i = fn_type_unification (tmpl, explicit_targs, targs,
2517                            args_without_in_chrg,
2518                            nargs_without_in_chrg,
2519                            return_type, strict, flags);
2520
2521   if (i != 0)
2522     return NULL;
2523
2524   fn = instantiate_template (tmpl, targs, tf_none);
2525   if (fn == error_mark_node)
2526     return NULL;
2527
2528   /* In [class.copy]:
2529
2530        A member function template is never instantiated to perform the
2531        copy of a class object to an object of its class type.
2532
2533      It's a little unclear what this means; the standard explicitly
2534      does allow a template to be used to copy a class.  For example,
2535      in:
2536
2537        struct A {
2538          A(A&);
2539          template <class T> A(const T&);
2540        };
2541        const A f ();
2542        void g () { A a (f ()); }
2543
2544      the member template will be used to make the copy.  The section
2545      quoted above appears in the paragraph that forbids constructors
2546      whose only parameter is (a possibly cv-qualified variant of) the
2547      class type, and a logical interpretation is that the intent was
2548      to forbid the instantiation of member templates which would then
2549      have that form.  */
2550   if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2551     {
2552       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2553       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2554                                     ctype))
2555         return NULL;
2556     }
2557
2558   if (obj != NULL_TREE)
2559     /* Aha, this is a conversion function.  */
2560     cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2561                                access_path, conversion_path);
2562   else
2563     cand = add_function_candidate (candidates, fn, ctype,
2564                                    first_arg, arglist, access_path,
2565                                    conversion_path, flags);
2566   if (DECL_TI_TEMPLATE (fn) != tmpl)
2567     /* This situation can occur if a member template of a template
2568        class is specialized.  Then, instantiate_template might return
2569        an instantiation of the specialization, in which case the
2570        DECL_TI_TEMPLATE field will point at the original
2571        specialization.  For example:
2572
2573          template <class T> struct S { template <class U> void f(U);
2574                                        template <> void f(int) {}; };
2575          S<double> sd;
2576          sd.f(3);
2577
2578        Here, TMPL will be template <class U> S<double>::f(U).
2579        And, instantiate template will give us the specialization
2580        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
2581        for this will point at template <class T> template <> S<T>::f(int),
2582        so that we can find the definition.  For the purposes of
2583        overload resolution, however, we want the original TMPL.  */
2584     cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2585   else
2586     cand->template_decl = DECL_TEMPLATE_INFO (fn);
2587
2588   return cand;
2589 }
2590
2591
2592 static struct z_candidate *
2593 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2594                         tree explicit_targs, tree first_arg,
2595                         const VEC(tree,gc) *arglist, tree return_type,
2596                         tree access_path, tree conversion_path, int flags,
2597                         unification_kind_t strict)
2598 {
2599   return
2600     add_template_candidate_real (candidates, tmpl, ctype,
2601                                  explicit_targs, first_arg, arglist,
2602                                  return_type, access_path, conversion_path,
2603                                  flags, NULL_TREE, strict);
2604 }
2605
2606
2607 static struct z_candidate *
2608 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2609                              tree obj, tree first_arg,
2610                              const VEC(tree,gc) *arglist,
2611                              tree return_type, tree access_path,
2612                              tree conversion_path)
2613 {
2614   return
2615     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2616                                  first_arg, arglist, return_type, access_path,
2617                                  conversion_path, 0, obj, DEDUCE_CONV);
2618 }
2619
2620 /* The CANDS are the set of candidates that were considered for
2621    overload resolution.  Return the set of viable candidates.  If none
2622    of the candidates were viable, set *ANY_VIABLE_P to true.  STRICT_P
2623    is true if a candidate should be considered viable only if it is
2624    strictly viable.  */
2625
2626 static struct z_candidate*
2627 splice_viable (struct z_candidate *cands,
2628                bool strict_p,
2629                bool *any_viable_p)
2630 {
2631   struct z_candidate *viable;
2632   struct z_candidate **last_viable;
2633   struct z_candidate **cand;
2634
2635   viable = NULL;
2636   last_viable = &viable;
2637   *any_viable_p = false;
2638
2639   cand = &cands;
2640   while (*cand)
2641     {
2642       struct z_candidate *c = *cand;
2643       if (strict_p ? c->viable == 1 : c->viable)
2644         {
2645           *last_viable = c;
2646           *cand = c->next;
2647           c->next = NULL;
2648           last_viable = &c->next;
2649           *any_viable_p = true;
2650         }
2651       else
2652         cand = &c->next;
2653     }
2654
2655   return viable ? viable : cands;
2656 }
2657
2658 static bool
2659 any_strictly_viable (struct z_candidate *cands)
2660 {
2661   for (; cands; cands = cands->next)
2662     if (cands->viable == 1)
2663       return true;
2664   return false;
2665 }
2666
2667 /* OBJ is being used in an expression like "OBJ.f (...)".  In other
2668    words, it is about to become the "this" pointer for a member
2669    function call.  Take the address of the object.  */
2670
2671 static tree
2672 build_this (tree obj)
2673 {
2674   /* In a template, we are only concerned about the type of the
2675      expression, so we can take a shortcut.  */
2676   if (processing_template_decl)
2677     return build_address (obj);
2678
2679   return cp_build_unary_op (ADDR_EXPR, obj, 0, tf_warning_or_error);
2680 }
2681
2682 /* Returns true iff functions are equivalent. Equivalent functions are
2683    not '==' only if one is a function-local extern function or if
2684    both are extern "C".  */
2685
2686 static inline int
2687 equal_functions (tree fn1, tree fn2)
2688 {
2689   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2690       || DECL_EXTERN_C_FUNCTION_P (fn1))
2691     return decls_match (fn1, fn2);
2692   return fn1 == fn2;
2693 }
2694
2695 /* Print information about one overload candidate CANDIDATE.  MSGSTR
2696    is the text to print before the candidate itself.
2697
2698    NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2699    to have been run through gettext by the caller.  This wart makes
2700    life simpler in print_z_candidates and for the translators.  */
2701
2702 static void
2703 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2704 {
2705   if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2706     {
2707       if (candidate->num_convs == 3)
2708         inform (input_location, "%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2709                 candidate->convs[0]->type,
2710                 candidate->convs[1]->type,
2711                 candidate->convs[2]->type);
2712       else if (candidate->num_convs == 2)
2713         inform (input_location, "%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2714                 candidate->convs[0]->type,
2715                 candidate->convs[1]->type);
2716       else
2717         inform (input_location, "%s %D(%T) <built-in>", msgstr, candidate->fn,
2718                 candidate->convs[0]->type);
2719     }
2720   else if (TYPE_P (candidate->fn))
2721     inform (input_location, "%s %T <conversion>", msgstr, candidate->fn);
2722   else if (candidate->viable == -1)
2723     inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn);
2724   else if (DECL_DELETED_FN (candidate->fn))
2725     inform (input_location, "%s %+#D <deleted>", msgstr, candidate->fn);
2726   else
2727     inform (input_location, "%s %+#D", msgstr, candidate->fn);
2728 }
2729
2730 static void
2731 print_z_candidates (struct z_candidate *candidates)
2732 {
2733   const char *str;
2734   struct z_candidate *cand1;
2735   struct z_candidate **cand2;
2736
2737   if (!candidates)
2738     return;
2739
2740   /* Remove deleted candidates.  */
2741   cand1 = candidates;
2742   for (cand2 = &cand1; *cand2; )
2743     {
2744       if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2745           && DECL_DELETED_FN ((*cand2)->fn))
2746         *cand2 = (*cand2)->next;
2747       else
2748         cand2 = &(*cand2)->next;
2749     }
2750   /* ...if there are any non-deleted ones.  */
2751   if (cand1)
2752     candidates = cand1;
2753
2754   /* There may be duplicates in the set of candidates.  We put off
2755      checking this condition as long as possible, since we have no way
2756      to eliminate duplicates from a set of functions in less than n^2
2757      time.  Now we are about to emit an error message, so it is more
2758      permissible to go slowly.  */
2759   for (cand1 = candidates; cand1; cand1 = cand1->next)
2760     {
2761       tree fn = cand1->fn;
2762       /* Skip builtin candidates and conversion functions.  */
2763       if (TREE_CODE (fn) != FUNCTION_DECL)
2764         continue;
2765       cand2 = &cand1->next;
2766       while (*cand2)
2767         {
2768           if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2769               && equal_functions (fn, (*cand2)->fn))
2770             *cand2 = (*cand2)->next;
2771           else
2772             cand2 = &(*cand2)->next;
2773         }
2774     }
2775
2776   str = _("candidates are:");
2777   print_z_candidate (str, candidates);
2778   if (candidates->next)
2779     {
2780       /* Indent successive candidates by the width of the translation
2781          of the above string.  */
2782       size_t len = gcc_gettext_width (str) + 1;
2783       char *spaces = (char *) alloca (len);
2784       memset (spaces, ' ', len-1);
2785       spaces[len - 1] = '\0';
2786
2787       candidates = candidates->next;
2788       do
2789         {
2790           print_z_candidate (spaces, candidates);
2791           candidates = candidates->next;
2792         }
2793       while (candidates);
2794     }
2795 }
2796
2797 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2798    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
2799    the result of the conversion function to convert it to the final
2800    desired type.  Merge the two sequences into a single sequence,
2801    and return the merged sequence.  */
2802
2803 static conversion *
2804 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2805 {
2806   conversion **t;
2807
2808   gcc_assert (user_seq->kind == ck_user);
2809
2810   /* Find the end of the second conversion sequence.  */
2811   t = &(std_seq);
2812   while ((*t)->kind != ck_identity)
2813     t = &((*t)->u.next);
2814
2815   /* Replace the identity conversion with the user conversion
2816      sequence.  */
2817   *t = user_seq;
2818
2819   /* The entire sequence is a user-conversion sequence.  */
2820   std_seq->user_conv_p = true;
2821
2822   return std_seq;
2823 }
2824
2825 /* Returns the best overload candidate to perform the requested
2826    conversion.  This function is used for three the overloading situations
2827    described in [over.match.copy], [over.match.conv], and [over.match.ref].
2828    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2829    per [dcl.init.ref], so we ignore temporary bindings.  */
2830
2831 static struct z_candidate *
2832 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2833 {
2834   struct z_candidate *candidates, *cand;
2835   tree fromtype = TREE_TYPE (expr);
2836   tree ctors = NULL_TREE;
2837   tree conv_fns = NULL_TREE;
2838   conversion *conv = NULL;
2839   tree first_arg = NULL_TREE;
2840   VEC(tree,gc) *args = NULL;
2841   bool any_viable_p;
2842   int convflags;
2843
2844   /* We represent conversion within a hierarchy using RVALUE_CONV and
2845      BASE_CONV, as specified by [over.best.ics]; these become plain
2846      constructor calls, as specified in [dcl.init].  */
2847   gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
2848               || !DERIVED_FROM_P (totype, fromtype));
2849
2850   if (MAYBE_CLASS_TYPE_P (totype))
2851     ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2852
2853   if (MAYBE_CLASS_TYPE_P (fromtype))
2854     {
2855       tree to_nonref = non_reference (totype);
2856       if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
2857           (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
2858            && DERIVED_FROM_P (to_nonref, fromtype)))
2859         {
2860           /* [class.conv.fct] A conversion function is never used to
2861              convert a (possibly cv-qualified) object to the (possibly
2862              cv-qualified) same object type (or a reference to it), to a
2863              (possibly cv-qualified) base class of that type (or a
2864              reference to it)...  */
2865         }
2866       else
2867         conv_fns = lookup_conversions (fromtype);
2868     }
2869
2870   candidates = 0;
2871   flags |= LOOKUP_NO_CONVERSION;
2872
2873   /* It's OK to bind a temporary for converting constructor arguments, but
2874      not in converting the return value of a conversion operator.  */
2875   convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
2876   flags &= ~LOOKUP_NO_TEMP_BIND;
2877
2878   if (ctors)
2879     {
2880       ctors = BASELINK_FUNCTIONS (ctors);
2881
2882       first_arg = build_int_cst (build_pointer_type (totype), 0);
2883       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
2884           && !TYPE_HAS_LIST_CTOR (totype))
2885         {
2886           args = ctor_to_vec (expr);
2887           /* We still allow more conversions within an init-list.  */
2888           flags = ((flags & ~LOOKUP_NO_CONVERSION)
2889                    /* But not for the copy ctor.  */
2890                    |LOOKUP_NO_COPY_CTOR_CONVERSION
2891                    |LOOKUP_NO_NARROWING);
2892         }
2893       else
2894         args = make_tree_vector_single (expr);
2895
2896       /* We should never try to call the abstract or base constructor
2897          from here.  */
2898       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2899                   && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2900     }
2901   for (; ctors; ctors = OVL_NEXT (ctors))
2902     {
2903       tree ctor = OVL_CURRENT (ctors);
2904       if (DECL_NONCONVERTING_P (ctor)
2905           && !BRACE_ENCLOSED_INITIALIZER_P (expr))
2906         continue;
2907
2908       if (TREE_CODE (ctor) == TEMPLATE_DECL)
2909         cand = add_template_candidate (&candidates, ctor, totype,
2910                                        NULL_TREE, first_arg, args, NULL_TREE,
2911                                        TYPE_BINFO (totype),
2912                                        TYPE_BINFO (totype),
2913                                        flags,
2914                                        DEDUCE_CALL);
2915       else
2916         cand = add_function_candidate (&candidates, ctor, totype,
2917                                        first_arg, args, TYPE_BINFO (totype),
2918                                        TYPE_BINFO (totype),
2919                                        flags);
2920
2921       if (cand)
2922         {
2923           cand->second_conv = build_identity_conv (totype, NULL_TREE);
2924
2925           /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2926              set, then this is copy-initialization.  In that case, "The
2927              result of the call is then used to direct-initialize the
2928              object that is the destination of the copy-initialization."
2929              [dcl.init]
2930
2931              We represent this in the conversion sequence with an
2932              rvalue conversion, which means a constructor call.  */
2933           if (TREE_CODE (totype) != REFERENCE_TYPE
2934               && !(convflags & LOOKUP_NO_TEMP_BIND))
2935             cand->second_conv
2936               = build_conv (ck_rvalue, totype, cand->second_conv);
2937         }
2938     }
2939
2940   if (conv_fns)
2941     first_arg = build_this (expr);
2942
2943   for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2944     {
2945       tree fns;
2946       tree conversion_path = TREE_PURPOSE (conv_fns);
2947
2948       /* If we are called to convert to a reference type, we are trying to
2949          find an lvalue binding, so don't even consider temporaries.  If
2950          we don't find an lvalue binding, the caller will try again to
2951          look for a temporary binding.  */
2952       if (TREE_CODE (totype) == REFERENCE_TYPE)
2953         convflags |= LOOKUP_NO_TEMP_BIND;
2954
2955       for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2956         {
2957           tree fn = OVL_CURRENT (fns);
2958           tree first = first_arg;
2959
2960           if (DECL_NONCONVERTING_P (fn)
2961               && (flags & LOOKUP_ONLYCONVERTING))
2962             continue;
2963
2964           /* Lambdas have a static conversion op.  */
2965           if (DECL_STATIC_FUNCTION_P (fn))
2966             first = NULL_TREE;
2967
2968           /* [over.match.funcs] For conversion functions, the function
2969              is considered to be a member of the class of the implicit
2970              object argument for the purpose of defining the type of
2971              the implicit object parameter.
2972
2973              So we pass fromtype as CTYPE to add_*_candidate.  */
2974
2975           if (TREE_CODE (fn) == TEMPLATE_DECL)
2976             cand = add_template_candidate (&candidates, fn, fromtype,
2977                                            NULL_TREE,
2978                                            first, NULL, totype,
2979                                            TYPE_BINFO (fromtype),
2980                                            conversion_path,
2981                                            flags,
2982                                            DEDUCE_CONV);
2983           else
2984             cand = add_function_candidate (&candidates, fn, fromtype,
2985                                            first, NULL,
2986                                            TYPE_BINFO (fromtype),
2987                                            conversion_path,
2988                                            flags);
2989
2990           if (cand)
2991             {
2992               conversion *ics
2993                 = implicit_conversion (totype,
2994                                        TREE_TYPE (TREE_TYPE (cand->fn)),
2995                                        0,
2996                                        /*c_cast_p=*/false, convflags);
2997
2998               /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
2999                  copy-initialization.  In that case, "The result of the
3000                  call is then used to direct-initialize the object that is
3001                  the destination of the copy-initialization."  [dcl.init]
3002
3003                  We represent this in the conversion sequence with an
3004                  rvalue conversion, which means a constructor call.  But
3005                  don't add a second rvalue conversion if there's already
3006                  one there.  Which there really shouldn't be, but it's
3007                  harmless since we'd add it here anyway. */
3008               if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3009                   && !(convflags & LOOKUP_NO_TEMP_BIND))
3010                 ics = build_conv (ck_rvalue, totype, ics);
3011
3012               cand->second_conv = ics;
3013
3014               if (!ics)
3015                 cand->viable = 0;
3016               else if (candidates->viable == 1 && ics->bad_p)
3017                 cand->viable = -1;
3018             }
3019         }
3020     }
3021
3022   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3023   if (!any_viable_p)
3024     return NULL;
3025
3026   cand = tourney (candidates);
3027   if (cand == 0)
3028     {
3029       if (flags & LOOKUP_COMPLAIN)
3030         {
3031           error ("conversion from %qT to %qT is ambiguous",
3032                     fromtype, totype);
3033           print_z_candidates (candidates);
3034         }
3035
3036       cand = candidates;        /* any one will do */
3037       cand->second_conv = build_ambiguous_conv (totype, expr);
3038       cand->second_conv->user_conv_p = true;
3039       if (!any_strictly_viable (candidates))
3040         cand->second_conv->bad_p = true;
3041       /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3042          ambiguous conversion is no worse than another user-defined
3043          conversion.  */
3044
3045       return cand;
3046     }
3047
3048   /* Build the user conversion sequence.  */
3049   conv = build_conv
3050     (ck_user,
3051      (DECL_CONSTRUCTOR_P (cand->fn)
3052       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3053      build_identity_conv (TREE_TYPE (expr), expr));
3054   conv->cand = cand;
3055
3056   /* Remember that this was a list-initialization.  */
3057   if (flags & LOOKUP_NO_NARROWING)
3058     conv->check_narrowing = true;
3059
3060   /* Combine it with the second conversion sequence.  */
3061   cand->second_conv = merge_conversion_sequences (conv,
3062                                                   cand->second_conv);
3063
3064   if (cand->viable == -1)
3065     cand->second_conv->bad_p = true;
3066
3067   return cand;
3068 }
3069
3070 tree
3071 build_user_type_conversion (tree totype, tree expr, int flags)
3072 {
3073   struct z_candidate *cand
3074     = build_user_type_conversion_1 (totype, expr, flags);
3075
3076   if (cand)
3077     {
3078       if (cand->second_conv->kind == ck_ambig)
3079         return error_mark_node;
3080       expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
3081       return convert_from_reference (expr);
3082     }
3083   return NULL_TREE;
3084 }
3085
3086 /* Do any initial processing on the arguments to a function call.  */
3087
3088 static VEC(tree,gc) *
3089 resolve_args (VEC(tree,gc) *args)
3090 {
3091   unsigned int ix;
3092   tree arg;
3093
3094   for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
3095     {
3096       if (error_operand_p (arg))
3097         return NULL;
3098       else if (VOID_TYPE_P (TREE_TYPE (arg)))
3099         {
3100           error ("invalid use of void expression");
3101           return NULL;
3102         }
3103       else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
3104         return NULL;
3105     }
3106   return args;
3107 }
3108
3109 /* Perform overload resolution on FN, which is called with the ARGS.
3110
3111    Return the candidate function selected by overload resolution, or
3112    NULL if the event that overload resolution failed.  In the case
3113    that overload resolution fails, *CANDIDATES will be the set of
3114    candidates considered, and ANY_VIABLE_P will be set to true or
3115    false to indicate whether or not any of the candidates were
3116    viable.
3117
3118    The ARGS should already have gone through RESOLVE_ARGS before this
3119    function is called.  */
3120
3121 static struct z_candidate *
3122 perform_overload_resolution (tree fn,
3123                              const VEC(tree,gc) *args,
3124                              struct z_candidate **candidates,
3125                              bool *any_viable_p)
3126 {
3127   struct z_candidate *cand;
3128   tree explicit_targs = NULL_TREE;
3129   int template_only = 0;
3130
3131   *candidates = NULL;
3132   *any_viable_p = true;
3133
3134   /* Check FN.  */
3135   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3136               || TREE_CODE (fn) == TEMPLATE_DECL
3137               || TREE_CODE (fn) == OVERLOAD
3138               || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3139
3140   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3141     {
3142       explicit_targs = TREE_OPERAND (fn, 1);
3143       fn = TREE_OPERAND (fn, 0);
3144       template_only = 1;
3145     }
3146
3147   /* Add the various candidate functions.  */
3148   add_candidates (fn, args, explicit_targs, template_only,
3149                   /*conversion_path=*/NULL_TREE,
3150                   /*access_path=*/NULL_TREE,
3151                   LOOKUP_NORMAL,
3152                   candidates);
3153
3154   *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3155   if (!*any_viable_p)
3156     return NULL;
3157
3158   cand = tourney (*candidates);
3159   return cand;
3160 }
3161
3162 /* Return an expression for a call to FN (a namespace-scope function,
3163    or a static member function) with the ARGS.  This may change
3164    ARGS.  */
3165
3166 tree
3167 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p, 
3168                          tsubst_flags_t complain)
3169 {
3170   struct z_candidate *candidates, *cand;
3171   bool any_viable_p;
3172   void *p;
3173   tree result;
3174
3175   if (args != NULL && *args != NULL)
3176     {
3177       *args = resolve_args (*args);
3178       if (*args == NULL)
3179         return error_mark_node;
3180     }
3181
3182   /* If this function was found without using argument dependent
3183      lookup, then we want to ignore any undeclared friend
3184      functions.  */
3185   if (!koenig_p)
3186     {
3187       tree orig_fn = fn;
3188
3189       fn = remove_hidden_names (fn);
3190       if (!fn)
3191         {
3192           if (complain & tf_error)
3193             error ("no matching function for call to %<%D(%A)%>",
3194                    DECL_NAME (OVL_CURRENT (orig_fn)),
3195                    build_tree_list_vec (*args));
3196           return error_mark_node;
3197         }
3198     }
3199
3200   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3201   p = conversion_obstack_alloc (0);
3202
3203   cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p);
3204
3205   if (!cand)
3206     {
3207       if (complain & tf_error)
3208         {
3209           if (!any_viable_p && candidates && ! candidates->next)
3210             return cp_build_function_call_vec (candidates->fn, args, complain);
3211           if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3212             fn = TREE_OPERAND (fn, 0);
3213           if (!any_viable_p)
3214             error ("no matching function for call to %<%D(%A)%>",
3215                    DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3216           else
3217             error ("call of overloaded %<%D(%A)%> is ambiguous",
3218                    DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3219           if (candidates)
3220             print_z_candidates (candidates);
3221         }
3222       result = error_mark_node;
3223     }
3224   else
3225     result = build_over_call (cand, LOOKUP_NORMAL, complain);
3226
3227   /* Free all the conversions we allocated.  */
3228   obstack_free (&conversion_obstack, p);
3229
3230   return result;
3231 }
3232
3233 /* Build a call to a global operator new.  FNNAME is the name of the
3234    operator (either "operator new" or "operator new[]") and ARGS are
3235    the arguments provided.  This may change ARGS.  *SIZE points to the
3236    total number of bytes required by the allocation, and is updated if
3237    that is changed here.  *COOKIE_SIZE is non-NULL if a cookie should
3238    be used.  If this function determines that no cookie should be
3239    used, after all, *COOKIE_SIZE is set to NULL_TREE.  If FN is
3240    non-NULL, it will be set, upon return, to the allocation function
3241    called.  */
3242
3243 tree
3244 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3245                          tree *size, tree *cookie_size,
3246                          tree *fn)
3247 {
3248   tree fns;
3249   struct z_candidate *candidates;
3250   struct z_candidate *cand;
3251   bool any_viable_p;
3252
3253   if (fn)
3254     *fn = NULL_TREE;
3255   VEC_safe_insert (tree, gc, *args, 0, *size);
3256   *args = resolve_args (*args);
3257   if (*args == NULL)
3258     return error_mark_node;
3259
3260   /* Based on:
3261
3262        [expr.new]
3263
3264        If this lookup fails to find the name, or if the allocated type
3265        is not a class type, the allocation function's name is looked
3266        up in the global scope.
3267
3268      we disregard block-scope declarations of "operator new".  */
3269   fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3270
3271   /* Figure out what function is being called.  */
3272   cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p);
3273
3274   /* If no suitable function could be found, issue an error message
3275      and give up.  */
3276   if (!cand)
3277     {
3278       if (!any_viable_p)
3279         error ("no matching function for call to %<%D(%A)%>",
3280                DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3281       else
3282         error ("call of overloaded %<%D(%A)%> is ambiguous",
3283                DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3284       if (candidates)
3285         print_z_candidates (candidates);
3286       return error_mark_node;
3287     }
3288
3289    /* If a cookie is required, add some extra space.  Whether
3290       or not a cookie is required cannot be determined until
3291       after we know which function was called.  */
3292    if (*cookie_size)
3293      {
3294        bool use_cookie = true;
3295        if (!abi_version_at_least (2))
3296          {
3297            /* In G++ 3.2, the check was implemented incorrectly; it
3298               looked at the placement expression, rather than the
3299               type of the function.  */
3300            if (VEC_length (tree, *args) == 2
3301                && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
3302                                ptr_type_node))
3303              use_cookie = false;
3304          }
3305        else
3306          {
3307            tree arg_types;
3308
3309            arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3310            /* Skip the size_t parameter.  */
3311            arg_types = TREE_CHAIN (arg_types);
3312            /* Check the remaining parameters (if any).  */
3313            if (arg_types
3314                && TREE_CHAIN (arg_types) == void_list_node
3315                && same_type_p (TREE_VALUE (arg_types),
3316                                ptr_type_node))
3317              use_cookie = false;
3318          }
3319        /* If we need a cookie, adjust the number of bytes allocated.  */
3320        if (use_cookie)
3321          {
3322            /* Update the total size.  */
3323            *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3324            /* Update the argument list to reflect the adjusted size.  */
3325            VEC_replace (tree, *args, 0, *size);
3326          }
3327        else
3328          *cookie_size = NULL_TREE;
3329      }
3330
3331    /* Tell our caller which function we decided to call.  */
3332    if (fn)
3333      *fn = cand->fn;
3334
3335    /* Build the CALL_EXPR.  */
3336    return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
3337 }
3338
3339 /* Build a new call to operator().  This may change ARGS.  */
3340
3341 tree
3342 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
3343 {
3344   struct z_candidate *candidates = 0, *cand;
3345   tree fns, convs, first_mem_arg = NULL_TREE;
3346   tree type = TREE_TYPE (obj);
3347   bool any_viable_p;
3348   tree result = NULL_TREE;
3349   void *p;
3350
3351   if (error_operand_p (obj))
3352     return error_mark_node;
3353
3354   obj = prep_operand (obj);
3355
3356   if (TYPE_PTRMEMFUNC_P (type))
3357     {
3358       if (complain & tf_error)
3359         /* It's no good looking for an overloaded operator() on a
3360            pointer-to-member-function.  */
3361         error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3362       return error_mark_node;
3363     }
3364
3365   if (TYPE_BINFO (type))
3366     {
3367       fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3368       if (fns == error_mark_node)
3369         return error_mark_node;
3370     }
3371   else
3372     fns = NULL_TREE;
3373
3374   if (args != NULL && *args != NULL)
3375     {
3376       *args = resolve_args (*args);
3377       if (*args == NULL)
3378         return error_mark_node;
3379     }
3380
3381   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3382   p = conversion_obstack_alloc (0);
3383
3384   if (fns)
3385     {
3386       tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3387       first_mem_arg = build_this (obj);
3388
3389       for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3390         {
3391           tree fn = OVL_CURRENT (fns);
3392
3393           tree lfirst = first_mem_arg;
3394           if (DECL_STATIC_FUNCTION_P (fn))
3395             lfirst = NULL_TREE;
3396
3397           if (TREE_CODE (fn) == TEMPLATE_DECL)
3398             add_template_candidate (&candidates, fn, base, NULL_TREE,
3399                                     lfirst, *args, NULL_TREE,
3400                                     TYPE_BINFO (type),
3401                                     TYPE_BINFO (type),
3402                                     LOOKUP_NORMAL, DEDUCE_CALL);
3403           else
3404             add_function_candidate
3405               (&candidates, fn, base, lfirst, *args, TYPE_BINFO (type),
3406                TYPE_BINFO (type), LOOKUP_NORMAL);
3407         }
3408     }
3409
3410   /* Rather than mess with handling static conversion ops here, just don't
3411      look at conversions in lambdas.  */
3412   if (LAMBDA_TYPE_P (type))
3413     convs = NULL_TREE;
3414   else
3415     convs = lookup_conversions (type);
3416
3417   for (; convs; convs = TREE_CHAIN (convs))
3418     {
3419       tree fns = TREE_VALUE (convs);
3420       tree totype = TREE_TYPE (convs);
3421
3422       if ((TREE_CODE (totype) == POINTER_TYPE
3423            && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3424           || (TREE_CODE (totype) == REFERENCE_TYPE
3425               && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3426           || (TREE_CODE (totype) == REFERENCE_TYPE
3427               && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3428               && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3429         for (; fns; fns = OVL_NEXT (fns))
3430           {
3431             tree fn = OVL_CURRENT (fns);
3432
3433             if (DECL_NONCONVERTING_P (fn))
3434               continue;
3435
3436             if (TREE_CODE (fn) == TEMPLATE_DECL)
3437               add_template_conv_candidate
3438                 (&candidates, fn, obj, NULL_TREE, *args, totype,
3439                  /*access_path=*/NULL_TREE,
3440                  /*conversion_path=*/NULL_TREE);
3441             else
3442               add_conv_candidate (&candidates, fn, obj, NULL_TREE,
3443                                   *args, /*conversion_path=*/NULL_TREE,
3444                                   /*access_path=*/NULL_TREE);
3445           }
3446     }
3447
3448   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3449   if (!any_viable_p)
3450     {
3451       if (complain & tf_error)
3452         {
3453           error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
3454                  build_tree_list_vec (*args));
3455           print_z_candidates (candidates);
3456         }
3457       result = error_mark_node;
3458     }
3459   else
3460     {
3461       cand = tourney (candidates);
3462       if (cand == 0)
3463         {
3464           if (complain & tf_error)
3465             {
3466               error ("call of %<(%T) (%A)%> is ambiguous", 
3467                      TREE_TYPE (obj), build_tree_list_vec (*args));
3468               print_z_candidates (candidates);
3469             }
3470           result = error_mark_node;
3471         }
3472       /* Since cand->fn will be a type, not a function, for a conversion
3473          function, we must be careful not to unconditionally look at
3474          DECL_NAME here.  */
3475       else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3476                && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3477         result = build_over_call (cand, LOOKUP_NORMAL, complain);
3478       else
3479         {
3480           obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
3481                                            complain);
3482           obj = convert_from_reference (obj);
3483           result = cp_build_function_call_vec (obj, args, complain);
3484         }
3485     }
3486
3487   /* Free all the conversions we allocated.  */
3488   obstack_free (&conversion_obstack, p);
3489
3490   return result;
3491 }
3492
3493 static void
3494 op_error (enum tree_code code, enum tree_code code2,
3495           tree arg1, tree arg2, tree arg3, const char *problem)
3496 {
3497   const char *opname;
3498
3499   if (code == MODIFY_EXPR)
3500     opname = assignment_operator_name_info[code2].name;
3501   else
3502     opname = operator_name_info[code].name;
3503
3504   switch (code)
3505     {
3506     case COND_EXPR:
3507       error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3508              problem, arg1, arg2, arg3);
3509       break;
3510
3511     case POSTINCREMENT_EXPR:
3512     case POSTDECREMENT_EXPR:
3513       error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3514       break;
3515
3516     case ARRAY_REF:
3517       error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3518       break;
3519
3520     case REALPART_EXPR:
3521     case IMAGPART_EXPR:
3522       error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3523       break;
3524
3525     default:
3526       if (arg2)
3527         error ("%s for %<operator%s%> in %<%E %s %E%>",
3528                problem, opname, arg1, opname, arg2);
3529       else
3530         error ("%s for %<operator%s%> in %<%s%E%>",
3531                problem, opname, opname, arg1);
3532       break;
3533     }
3534 }
3535
3536 /* Return the implicit conversion sequence that could be used to
3537    convert E1 to E2 in [expr.cond].  */
3538
3539 static conversion *
3540 conditional_conversion (tree e1, tree e2)
3541 {
3542   tree t1 = non_reference (TREE_TYPE (e1));
3543   tree t2 = non_reference (TREE_TYPE (e2));
3544   conversion *conv;
3545   bool good_base;
3546
3547   /* [expr.cond]
3548
3549      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3550      implicitly converted (clause _conv_) to the type "reference to
3551      T2", subject to the constraint that in the conversion the
3552      reference must bind directly (_dcl.init.ref_) to E1.  */
3553   if (real_lvalue_p (e2))
3554     {
3555       conv = implicit_conversion (build_reference_type (t2),
3556                                   t1,
3557                                   e1,
3558                                   /*c_cast_p=*/false,
3559                                   LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING);
3560       if (conv)
3561         return conv;
3562     }
3563
3564   /* [expr.cond]
3565
3566      If E1 and E2 have class type, and the underlying class types are
3567      the same or one is a base class of the other: E1 can be converted
3568      to match E2 if the class of T2 is the same type as, or a base
3569      class of, the class of T1, and the cv-qualification of T2 is the
3570      same cv-qualification as, or a greater cv-qualification than, the
3571      cv-qualification of T1.  If the conversion is applied, E1 is
3572      changed to an rvalue of type T2 that still refers to the original
3573      source class object (or the appropriate subobject thereof).  */
3574   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3575       && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3576     {
3577       if (good_base && at_least_as_qualified_p (t2, t1))
3578         {
3579           conv = build_identity_conv (t1, e1);
3580           if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3581                             TYPE_MAIN_VARIANT (t2)))
3582             conv = build_conv (ck_base, t2, conv);
3583           else
3584             conv = build_conv (ck_rvalue, t2, conv);
3585           return conv;
3586         }
3587       else
3588         return NULL;
3589     }
3590   else
3591     /* [expr.cond]
3592
3593        Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3594        converted to the type that expression E2 would have if E2 were
3595        converted to an rvalue (or the type it has, if E2 is an rvalue).  */
3596     return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3597                                 LOOKUP_IMPLICIT);
3598 }
3599
3600 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
3601    arguments to the conditional expression.  */
3602
3603 tree
3604 build_conditional_expr (tree arg1, tree arg2, tree arg3,
3605                         tsubst_flags_t complain)
3606 {
3607   tree arg2_type;
3608   tree arg3_type;
3609   tree result = NULL_TREE;
3610   tree result_save;
3611   tree result_type = NULL_TREE;
3612   bool lvalue_p = true;
3613   struct z_candidate *candidates = 0;
3614   struct z_candidate *cand;
3615   void *p;
3616
3617   /* As a G++ extension, the second argument to the conditional can be
3618      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
3619      c'.)  If the second operand is omitted, make sure it is
3620      calculated only once.  */
3621   if (!arg2)
3622     {
3623       if (complain & tf_error)
3624         pedwarn (input_location, OPT_pedantic, 
3625                  "ISO C++ forbids omitting the middle term of a ?: expression");
3626
3627       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
3628       if (real_lvalue_p (arg1))
3629         arg2 = arg1 = stabilize_reference (arg1);
3630       else
3631         arg2 = arg1 = save_expr (arg1);
3632     }
3633
3634   /* [expr.cond]
3635
3636      The first expression is implicitly converted to bool (clause
3637      _conv_).  */
3638   arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
3639                                             LOOKUP_NORMAL);
3640
3641   /* If something has already gone wrong, just pass that fact up the
3642      tree.  */
3643   if (error_operand_p (arg1)
3644       || error_operand_p (arg2)
3645       || error_operand_p (arg3))
3646     return error_mark_node;
3647
3648   /* [expr.cond]
3649
3650      If either the second or the third operand has type (possibly
3651      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3652      array-to-pointer (_conv.array_), and function-to-pointer
3653      (_conv.func_) standard conversions are performed on the second
3654      and third operands.  */
3655   arg2_type = unlowered_expr_type (arg2);
3656   arg3_type = unlowered_expr_type (arg3);
3657   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3658     {
3659       /* Do the conversions.  We don't these for `void' type arguments
3660          since it can't have any effect and since decay_conversion
3661          does not handle that case gracefully.  */
3662       if (!VOID_TYPE_P (arg2_type))
3663         arg2 = decay_conversion (arg2);
3664       if (!VOID_TYPE_P (arg3_type))
3665         arg3 = decay_conversion (arg3);
3666       arg2_type = TREE_TYPE (arg2);
3667       arg3_type = TREE_TYPE (arg3);
3668
3669       /* [expr.cond]
3670
3671          One of the following shall hold:
3672
3673          --The second or the third operand (but not both) is a
3674            throw-expression (_except.throw_); the result is of the
3675            type of the other and is an rvalue.
3676
3677          --Both the second and the third operands have type void; the
3678            result is of type void and is an rvalue.
3679
3680          We must avoid calling force_rvalue for expressions of type
3681          "void" because it will complain that their value is being
3682          used.  */
3683       if (TREE_CODE (arg2) == THROW_EXPR
3684           && TREE_CODE (arg3) != THROW_EXPR)
3685         {
3686           if (!VOID_TYPE_P (arg3_type))
3687             arg3 = force_rvalue (arg3);
3688           arg3_type = TREE_TYPE (arg3);
3689           result_type = arg3_type;
3690         }
3691       else if (TREE_CODE (arg2) != THROW_EXPR
3692                && TREE_CODE (arg3) == THROW_EXPR)
3693         {
3694           if (!VOID_TYPE_P (arg2_type))
3695             arg2 = force_rvalue (arg2);
3696           arg2_type = TREE_TYPE (arg2);
3697           result_type = arg2_type;
3698         }
3699       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3700         result_type = void_type_node;
3701       else
3702         {
3703           if (complain & tf_error)
3704             {
3705               if (VOID_TYPE_P (arg2_type))
3706                 error ("second operand to the conditional operator "
3707                        "is of type %<void%>, "
3708                        "but the third operand is neither a throw-expression "
3709                        "nor of type %<void%>");
3710               else
3711                 error ("third operand to the conditional operator "
3712                        "is of type %<void%>, "
3713                        "but the second operand is neither a throw-expression "
3714                        "nor of type %<void%>");
3715             }
3716           return error_mark_node;
3717         }
3718
3719       lvalue_p = false;
3720       goto valid_operands;
3721     }
3722   /* [expr.cond]
3723
3724      Otherwise, if the second and third operand have different types,
3725      and either has (possibly cv-qualified) class type, an attempt is
3726      made to convert each of those operands to the type of the other.  */
3727   else if (!same_type_p (arg2_type, arg3_type)
3728            && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3729     {
3730       conversion *conv2;
3731       conversion *conv3;
3732
3733       /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3734       p = conversion_obstack_alloc (0);
3735
3736       conv2 = conditional_conversion (arg2, arg3);
3737       conv3 = conditional_conversion (arg3, arg2);
3738
3739       /* [expr.cond]
3740
3741          If both can be converted, or one can be converted but the
3742          conversion is ambiguous, the program is ill-formed.  If
3743          neither can be converted, the operands are left unchanged and
3744          further checking is performed as described below.  If exactly
3745          one conversion is possible, that conversion is applied to the
3746          chosen operand and the converted operand is used in place of
3747          the original operand for the remainder of this section.  */
3748       if ((conv2 && !conv2->bad_p
3749            && conv3 && !conv3->bad_p)
3750           || (conv2 && conv2->kind == ck_ambig)
3751           || (conv3 && conv3->kind == ck_ambig))
3752         {
3753           error ("operands to ?: have different types %qT and %qT",
3754                  arg2_type, arg3_type);
3755           result = error_mark_node;
3756         }
3757       else if (conv2 && (!conv2->bad_p || !conv3))
3758         {
3759           arg2 = convert_like (conv2, arg2, complain);
3760           arg2 = convert_from_reference (arg2);
3761           arg2_type = TREE_TYPE (arg2);
3762           /* Even if CONV2 is a valid conversion, the result of the
3763              conversion may be invalid.  For example, if ARG3 has type
3764              "volatile X", and X does not have a copy constructor
3765              accepting a "volatile X&", then even if ARG2 can be
3766              converted to X, the conversion will fail.  */
3767           if (error_operand_p (arg2))
3768             result = error_mark_node;
3769         }
3770       else if (conv3 && (!conv3->bad_p || !conv2))
3771         {
3772           arg3 = convert_like (conv3, arg3, complain);
3773           arg3 = convert_from_reference (arg3);
3774           arg3_type = TREE_TYPE (arg3);
3775           if (error_operand_p (arg3))
3776             result = error_mark_node;
3777         }
3778
3779       /* Free all the conversions we allocated.  */
3780       obstack_free (&conversion_obstack, p);
3781
3782       if (result)
3783         return result;
3784
3785       /* If, after the conversion, both operands have class type,
3786          treat the cv-qualification of both operands as if it were the
3787          union of the cv-qualification of the operands.
3788
3789          The standard is not clear about what to do in this
3790          circumstance.  For example, if the first operand has type
3791          "const X" and the second operand has a user-defined
3792          conversion to "volatile X", what is the type of the second
3793          operand after this step?  Making it be "const X" (matching
3794          the first operand) seems wrong, as that discards the
3795          qualification without actually performing a copy.  Leaving it
3796          as "volatile X" seems wrong as that will result in the
3797          conditional expression failing altogether, even though,
3798          according to this step, the one operand could be converted to
3799          the type of the other.  */
3800       if ((conv2 || conv3)
3801           && CLASS_TYPE_P (arg2_type)
3802           && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3803         arg2_type = arg3_type =
3804           cp_build_qualified_type (arg2_type,
3805                                    TYPE_QUALS (arg2_type)
3806                                    | TYPE_QUALS (arg3_type));
3807     }
3808
3809   /* [expr.cond]
3810
3811      If the second and third operands are lvalues and have the same
3812      type, the result is of that type and is an lvalue.  */
3813   if (real_lvalue_p (arg2)
3814       && real_lvalue_p (arg3)
3815       && same_type_p (arg2_type, arg3_type))
3816     {
3817       result_type = arg2_type;
3818       goto valid_operands;
3819     }
3820
3821   /* [expr.cond]
3822
3823      Otherwise, the result is an rvalue.  If the second and third
3824      operand do not have the same type, and either has (possibly
3825      cv-qualified) class type, overload resolution is used to
3826      determine the conversions (if any) to be applied to the operands
3827      (_over.match.oper_, _over.built_).  */
3828   lvalue_p = false;
3829   if (!same_type_p (arg2_type, arg3_type)
3830       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3831     {
3832       tree args[3];
3833       conversion *conv;
3834       bool any_viable_p;
3835
3836       /* Rearrange the arguments so that add_builtin_candidate only has
3837          to know about two args.  In build_builtin_candidate, the
3838          arguments are unscrambled.  */
3839       args[0] = arg2;
3840       args[1] = arg3;
3841       args[2] = arg1;
3842       add_builtin_candidates (&candidates,
3843                               COND_EXPR,
3844                               NOP_EXPR,
3845                               ansi_opname (COND_EXPR),
3846                               args,
3847                               LOOKUP_NORMAL);
3848
3849       /* [expr.cond]
3850
3851          If the overload resolution fails, the program is
3852          ill-formed.  */
3853       candidates = splice_viable (candidates, pedantic, &any_viable_p);
3854       if (!any_viable_p)
3855         {
3856           if (complain & tf_error)
3857             {
3858               op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3859               print_z_candidates (candidates);
3860             }
3861           return error_mark_node;
3862         }
3863       cand = tourney (candidates);
3864       if (!cand)
3865         {
3866           if (complain & tf_error)
3867             {
3868               op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3869               print_z_candidates (candidates);
3870             }
3871           return error_mark_node;
3872         }
3873
3874       /* [expr.cond]
3875
3876          Otherwise, the conversions thus determined are applied, and
3877          the converted operands are used in place of the original
3878          operands for the remainder of this section.  */
3879       conv = cand->convs[0];
3880       arg1 = convert_like (conv, arg1, complain);
3881       conv = cand->convs[1];
3882       arg2 = convert_like (conv, arg2, complain);
3883       arg2_type = TREE_TYPE (arg2);
3884       conv = cand->convs[2];
3885       arg3 = convert_like (conv, arg3, complain);
3886       arg3_type = TREE_TYPE (arg3);
3887     }
3888
3889   /* [expr.cond]
3890
3891      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3892      and function-to-pointer (_conv.func_) standard conversions are
3893      performed on the second and third operands.
3894
3895      We need to force the lvalue-to-rvalue conversion here for class types,
3896      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3897      that isn't wrapped with a TARGET_EXPR plays havoc with exception
3898      regions.  */
3899
3900   arg2 = force_rvalue (arg2);
3901   if (!CLASS_TYPE_P (arg2_type))
3902     arg2_type = TREE_TYPE (arg2);
3903
3904   arg3 = force_rvalue (arg3);
3905   if (!CLASS_TYPE_P (arg3_type))
3906     arg3_type = TREE_TYPE (arg3);
3907
3908   if (arg2 == error_mark_node || arg3 == error_mark_node)
3909     return error_mark_node;
3910
3911   /* [expr.cond]
3912
3913      After those conversions, one of the following shall hold:
3914
3915      --The second and third operands have the same type; the result  is  of
3916        that type.  */
3917   if (same_type_p (arg2_type, arg3_type))
3918     result_type = arg2_type;
3919   /* [expr.cond]
3920
3921      --The second and third operands have arithmetic or enumeration
3922        type; the usual arithmetic conversions are performed to bring
3923        them to a common type, and the result is of that type.  */
3924   else if ((ARITHMETIC_TYPE_P (arg2_type)
3925             || UNSCOPED_ENUM_P (arg2_type))
3926            && (ARITHMETIC_TYPE_P (arg3_type)
3927                || UNSCOPED_ENUM_P (arg3_type)))
3928     {
3929       /* In this case, there is always a common type.  */
3930       result_type = type_after_usual_arithmetic_conversions (arg2_type,
3931                                                              arg3_type);
3932
3933       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3934           && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3935         {
3936           if (complain & tf_warning)
3937             warning (0, 
3938                      "enumeral mismatch in conditional expression: %qT vs %qT",
3939                      arg2_type, arg3_type);
3940         }
3941       else if (extra_warnings
3942                && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3943                     && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3944                    || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3945                        && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3946         {
3947           if (complain & tf_warning)
3948             warning (0, 
3949                      "enumeral and non-enumeral type in conditional expression");
3950         }
3951
3952       arg2 = perform_implicit_conversion (result_type, arg2, complain);
3953       arg3 = perform_implicit_conversion (result_type, arg3, complain);
3954     }
3955   /* [expr.cond]
3956
3957      --The second and third operands have pointer type, or one has
3958        pointer type and the other is a null pointer constant; pointer
3959        conversions (_conv.ptr_) and qualification conversions
3960        (_conv.qual_) are performed to bring them to their composite
3961        pointer type (_expr.rel_).  The result is of the composite
3962        pointer type.
3963
3964      --The second and third operands have pointer to member type, or
3965        one has pointer to member type and the other is a null pointer
3966        constant; pointer to member conversions (_conv.mem_) and
3967        qualification conversions (_conv.qual_) are performed to bring
3968        them to a common type, whose cv-qualification shall match the
3969        cv-qualification of either the second or the third operand.
3970        The result is of the common type.  */
3971   else if ((null_ptr_cst_p (arg2)
3972             && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3973            || (null_ptr_cst_p (arg3)
3974                && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3975            || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3976            || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3977            || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3978     {
3979       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3980                                             arg3, "conditional expression",
3981                                             complain);
3982       if (result_type == error_mark_node)
3983         return error_mark_node;
3984       arg2 = perform_implicit_conversion (result_type, arg2, complain);
3985       arg3 = perform_implicit_conversion (result_type, arg3, complain);
3986     }
3987
3988   if (!result_type)
3989     {
3990       if (complain & tf_error)
3991         error ("operands to ?: have different types %qT and %qT",
3992                arg2_type, arg3_type);
3993       return error_mark_node;
3994     }
3995
3996  valid_operands:
3997   result_save = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
3998   result = fold_if_not_in_template (result_save);
3999
4000   if (cp_unevaluated_operand && TREE_CODE (result) == CALL_EXPR)
4001     /* Avoid folding to a CALL_EXPR within decltype (c++/42013).  */
4002     result = result_save;
4003
4004   /* We can't use result_type below, as fold might have returned a
4005      throw_expr.  */
4006
4007   if (!lvalue_p)
4008     {
4009       /* Expand both sides into the same slot, hopefully the target of
4010          the ?: expression.  We used to check for TARGET_EXPRs here,
4011          but now we sometimes wrap them in NOP_EXPRs so the test would
4012          fail.  */
4013       if (CLASS_TYPE_P (TREE_TYPE (result)))
4014         result = get_target_expr (result);
4015       /* If this expression is an rvalue, but might be mistaken for an
4016          lvalue, we must add a NON_LVALUE_EXPR.  */
4017       result = rvalue (result);
4018     }
4019
4020   return result;
4021 }
4022
4023 /* OPERAND is an operand to an expression.  Perform necessary steps
4024    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
4025    returned.  */
4026
4027 static tree
4028 prep_operand (tree operand)
4029 {
4030   if (operand)
4031     {
4032       if (CLASS_TYPE_P (TREE_TYPE (operand))
4033           && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4034         /* Make sure the template type is instantiated now.  */
4035         instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4036     }
4037
4038   return operand;
4039 }
4040
4041 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4042    OVERLOAD) to the CANDIDATES, returning an updated list of
4043    CANDIDATES.  The ARGS are the arguments provided to the call,
4044    without any implicit object parameter.  This may change ARGS.  The
4045    EXPLICIT_TARGS are explicit template arguments provided.
4046    TEMPLATE_ONLY is true if only template functions should be
4047    considered.  CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4048    add_function_candidate.  */
4049
4050 static void
4051 add_candidates (tree fns, const VEC(tree,gc) *args,
4052                 tree explicit_targs, bool template_only,
4053                 tree conversion_path, tree access_path,
4054                 int flags,
4055                 struct z_candidate **candidates)
4056 {
4057   tree ctype;
4058   VEC(tree,gc) *non_static_args;
4059   tree first_arg;
4060
4061   ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4062   /* Delay creating the implicit this parameter until it is needed.  */
4063   non_static_args = NULL;
4064   first_arg = NULL_TREE;
4065
4066   while (fns)
4067     {
4068       tree fn;
4069       tree fn_first_arg;
4070       const VEC(tree,gc) *fn_args;
4071
4072       fn = OVL_CURRENT (fns);
4073       /* Figure out which set of arguments to use.  */
4074       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4075         {
4076           /* If this function is a non-static member, prepend the implicit
4077              object parameter.  */
4078           if (non_static_args == NULL)
4079             {
4080               unsigned int ix;
4081               tree arg;
4082
4083               non_static_args = VEC_alloc (tree, gc,
4084                                            VEC_length (tree, args) - 1);
4085               for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4086                 VEC_quick_push (tree, non_static_args, arg);
4087             }
4088           if (first_arg == NULL_TREE)
4089             first_arg = build_this (VEC_index (tree, args, 0));
4090           fn_first_arg = first_arg;
4091           fn_args = non_static_args;
4092         }
4093       else
4094         {
4095           /* Otherwise, just use the list of arguments provided.  */
4096           fn_first_arg = NULL_TREE;
4097           fn_args = args;
4098         }
4099
4100       if (TREE_CODE (fn) == TEMPLATE_DECL)
4101         add_template_candidate (candidates,
4102                                 fn,
4103                                 ctype,
4104                                 explicit_targs,
4105                                 fn_first_arg, 
4106                                 fn_args,
4107                                 NULL_TREE,
4108                                 access_path,
4109                                 conversion_path,
4110                                 flags,
4111                                 DEDUCE_CALL);
4112       else if (!template_only)
4113         add_function_candidate (candidates,
4114                                 fn,
4115                                 ctype,
4116                                 fn_first_arg,
4117                                 fn_args,
4118                                 access_path,
4119                                 conversion_path,
4120                                 flags);
4121       fns = OVL_NEXT (fns);
4122     }
4123 }
4124
4125 /* Even unsigned enum types promote to signed int.  We don't want to
4126    issue -Wsign-compare warnings for this case.  Here ORIG_ARG is the
4127    original argument and ARG is the argument after any conversions
4128    have been applied.  We set TREE_NO_WARNING if we have added a cast
4129    from an unsigned enum type to a signed integer type.  */
4130
4131 static void
4132 avoid_sign_compare_warnings (tree orig_arg, tree arg)
4133 {
4134   if (orig_arg != NULL_TREE
4135       && arg != NULL_TREE
4136       && orig_arg != arg
4137       && TREE_CODE (TREE_TYPE (orig_arg)) == ENUMERAL_TYPE
4138       && TYPE_UNSIGNED (TREE_TYPE (orig_arg))
4139       && INTEGRAL_TYPE_P (TREE_TYPE (arg))
4140       && !TYPE_UNSIGNED (TREE_TYPE (arg)))
4141     TREE_NO_WARNING (arg) = 1;
4142 }
4143
4144 tree
4145 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
4146               bool *overloaded_p, tsubst_flags_t complain)
4147 {
4148   tree orig_arg1 = arg1;
4149   tree orig_arg2 = arg2;
4150   tree orig_arg3 = arg3;
4151   struct z_candidate *candidates = 0, *cand;
4152   VEC(tree,gc) *arglist;
4153   tree fnname;
4154   tree args[3];
4155   tree result = NULL_TREE;
4156   bool result_valid_p = false;
4157   enum tree_code code2 = NOP_EXPR;
4158   enum tree_code code_orig_arg1 = ERROR_MARK;
4159   enum tree_code code_orig_arg2 = ERROR_MARK;
4160   conversion *conv;
4161   void *p;
4162   bool strict_p;
4163   bool any_viable_p;
4164
4165   if (error_operand_p (arg1)
4166       || error_operand_p (arg2)
4167       || error_operand_p (arg3))
4168     return error_mark_node;
4169
4170   if (code == MODIFY_EXPR)
4171     {
4172       code2 = TREE_CODE (arg3);
4173       arg3 = NULL_TREE;
4174       fnname = ansi_assopname (code2);
4175     }
4176   else
4177     fnname = ansi_opname (code);
4178
4179   arg1 = prep_operand (arg1);
4180
4181   switch (code)
4182     {
4183     case NEW_EXPR:
4184     case VEC_NEW_EXPR:
4185     case VEC_DELETE_EXPR:
4186     case DELETE_EXPR:
4187       /* Use build_op_new_call and build_op_delete_call instead.  */
4188       gcc_unreachable ();
4189
4190     case CALL_EXPR:
4191       /* Use build_op_call instead.  */
4192       gcc_unreachable ();
4193
4194     case TRUTH_ORIF_EXPR:
4195     case TRUTH_ANDIF_EXPR:
4196     case TRUTH_AND_EXPR:
4197     case TRUTH_OR_EXPR:
4198       /* These are saved for the sake of warn_logical_operator.  */
4199       code_orig_arg1 = TREE_CODE (arg1);
4200       code_orig_arg2 = TREE_CODE (arg2);
4201
4202     default:
4203       break;
4204     }
4205
4206   arg2 = prep_operand (arg2);
4207   arg3 = prep_operand (arg3);
4208
4209   if (code == COND_EXPR)
4210     /* Use build_conditional_expr instead.  */
4211     gcc_unreachable ();
4212   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4213            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4214     goto builtin;
4215
4216   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4217     arg2 = integer_zero_node;
4218
4219   arglist = VEC_alloc (tree, gc, 3);
4220   VEC_quick_push (tree, arglist, arg1);
4221   if (arg2 != NULL_TREE)
4222     VEC_quick_push (tree, arglist, arg2);
4223   if (arg3 != NULL_TREE)
4224     VEC_quick_push (tree, arglist, arg3);
4225
4226   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4227   p = conversion_obstack_alloc (0);
4228
4229   /* Add namespace-scope operators to the list of functions to
4230      consider.  */
4231   add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
4232                   arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
4233                   flags, &candidates);
4234   /* Add class-member operators to the candidate set.  */
4235   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
4236     {
4237       tree fns;
4238
4239       fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
4240       if (fns == error_mark_node)
4241         {
4242           result = error_mark_node;
4243           goto user_defined_result_ready;
4244         }
4245       if (fns)
4246         add_candidates (BASELINK_FUNCTIONS (fns), arglist,
4247                         NULL_TREE, false,
4248                         BASELINK_BINFO (fns),
4249                         TYPE_BINFO (TREE_TYPE (arg1)),
4250                         flags, &candidates);
4251     }
4252
4253   args[0] = arg1;
4254   args[1] = arg2;
4255   args[2] = NULL_TREE;
4256
4257   add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
4258
4259   switch (code)
4260     {
4261     case COMPOUND_EXPR:
4262     case ADDR_EXPR:
4263       /* For these, the built-in candidates set is empty
4264          [over.match.oper]/3.  We don't want non-strict matches
4265          because exact matches are always possible with built-in
4266          operators.  The built-in candidate set for COMPONENT_REF
4267          would be empty too, but since there are no such built-in
4268          operators, we accept non-strict matches for them.  */
4269       strict_p = true;
4270       break;
4271
4272     default:
4273       strict_p = pedantic;
4274       break;
4275     }
4276
4277   candidates = splice_viable (candidates, strict_p, &any_viable_p);
4278   if (!any_viable_p)
4279     {
4280       switch (code)
4281         {
4282         case POSTINCREMENT_EXPR:
4283         case POSTDECREMENT_EXPR:
4284           /* Don't try anything fancy if we're not allowed to produce
4285              errors.  */
4286           if (!(complain & tf_error))
4287             return error_mark_node;
4288
4289           /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
4290              distinguish between prefix and postfix ++ and
4291              operator++() was used for both, so we allow this with
4292              -fpermissive.  */
4293           if (flags & LOOKUP_COMPLAIN)
4294             {
4295               const char *msg = (flag_permissive) 
4296                 ? G_("no %<%D(int)%> declared for postfix %qs,"
4297                      " trying prefix operator instead")
4298                 : G_("no %<%D(int)%> declared for postfix %qs");
4299               permerror (input_location, msg, fnname,
4300                          operator_name_info[code].name);
4301             }
4302
4303           if (!flag_permissive)
4304             return error_mark_node;
4305
4306           if (code == POSTINCREMENT_EXPR)
4307             code = PREINCREMENT_EXPR;
4308           else
4309             code = PREDECREMENT_EXPR;
4310           result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
4311                                  overloaded_p, complain);
4312           break;
4313
4314           /* The caller will deal with these.  */
4315         case ADDR_EXPR:
4316         case COMPOUND_EXPR:
4317         case COMPONENT_REF:
4318           result = NULL_TREE;
4319           result_valid_p = true;
4320           break;
4321
4322         default:
4323           if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4324             {
4325                 /* If one of the arguments of the operator represents
4326                    an invalid use of member function pointer, try to report
4327                    a meaningful error ...  */
4328                 if (invalid_nonstatic_memfn_p (arg1, tf_error)
4329                     || invalid_nonstatic_memfn_p (arg2, tf_error)
4330                     || invalid_nonstatic_memfn_p (arg3, tf_error))
4331                   /* We displayed the error message.  */;
4332                 else
4333                   {
4334                     /* ... Otherwise, report the more generic
4335                        "no matching operator found" error */
4336                     op_error (code, code2, arg1, arg2, arg3, "no match");
4337                     print_z_candidates (candidates);
4338                   }
4339             }
4340           result = error_mark_node;
4341           break;
4342         }
4343     }
4344   else
4345     {
4346       cand = tourney (candidates);
4347       if (cand == 0)
4348         {
4349           if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4350             {
4351               op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4352               print_z_candidates (candidates);
4353             }
4354           result = error_mark_node;
4355         }
4356       else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4357         {
4358           if (overloaded_p)
4359             *overloaded_p = true;
4360
4361           if (resolve_args (arglist) == NULL)
4362             result = error_mark_node;
4363           else
4364             result = build_over_call (cand, LOOKUP_NORMAL, complain);
4365         }
4366       else
4367         {
4368           /* Give any warnings we noticed during overload resolution.  */
4369           if (cand->warnings && (complain & tf_warning))
4370             {
4371               struct candidate_warning *w;
4372               for (w = cand->warnings; w; w = w->next)
4373                 joust (cand, w->loser, 1);
4374             }
4375
4376           /* Check for comparison of different enum types.  */
4377           switch (code)
4378             {
4379             case GT_EXPR:
4380             case LT_EXPR:
4381             case GE_EXPR:
4382             case LE_EXPR:
4383             case EQ_EXPR:
4384             case NE_EXPR:
4385               if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4386                   && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4387                   && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4388                       != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
4389                   && (complain & tf_warning))
4390                 {
4391                   warning (OPT_Wenum_compare,
4392                            "comparison between %q#T and %q#T",
4393                            TREE_TYPE (arg1), TREE_TYPE (arg2));
4394                 }
4395               break;
4396             default:
4397               break;
4398             }
4399
4400           /* We need to strip any leading REF_BIND so that bitfields
4401              don't cause errors.  This should not remove any important
4402              conversions, because builtins don't apply to class
4403              objects directly.  */
4404           conv = cand->convs[0];
4405           if (conv->kind == ck_ref_bind)
4406             conv = conv->u.next;
4407           arg1 = convert_like (conv, arg1, complain);
4408
4409           if (arg2)
4410             {
4411               /* We need to call warn_logical_operator before
4412                  converting arg2 to a boolean_type.  */
4413               if (complain & tf_warning)
4414                 warn_logical_operator (input_location, code, boolean_type_node,
4415                                        code_orig_arg1, arg1,
4416                                        code_orig_arg2, arg2);
4417
4418               conv = cand->convs[1];
4419               if (conv->kind == ck_ref_bind)
4420                 conv = conv->u.next;
4421               arg2 = convert_like (conv, arg2, complain);
4422             }
4423           if (arg3)
4424             {
4425               conv = cand->convs[2];
4426               if (conv->kind == ck_ref_bind)
4427                 conv = conv->u.next;
4428               arg3 = convert_like (conv, arg3, complain);
4429             }
4430
4431         }
4432     }
4433
4434  user_defined_result_ready:
4435
4436   /* Free all the conversions we allocated.  */
4437   obstack_free (&conversion_obstack, p);
4438
4439   if (result || result_valid_p)
4440     return result;
4441
4442  builtin:
4443   avoid_sign_compare_warnings (orig_arg1, arg1);
4444   avoid_sign_compare_warnings (orig_arg2, arg2);
4445   avoid_sign_compare_warnings (orig_arg3, arg3);
4446
4447   switch (code)
4448     {
4449     case MODIFY_EXPR:
4450       return cp_build_modify_expr (arg1, code2, arg2, complain);
4451
4452     case INDIRECT_REF:
4453       return cp_build_indirect_ref (arg1, "unary *", complain);
4454
4455     case TRUTH_ANDIF_EXPR:
4456     case TRUTH_ORIF_EXPR:
4457     case TRUTH_AND_EXPR:
4458     case TRUTH_OR_EXPR:
4459       warn_logical_operator (input_location, code, boolean_type_node,
4460                              code_orig_arg1, arg1, code_orig_arg2, arg2);
4461       /* Fall through.  */
4462     case PLUS_EXPR:
4463     case MINUS_EXPR:
4464     case MULT_EXPR:
4465     case TRUNC_DIV_EXPR:
4466     case GT_EXPR:
4467     case LT_EXPR:
4468     case GE_EXPR:
4469     case LE_EXPR:
4470     case EQ_EXPR:
4471     case NE_EXPR:
4472     case MAX_EXPR:
4473     case MIN_EXPR:
4474     case LSHIFT_EXPR:
4475     case RSHIFT_EXPR:
4476     case TRUNC_MOD_EXPR:
4477     case BIT_AND_EXPR:
4478     case BIT_IOR_EXPR:
4479     case BIT_XOR_EXPR:
4480       return cp_build_binary_op (input_location, code, arg1, arg2, complain);
4481
4482     case UNARY_PLUS_EXPR:
4483     case NEGATE_EXPR:
4484     case BIT_NOT_EXPR:
4485     case TRUTH_NOT_EXPR:
4486     case PREINCREMENT_EXPR:
4487     case POSTINCREMENT_EXPR:
4488     case PREDECREMENT_EXPR:
4489     case POSTDECREMENT_EXPR:
4490     case REALPART_EXPR:
4491     case IMAGPART_EXPR:
4492       return cp_build_unary_op (code, arg1, candidates != 0, complain);
4493
4494     case ARRAY_REF:
4495       return build_array_ref (input_location, arg1, arg2);
4496
4497     case MEMBER_REF:
4498       return build_m_component_ref (cp_build_indirect_ref (arg1, NULL, 
4499                                                            complain), 
4500                                     arg2);
4501
4502       /* The caller will deal with these.  */
4503     case ADDR_EXPR:
4504     case COMPONENT_REF:
4505     case COMPOUND_EXPR:
4506       return NULL_TREE;
4507
4508     default:
4509       gcc_unreachable ();
4510     }
4511   return NULL_TREE;
4512 }
4513
4514 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
4515    deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]).  */
4516
4517 static bool
4518 non_placement_deallocation_fn_p (tree t)
4519 {
4520   /* A template instance is never a usual deallocation function,
4521      regardless of its signature.  */
4522   if (TREE_CODE (t) == TEMPLATE_DECL
4523       || primary_template_instantiation_p (t))
4524     return false;
4525
4526   /* If a class T has a member deallocation function named operator delete
4527      with exactly one parameter, then that function is a usual
4528      (non-placement) deallocation function. If class T does not declare
4529      such an operator delete but does declare a member deallocation
4530      function named operator delete with exactly two parameters, the second
4531      of which has type std::size_t (18.2), then this function is a usual
4532      deallocation function.  */
4533   t = FUNCTION_ARG_CHAIN (t);
4534   if (t == void_list_node
4535       || (t && same_type_p (TREE_VALUE (t), size_type_node)
4536           && TREE_CHAIN (t) == void_list_node))
4537     return true;
4538   return false;
4539 }
4540
4541 /* Build a call to operator delete.  This has to be handled very specially,
4542    because the restrictions on what signatures match are different from all
4543    other call instances.  For a normal delete, only a delete taking (void *)
4544    or (void *, size_t) is accepted.  For a placement delete, only an exact
4545    match with the placement new is accepted.
4546
4547    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4548    ADDR is the pointer to be deleted.
4549    SIZE is the size of the memory block to be deleted.
4550    GLOBAL_P is true if the delete-expression should not consider
4551    class-specific delete operators.
4552    PLACEMENT is the corresponding placement new call, or NULL_TREE.
4553
4554    If this call to "operator delete" is being generated as part to
4555    deallocate memory allocated via a new-expression (as per [expr.new]
4556    which requires that if the initialization throws an exception then
4557    we call a deallocation function), then ALLOC_FN is the allocation
4558    function.  */
4559
4560 tree
4561 build_op_delete_call (enum tree_code code, tree addr, tree size,
4562                       bool global_p, tree placement,
4563                       tree alloc_fn)
4564 {
4565   tree fn = NULL_TREE;
4566   tree fns, fnname, type, t;
4567
4568   if (addr == error_mark_node)
4569     return error_mark_node;
4570
4571   type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
4572
4573   fnname = ansi_opname (code);
4574
4575   if (CLASS_TYPE_P (type)
4576       && COMPLETE_TYPE_P (complete_type (type))
4577       && !global_p)
4578     /* In [class.free]
4579
4580        If the result of the lookup is ambiguous or inaccessible, or if
4581        the lookup selects a placement deallocation function, the
4582        program is ill-formed.
4583
4584        Therefore, we ask lookup_fnfields to complain about ambiguity.  */
4585     {
4586       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
4587       if (fns == error_mark_node)
4588         return error_mark_node;
4589     }
4590   else
4591     fns = NULL_TREE;
4592
4593   if (fns == NULL_TREE)
4594     fns = lookup_name_nonclass (fnname);
4595
4596   /* Strip const and volatile from addr.  */
4597   addr = cp_convert (ptr_type_node, addr);
4598
4599   if (placement)
4600     {
4601       /* "A declaration of a placement deallocation function matches the
4602          declaration of a placement allocation function if it has the same
4603          number of parameters and, after parameter transformations (8.3.5),
4604          all parameter types except the first are identical."
4605
4606          So we build up the function type we want and ask instantiate_type
4607          to get it for us.  */
4608       t = FUNCTION_ARG_CHAIN (alloc_fn);
4609       t = tree_cons (NULL_TREE, ptr_type_node, t);
4610       t = build_function_type (void_type_node, t);
4611
4612       fn = instantiate_type (t, fns, tf_none);
4613       if (fn == error_mark_node)
4614         return NULL_TREE;
4615
4616       if (BASELINK_P (fn))
4617         fn = BASELINK_FUNCTIONS (fn);
4618
4619       /* "If the lookup finds the two-parameter form of a usual deallocation
4620          function (3.7.4.2) and that function, considered as a placement
4621          deallocation function, would have been selected as a match for the
4622          allocation function, the program is ill-formed."  */
4623       if (non_placement_deallocation_fn_p (fn))
4624         {
4625           /* But if the class has an operator delete (void *), then that is
4626              the usual deallocation function, so we shouldn't complain
4627              about using the operator delete (void *, size_t).  */
4628           for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4629                t; t = OVL_NEXT (t))
4630             {
4631               tree elt = OVL_CURRENT (t);
4632               if (non_placement_deallocation_fn_p (elt)
4633                   && FUNCTION_ARG_CHAIN (elt) == void_list_node)
4634                 goto ok;
4635             }
4636           permerror (0, "non-placement deallocation function %q+D", fn);
4637           permerror (input_location, "selected for placement delete");
4638         ok:;
4639         }
4640     }
4641   else
4642     /* "Any non-placement deallocation function matches a non-placement
4643        allocation function. If the lookup finds a single matching
4644        deallocation function, that function will be called; otherwise, no
4645        deallocation function will be called."  */
4646     for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4647          t; t = OVL_NEXT (t))
4648       {
4649         tree elt = OVL_CURRENT (t);
4650         if (non_placement_deallocation_fn_p (elt))
4651           {
4652             fn = elt;
4653             /* "If a class T has a member deallocation function named
4654                operator delete with exactly one parameter, then that
4655                function is a usual (non-placement) deallocation
4656                function. If class T does not declare such an operator
4657                delete but does declare a member deallocation function named
4658                operator delete with exactly two parameters, the second of
4659                which has type std::size_t (18.2), then this function is a
4660                usual deallocation function."
4661
4662                So (void*) beats (void*, size_t).  */
4663             if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
4664               break;
4665           }
4666       }
4667
4668   /* If we have a matching function, call it.  */
4669   if (fn)
4670     {
4671       gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
4672
4673       /* If the FN is a member function, make sure that it is
4674          accessible.  */
4675       if (BASELINK_P (fns))
4676         perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn);
4677
4678       /* Core issue 901: It's ok to new a type with deleted delete.  */
4679       if (DECL_DELETED_FN (fn) && alloc_fn)
4680         return NULL_TREE;
4681
4682       if (placement)
4683         {
4684           /* The placement args might not be suitable for overload
4685              resolution at this point, so build the call directly.  */
4686           int nargs = call_expr_nargs (placement);
4687           tree *argarray = (tree *) alloca (nargs * sizeof (tree));
4688           int i;
4689           argarray[0] = addr;
4690           for (i = 1; i < nargs; i++)
4691             argarray[i] = CALL_EXPR_ARG (placement, i);
4692           mark_used (fn);
4693           return build_cxx_call (fn, nargs, argarray);
4694         }
4695       else
4696         {
4697           tree ret;
4698           VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
4699           VEC_quick_push (tree, args, addr);
4700           if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
4701             VEC_quick_push (tree, args, size);
4702           ret = cp_build_function_call_vec (fn, &args, tf_warning_or_error);
4703           VEC_free (tree, gc, args);
4704           return ret;
4705         }
4706     }
4707
4708   /* [expr.new]
4709
4710      If no unambiguous matching deallocation function can be found,
4711      propagating the exception does not cause the object's memory to
4712      be freed.  */
4713   if (alloc_fn)
4714     {
4715       if (!placement)
4716         warning (0, "no corresponding deallocation function for %qD",
4717                  alloc_fn);
4718       return NULL_TREE;
4719     }
4720
4721   error ("no suitable %<operator %s%> for %qT",
4722          operator_name_info[(int)code].name, type);
4723   return error_mark_node;
4724 }
4725
4726 /* If the current scope isn't allowed to access DECL along
4727    BASETYPE_PATH, give an error.  The most derived class in
4728    BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4729    the declaration to use in the error diagnostic.  */
4730
4731 bool
4732 enforce_access (tree basetype_path, tree decl, tree diag_decl)
4733 {
4734   gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4735
4736   if (!accessible_p (basetype_path, decl, true))
4737     {
4738       if (TREE_PRIVATE (decl))
4739         error ("%q+#D is private", diag_decl);
4740       else if (TREE_PROTECTED (decl))
4741         error ("%q+#D is protected", diag_decl);
4742       else
4743         error ("%q+#D is inaccessible", diag_decl);
4744       error ("within this context");
4745       return false;
4746     }
4747
4748   return true;
4749 }
4750
4751 /* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
4752    bitwise or of LOOKUP_* values.  If any errors are warnings are
4753    generated, set *DIAGNOSTIC_FN to "error" or "warning",
4754    respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
4755    to NULL.  */
4756
4757 static tree
4758 build_temp (tree expr, tree type, int flags,
4759             diagnostic_t *diagnostic_kind)
4760 {
4761   int savew, savee;
4762   VEC(tree,gc) *args;
4763
4764   savew = warningcount, savee = errorcount;
4765   args = make_tree_vector_single (expr);
4766   expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4767                                     &args, type, flags, tf_warning_or_error);
4768   release_tree_vector (args);
4769   if (warningcount > savew)
4770     *diagnostic_kind = DK_WARNING;
4771   else if (errorcount > savee)
4772     *diagnostic_kind = DK_ERROR;
4773   else
4774     *diagnostic_kind = DK_UNSPECIFIED;
4775   return expr;
4776 }
4777
4778 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4779    EXPR is implicitly converted to type TOTYPE.
4780    FN and ARGNUM are used for diagnostics.  */
4781
4782 static void
4783 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
4784 {
4785   tree t = non_reference (totype);
4786
4787   /* Issue warnings about peculiar, but valid, uses of NULL.  */
4788   if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
4789     {
4790       if (fn)
4791         warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
4792                  argnum, fn);
4793       else
4794         warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
4795     }
4796
4797   /* Issue warnings if "false" is converted to a NULL pointer */
4798   else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
4799     warning (OPT_Wconversion,
4800              "converting %<false%> to pointer type for argument %P of %qD",
4801              argnum, fn);
4802 }
4803
4804 /* Perform the conversions in CONVS on the expression EXPR.  FN and
4805    ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
4806    indicates the `this' argument of a method.  INNER is nonzero when
4807    being called to continue a conversion chain. It is negative when a
4808    reference binding will be applied, positive otherwise.  If
4809    ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4810    conversions will be emitted if appropriate.  If C_CAST_P is true,
4811    this conversion is coming from a C-style cast; in that case,
4812    conversions to inaccessible bases are permitted.  */
4813
4814 static tree
4815 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4816                    int inner, bool issue_conversion_warnings,
4817                    bool c_cast_p, tsubst_flags_t complain)
4818 {
4819   tree totype = convs->type;
4820   diagnostic_t diag_kind;
4821   int flags;
4822
4823   if (convs->bad_p
4824       && convs->kind != ck_user
4825       && convs->kind != ck_list
4826       && convs->kind != ck_ambig
4827       && convs->kind != ck_ref_bind
4828       && convs->kind != ck_rvalue
4829       && convs->kind != ck_base)
4830     {
4831       conversion *t = convs;
4832
4833       /* Give a helpful error if this is bad because of excess braces.  */
4834       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
4835           && SCALAR_TYPE_P (totype)
4836           && CONSTRUCTOR_NELTS (expr) > 0
4837           && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
4838         permerror (input_location, "too many braces around initializer for %qT", totype);
4839
4840       for (; t; t = convs->u.next)
4841         {
4842           if (t->kind == ck_user || !t->bad_p)
4843             {
4844               expr = convert_like_real (t, expr, fn, argnum, 1,
4845                                         /*issue_conversion_warnings=*/false,
4846                                         /*c_cast_p=*/false,
4847                                         complain);
4848               break;
4849             }
4850           else if (t->kind == ck_ambig)
4851             return convert_like_real (t, expr, fn, argnum, 1,
4852                                       /*issue_conversion_warnings=*/false,
4853                                       /*c_cast_p=*/false,
4854                                       complain);
4855           else if (t->kind == ck_identity)
4856             break;
4857         }
4858       if (complain & tf_error)
4859         {
4860           permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4861           if (fn)
4862             permerror (input_location, "  initializing argument %P of %qD", argnum, fn);
4863         }
4864       else
4865         return error_mark_node;
4866
4867       return cp_convert (totype, expr);
4868     }
4869
4870   if (issue_conversion_warnings && (complain & tf_warning))
4871     conversion_null_warnings (totype, expr, fn, argnum);
4872
4873   switch (convs->kind)
4874     {
4875     case ck_user:
4876       {
4877         struct z_candidate *cand = convs->cand;
4878         tree convfn = cand->fn;
4879         unsigned i;
4880
4881         /* When converting from an init list we consider explicit
4882            constructors, but actually trying to call one is an error.  */
4883         if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn))
4884           {
4885             if (complain & tf_error)
4886               error ("converting to %qT from initializer list would use "
4887                      "explicit constructor %qD", totype, convfn);
4888             else
4889               return error_mark_node;
4890           }
4891
4892         /* Set user_conv_p on the argument conversions, so rvalue/base
4893            handling knows not to allow any more UDCs.  */
4894         for (i = 0; i < cand->num_convs; ++i)
4895           cand->convs[i]->user_conv_p = true;
4896
4897         expr = build_over_call (cand, LOOKUP_NORMAL, complain);
4898
4899         /* If this is a constructor or a function returning an aggr type,
4900            we need to build up a TARGET_EXPR.  */
4901         if (DECL_CONSTRUCTOR_P (convfn))
4902           {
4903             expr = build_cplus_new (totype, expr);
4904
4905             /* Remember that this was list-initialization.  */
4906             if (convs->check_narrowing)
4907               TARGET_EXPR_LIST_INIT_P (expr) = true;
4908           }
4909
4910         return expr;
4911       }
4912     case ck_identity:
4913       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
4914         {
4915           int nelts = CONSTRUCTOR_NELTS (expr);
4916           if (nelts == 0)
4917             expr = integer_zero_node;
4918           else if (nelts == 1)
4919             expr = CONSTRUCTOR_ELT (expr, 0)->value;
4920           else
4921             gcc_unreachable ();
4922         }
4923
4924       if (type_unknown_p (expr))
4925         expr = instantiate_type (totype, expr, complain);
4926       /* Convert a constant to its underlying value, unless we are
4927          about to bind it to a reference, in which case we need to
4928          leave it as an lvalue.  */
4929       if (inner >= 0)
4930         {   
4931           expr = decl_constant_value (expr);
4932           if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
4933             /* If __null has been converted to an integer type, we do not
4934                want to warn about uses of EXPR as an integer, rather than
4935                as a pointer.  */
4936             expr = build_int_cst (totype, 0);
4937         }
4938       return expr;
4939     case ck_ambig:
4940       /* Call build_user_type_conversion again for the error.  */
4941       return build_user_type_conversion
4942         (totype, convs->u.expr, LOOKUP_NORMAL);
4943
4944     case ck_list:
4945       {
4946         /* Conversion to std::initializer_list<T>.  */
4947         tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
4948         tree new_ctor = build_constructor (init_list_type_node, NULL);
4949         unsigned len = CONSTRUCTOR_NELTS (expr);
4950         tree array, val;
4951         VEC(tree,gc) *parms;
4952         unsigned ix;
4953
4954         /* Convert all the elements.  */
4955         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
4956           {
4957             tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
4958                                           1, false, false, complain);
4959             if (sub == error_mark_node)
4960               return sub;
4961             check_narrowing (TREE_TYPE (sub), val);
4962             CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
4963           }
4964         /* Build up the array.  */
4965         elttype = cp_build_qualified_type
4966           (elttype, TYPE_QUALS (elttype) | TYPE_QUAL_CONST);
4967         array = build_array_of_n_type (elttype, len);
4968         array = finish_compound_literal (array, new_ctor);
4969
4970         parms = make_tree_vector ();
4971         VEC_safe_push (tree, gc, parms, decay_conversion (array));
4972         VEC_safe_push (tree, gc, parms, size_int (len));
4973         /* Call the private constructor.  */
4974         push_deferring_access_checks (dk_no_check);
4975         new_ctor = build_special_member_call
4976           (NULL_TREE, complete_ctor_identifier, &parms, totype, 0, complain);
4977         release_tree_vector (parms);
4978         pop_deferring_access_checks ();
4979         return build_cplus_new (totype, new_ctor);
4980       }
4981
4982     case ck_aggr:
4983       return get_target_expr (digest_init (totype, expr));
4984
4985     default:
4986       break;
4987     };
4988
4989   expr = convert_like_real (convs->u.next, expr, fn, argnum,
4990                             convs->kind == ck_ref_bind ? -1 : 1,
4991                             convs->kind == ck_ref_bind ? issue_conversion_warnings : false, 
4992                             c_cast_p,
4993                             complain);
4994   if (expr == error_mark_node)
4995     return error_mark_node;
4996
4997   switch (convs->kind)
4998     {
4999     case ck_rvalue:
5000       expr = convert_bitfield_to_declared_type (expr);
5001       if (! MAYBE_CLASS_TYPE_P (totype))
5002         return expr;
5003       /* Else fall through.  */
5004     case ck_base:
5005       if (convs->kind == ck_base && !convs->need_temporary_p)
5006         {
5007           /* We are going to bind a reference directly to a base-class
5008              subobject of EXPR.  */
5009           /* Build an expression for `*((base*) &expr)'.  */
5010           expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
5011           expr = convert_to_base (expr, build_pointer_type (totype),
5012                                   !c_cast_p, /*nonnull=*/true);
5013           expr = cp_build_indirect_ref (expr, "implicit conversion", complain);
5014           return expr;
5015         }
5016
5017       /* Copy-initialization where the cv-unqualified version of the source
5018          type is the same class as, or a derived class of, the class of the
5019          destination [is treated as direct-initialization].  [dcl.init] */
5020       flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5021       if (convs->user_conv_p)
5022         /* This conversion is being done in the context of a user-defined
5023            conversion (i.e. the second step of copy-initialization), so
5024            don't allow any more.  */
5025         flags |= LOOKUP_NO_CONVERSION;
5026       expr = build_temp (expr, totype, flags, &diag_kind);
5027       if (diag_kind && fn)
5028         {
5029           if ((complain & tf_error))
5030             emit_diagnostic (diag_kind, input_location, 0, 
5031                              "  initializing argument %P of %qD", argnum, fn);
5032           else if (diag_kind == DK_ERROR)
5033             return error_mark_node;
5034         }
5035       return build_cplus_new (totype, expr);
5036
5037     case ck_ref_bind:
5038       {
5039         tree ref_type = totype;
5040
5041         if (convs->bad_p && TYPE_REF_IS_RVALUE (ref_type)
5042             && real_lvalue_p (expr))
5043           {
5044             if (complain & tf_error)
5045               {
5046                 error ("cannot bind %qT lvalue to %qT",
5047                        TREE_TYPE (expr), totype);
5048                 if (fn)
5049                   error ("  initializing argument %P of %q+D", argnum, fn);
5050               }
5051             return error_mark_node;
5052           }
5053
5054         /* If necessary, create a temporary. 
5055
5056            VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5057            that need temporaries, even when their types are reference
5058            compatible with the type of reference being bound, so the
5059            upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
5060            doesn't fail.  */
5061         if (convs->need_temporary_p
5062             || TREE_CODE (expr) == CONSTRUCTOR
5063             || TREE_CODE (expr) == VA_ARG_EXPR)
5064           {
5065             tree type = convs->u.next->type;
5066             cp_lvalue_kind lvalue = real_lvalue_p (expr);
5067
5068             if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
5069                 && !TYPE_REF_IS_RVALUE (ref_type))
5070               {
5071                 if (complain & tf_error)
5072                   {
5073                     /* If the reference is volatile or non-const, we
5074                        cannot create a temporary.  */
5075                     if (lvalue & clk_bitfield)
5076                       error ("cannot bind bitfield %qE to %qT",
5077                              expr, ref_type);
5078                     else if (lvalue & clk_packed)
5079                       error ("cannot bind packed field %qE to %qT",
5080                              expr, ref_type);
5081                     else
5082                       error ("cannot bind rvalue %qE to %qT", expr, ref_type);
5083                   }
5084                 return error_mark_node;
5085               }
5086             /* If the source is a packed field, and we must use a copy
5087                constructor, then building the target expr will require
5088                binding the field to the reference parameter to the
5089                copy constructor, and we'll end up with an infinite
5090                loop.  If we can use a bitwise copy, then we'll be
5091                OK.  */
5092             if ((lvalue & clk_packed)
5093                 && CLASS_TYPE_P (type)
5094                 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
5095               {
5096                 if (complain & tf_error)
5097                   error ("cannot bind packed field %qE to %qT",
5098                          expr, ref_type);
5099                 return error_mark_node;
5100               }
5101             if (lvalue & clk_bitfield)
5102               {
5103                 expr = convert_bitfield_to_declared_type (expr);
5104                 expr = fold_convert (type, expr);
5105               }
5106             expr = build_target_expr_with_type (expr, type);
5107           }
5108
5109         /* Take the address of the thing to which we will bind the
5110            reference.  */
5111         expr = cp_build_unary_op (ADDR_EXPR, expr, 1, complain);
5112         if (expr == error_mark_node)
5113           return error_mark_node;
5114
5115         /* Convert it to a pointer to the type referred to by the
5116            reference.  This will adjust the pointer if a derived to
5117            base conversion is being performed.  */
5118         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
5119                            expr);
5120         /* Convert the pointer to the desired reference type.  */
5121         return build_nop (ref_type, expr);
5122       }
5123
5124     case ck_lvalue:
5125       return decay_conversion (expr);
5126
5127     case ck_qual:
5128       /* Warn about deprecated conversion if appropriate.  */
5129       string_conv_p (totype, expr, 1);
5130       break;
5131
5132     case ck_ptr:
5133       if (convs->base_p)
5134         expr = convert_to_base (expr, totype, !c_cast_p,
5135                                 /*nonnull=*/false);
5136       return build_nop (totype, expr);
5137
5138     case ck_pmem:
5139       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
5140                              c_cast_p);
5141
5142     default:
5143       break;
5144     }
5145
5146   if (convs->check_narrowing)
5147     check_narrowing (totype, expr);
5148
5149   if (issue_conversion_warnings && (complain & tf_warning))
5150     expr = convert_and_check (totype, expr);
5151   else
5152     expr = convert (totype, expr);
5153
5154   return expr;
5155 }
5156
5157 /* ARG is being passed to a varargs function.  Perform any conversions
5158    required.  Return the converted value.  */
5159
5160 tree
5161 convert_arg_to_ellipsis (tree arg)
5162 {
5163   /* [expr.call]
5164
5165      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5166      standard conversions are performed.  */
5167   arg = decay_conversion (arg);
5168   /* [expr.call]
5169
5170      If the argument has integral or enumeration type that is subject
5171      to the integral promotions (_conv.prom_), or a floating point
5172      type that is subject to the floating point promotion
5173      (_conv.fpprom_), the value of the argument is converted to the
5174      promoted type before the call.  */
5175   if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
5176       && (TYPE_PRECISION (TREE_TYPE (arg))
5177           < TYPE_PRECISION (double_type_node))
5178       && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (arg))))
5179     arg = convert_to_real (double_type_node, arg);
5180   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
5181     arg = perform_integral_promotions (arg);
5182
5183   arg = require_complete_type (arg);
5184
5185   if (arg != error_mark_node
5186       && (type_has_nontrivial_copy_init (TREE_TYPE (arg))
5187           || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (arg))))
5188     {
5189       /* [expr.call] 5.2.2/7:
5190          Passing a potentially-evaluated argument of class type (Clause 9)
5191          with a non-trivial copy constructor or a non-trivial destructor
5192          with no corresponding parameter is conditionally-supported, with
5193          implementation-defined semantics.
5194
5195          We used to just warn here and do a bitwise copy, but now
5196          cp_expr_size will abort if we try to do that.
5197
5198          If the call appears in the context of a sizeof expression,
5199          it is not potentially-evaluated.  */
5200       if (cp_unevaluated_operand == 0)
5201         error ("cannot pass objects of non-trivially-copyable "
5202                "type %q#T through %<...%>", TREE_TYPE (arg));
5203     }
5204
5205   return arg;
5206 }
5207
5208 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
5209
5210 tree
5211 build_x_va_arg (tree expr, tree type)
5212 {
5213   if (processing_template_decl)
5214     return build_min (VA_ARG_EXPR, type, expr);
5215
5216   type = complete_type_or_else (type, NULL_TREE);
5217
5218   if (expr == error_mark_node || !type)
5219     return error_mark_node;
5220
5221   if (type_has_nontrivial_copy_init (type)
5222       || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5223       || TREE_CODE (type) == REFERENCE_TYPE)
5224     {
5225       /* Remove reference types so we don't ICE later on.  */
5226       tree type1 = non_reference (type);
5227       /* conditionally-supported behavior [expr.call] 5.2.2/7.  */
5228       error ("cannot receive objects of non-trivially-copyable type %q#T "
5229              "through %<...%>; ", type);
5230       expr = convert (build_pointer_type (type1), null_node);
5231       expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
5232       return expr;
5233     }
5234
5235   return build_va_arg (input_location, expr, type);
5236 }
5237
5238 /* TYPE has been given to va_arg.  Apply the default conversions which
5239    would have happened when passed via ellipsis.  Return the promoted
5240    type, or the passed type if there is no change.  */
5241
5242 tree
5243 cxx_type_promotes_to (tree type)
5244 {
5245   tree promote;
5246
5247   /* Perform the array-to-pointer and function-to-pointer
5248      conversions.  */
5249   type = type_decays_to (type);
5250
5251   promote = type_promotes_to (type);
5252   if (same_type_p (type, promote))
5253     promote = type;
5254
5255   return promote;
5256 }
5257
5258 /* ARG is a default argument expression being passed to a parameter of
5259    the indicated TYPE, which is a parameter to FN.  Do any required
5260    conversions.  Return the converted value.  */
5261
5262 static GTY(()) VEC(tree,gc) *default_arg_context;
5263
5264 tree
5265 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
5266 {
5267   int i;
5268   tree t;
5269
5270   /* If the ARG is an unparsed default argument expression, the
5271      conversion cannot be performed.  */
5272   if (TREE_CODE (arg) == DEFAULT_ARG)
5273     {
5274       error ("the default argument for parameter %d of %qD has "
5275              "not yet been parsed",
5276              parmnum, fn);
5277       return error_mark_node;
5278     }
5279
5280   /* Detect recursion.  */
5281   for (i = 0; VEC_iterate (tree, default_arg_context, i, t); ++i)
5282     if (t == fn)
5283       {
5284         error ("recursive evaluation of default argument for %q#D", fn);
5285         return error_mark_node;
5286       }
5287   VEC_safe_push (tree, gc, default_arg_context, fn);
5288
5289   if (fn && DECL_TEMPLATE_INFO (fn))
5290     arg = tsubst_default_argument (fn, type, arg);
5291
5292   /* Due to:
5293
5294        [dcl.fct.default]
5295
5296        The names in the expression are bound, and the semantic
5297        constraints are checked, at the point where the default
5298        expressions appears.
5299
5300      we must not perform access checks here.  */
5301   push_deferring_access_checks (dk_no_check);
5302   arg = break_out_target_exprs (arg);
5303   if (TREE_CODE (arg) == CONSTRUCTOR)
5304     {
5305       arg = digest_init (type, arg);
5306       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5307                                         "default argument", fn, parmnum,
5308                                         tf_warning_or_error);
5309     }
5310   else
5311     {
5312       /* We must make a copy of ARG, in case subsequent processing
5313          alters any part of it.  For example, during gimplification a
5314          cast of the form (T) &X::f (where "f" is a member function)
5315          will lead to replacing the PTRMEM_CST for &X::f with a
5316          VAR_DECL.  We can avoid the copy for constants, since they
5317          are never modified in place.  */
5318       if (!CONSTANT_CLASS_P (arg))
5319         arg = unshare_expr (arg);
5320       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5321                                         "default argument", fn, parmnum,
5322                                         tf_warning_or_error);
5323       arg = convert_for_arg_passing (type, arg);
5324     }
5325   pop_deferring_access_checks();
5326
5327   VEC_pop (tree, default_arg_context);
5328
5329   return arg;
5330 }
5331
5332 /* Returns the type which will really be used for passing an argument of
5333    type TYPE.  */
5334
5335 tree
5336 type_passed_as (tree type)
5337 {
5338   /* Pass classes with copy ctors by invisible reference.  */
5339   if (TREE_ADDRESSABLE (type))
5340     {
5341       type = build_reference_type (type);
5342       /* There are no other pointers to this temporary.  */
5343       type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
5344     }
5345   else if (targetm.calls.promote_prototypes (type)
5346            && INTEGRAL_TYPE_P (type)
5347            && COMPLETE_TYPE_P (type)
5348            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5349                                    TYPE_SIZE (integer_type_node)))
5350     type = integer_type_node;
5351
5352   return type;
5353 }
5354
5355 /* Actually perform the appropriate conversion.  */
5356
5357 tree
5358 convert_for_arg_passing (tree type, tree val)
5359 {
5360   tree bitfield_type;
5361
5362   /* If VAL is a bitfield, then -- since it has already been converted
5363      to TYPE -- it cannot have a precision greater than TYPE.  
5364
5365      If it has a smaller precision, we must widen it here.  For
5366      example, passing "int f:3;" to a function expecting an "int" will
5367      not result in any conversion before this point.
5368
5369      If the precision is the same we must not risk widening.  For
5370      example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5371      often have type "int", even though the C++ type for the field is
5372      "long long".  If the value is being passed to a function
5373      expecting an "int", then no conversions will be required.  But,
5374      if we call convert_bitfield_to_declared_type, the bitfield will
5375      be converted to "long long".  */
5376   bitfield_type = is_bitfield_expr_with_lowered_type (val);
5377   if (bitfield_type 
5378       && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
5379     val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
5380
5381   if (val == error_mark_node)
5382     ;
5383   /* Pass classes with copy ctors by invisible reference.  */
5384   else if (TREE_ADDRESSABLE (type))
5385     val = build1 (ADDR_EXPR, build_reference_type (type), val);
5386   else if (targetm.calls.promote_prototypes (type)
5387            && INTEGRAL_TYPE_P (type)
5388            && COMPLETE_TYPE_P (type)
5389            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5390                                    TYPE_SIZE (integer_type_node)))
5391     val = perform_integral_promotions (val);
5392   if (warn_missing_format_attribute)
5393     {
5394       tree rhstype = TREE_TYPE (val);
5395       const enum tree_code coder = TREE_CODE (rhstype);
5396       const enum tree_code codel = TREE_CODE (type);
5397       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5398           && coder == codel
5399           && check_missing_format_attribute (type, rhstype))
5400         warning (OPT_Wmissing_format_attribute,
5401                  "argument of function call might be a candidate for a format attribute");
5402     }
5403   return val;
5404 }
5405
5406 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5407    which no conversions at all should be done.  This is true for some
5408    builtins which don't act like normal functions.  */
5409
5410 static bool
5411 magic_varargs_p (tree fn)
5412 {
5413   if (DECL_BUILT_IN (fn))
5414     switch (DECL_FUNCTION_CODE (fn))
5415       {
5416       case BUILT_IN_CLASSIFY_TYPE:
5417       case BUILT_IN_CONSTANT_P:
5418       case BUILT_IN_NEXT_ARG:
5419       case BUILT_IN_VA_START:
5420         return true;
5421
5422       default:;
5423         return lookup_attribute ("type generic",
5424                                  TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
5425       }
5426
5427   return false;
5428 }
5429
5430 /* Subroutine of the various build_*_call functions.  Overload resolution
5431    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5432    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
5433    bitmask of various LOOKUP_* flags which apply to the call itself.  */
5434
5435 static tree
5436 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
5437 {
5438   tree fn = cand->fn;
5439   const VEC(tree,gc) *args = cand->args;
5440   tree first_arg = cand->first_arg;
5441   conversion **convs = cand->convs;
5442   conversion *conv;
5443   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5444   int parmlen;
5445   tree val;
5446   int i = 0;
5447   int j = 0;
5448   unsigned int arg_index = 0;
5449   int is_method = 0;
5450   int nargs;
5451   tree *argarray;
5452   bool already_used = false;
5453
5454   /* In a template, there is no need to perform all of the work that
5455      is normally done.  We are only interested in the type of the call
5456      expression, i.e., the return type of the function.  Any semantic
5457      errors will be deferred until the template is instantiated.  */
5458   if (processing_template_decl)
5459     {
5460       tree expr;
5461       tree return_type;
5462       const tree *argarray;
5463       unsigned int nargs;
5464
5465       return_type = TREE_TYPE (TREE_TYPE (fn));
5466       nargs = VEC_length (tree, args);
5467       if (first_arg == NULL_TREE)
5468         argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
5469       else
5470         {
5471           tree *alcarray;
5472           unsigned int ix;
5473           tree arg;
5474
5475           ++nargs;
5476           alcarray = XALLOCAVEC (tree, nargs);
5477           alcarray[0] = first_arg;
5478           for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
5479             alcarray[ix + 1] = arg;
5480           argarray = alcarray;
5481         }
5482       expr = build_call_array_loc (input_location,
5483                                    return_type, build_addr_func (fn), nargs,
5484                                    argarray);
5485       if (TREE_THIS_VOLATILE (fn) && cfun)
5486         current_function_returns_abnormally = 1;
5487       if (!VOID_TYPE_P (return_type))
5488         require_complete_type (return_type);
5489       return convert_from_reference (expr);
5490     }
5491
5492   /* Give any warnings we noticed during overload resolution.  */
5493   if (cand->warnings)
5494     {
5495       struct candidate_warning *w;
5496       for (w = cand->warnings; w; w = w->next)
5497         joust (cand, w->loser, 1);
5498     }
5499
5500   /* Make =delete work with SFINAE.  */
5501   if (DECL_DELETED_FN (fn) && !(complain & tf_error))
5502     return error_mark_node;
5503
5504   if (DECL_FUNCTION_MEMBER_P (fn))
5505     {
5506       /* If FN is a template function, two cases must be considered.
5507          For example:
5508
5509            struct A {
5510              protected:
5511                template <class T> void f();
5512            };
5513            template <class T> struct B {
5514              protected:
5515                void g();
5516            };
5517            struct C : A, B<int> {
5518              using A::f;        // #1
5519              using B<int>::g;   // #2
5520            };
5521
5522          In case #1 where `A::f' is a member template, DECL_ACCESS is
5523          recorded in the primary template but not in its specialization.
5524          We check access of FN using its primary template.
5525
5526          In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5527          because it is a member of class template B, DECL_ACCESS is
5528          recorded in the specialization `B<int>::g'.  We cannot use its
5529          primary template because `B<T>::g' and `B<int>::g' may have
5530          different access.  */
5531       if (DECL_TEMPLATE_INFO (fn)
5532           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
5533         perform_or_defer_access_check (cand->access_path,
5534                                        DECL_TI_TEMPLATE (fn), fn);
5535       else
5536         perform_or_defer_access_check (cand->access_path, fn, fn);
5537     }
5538
5539   /* Find maximum size of vector to hold converted arguments.  */
5540   parmlen = list_length (parm);
5541   nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
5542   if (parmlen > nargs)
5543     nargs = parmlen;
5544   argarray = (tree *) alloca (nargs * sizeof (tree));
5545
5546   /* The implicit parameters to a constructor are not considered by overload
5547      resolution, and must be of the proper type.  */
5548   if (DECL_CONSTRUCTOR_P (fn))
5549     {
5550       if (first_arg != NULL_TREE)
5551         {
5552           argarray[j++] = first_arg;
5553           first_arg = NULL_TREE;
5554         }
5555       else
5556         {
5557           argarray[j++] = VEC_index (tree, args, arg_index);
5558           ++arg_index;
5559         }
5560       parm = TREE_CHAIN (parm);
5561       /* We should never try to call the abstract constructor.  */
5562       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
5563
5564       if (DECL_HAS_VTT_PARM_P (fn))
5565         {
5566           argarray[j++] = VEC_index (tree, args, arg_index);
5567           ++arg_index;
5568           parm = TREE_CHAIN (parm);
5569         }
5570     }
5571   /* Bypass access control for 'this' parameter.  */
5572   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5573     {
5574       tree parmtype = TREE_VALUE (parm);
5575       tree arg = (first_arg != NULL_TREE
5576                   ? first_arg
5577                   : VEC_index (tree, args, arg_index));
5578       tree argtype = TREE_TYPE (arg);
5579       tree converted_arg;
5580       tree base_binfo;
5581
5582       if (convs[i]->bad_p)
5583         {
5584           if (complain & tf_error)
5585             permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5586                        TREE_TYPE (argtype), fn);
5587           else
5588             return error_mark_node;
5589         }
5590
5591       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5592          X is called for an object that is not of type X, or of a type
5593          derived from X, the behavior is undefined.
5594
5595          So we can assume that anything passed as 'this' is non-null, and
5596          optimize accordingly.  */
5597       gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
5598       /* Convert to the base in which the function was declared.  */
5599       gcc_assert (cand->conversion_path != NULL_TREE);
5600       converted_arg = build_base_path (PLUS_EXPR,
5601                                        arg,
5602                                        cand->conversion_path,
5603                                        1);
5604       /* Check that the base class is accessible.  */
5605       if (!accessible_base_p (TREE_TYPE (argtype),
5606                               BINFO_TYPE (cand->conversion_path), true))
5607         error ("%qT is not an accessible base of %qT",
5608                BINFO_TYPE (cand->conversion_path),
5609                TREE_TYPE (argtype));
5610       /* If fn was found by a using declaration, the conversion path
5611          will be to the derived class, not the base declaring fn. We
5612          must convert from derived to base.  */
5613       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
5614                                 TREE_TYPE (parmtype), ba_unique, NULL);
5615       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
5616                                        base_binfo, 1);
5617
5618       argarray[j++] = converted_arg;
5619       parm = TREE_CHAIN (parm);
5620       if (first_arg != NULL_TREE)
5621         first_arg = NULL_TREE;
5622       else
5623         ++arg_index;
5624       ++i;
5625       is_method = 1;
5626     }
5627
5628   gcc_assert (first_arg == NULL_TREE);
5629   for (; arg_index < VEC_length (tree, args) && parm;
5630        parm = TREE_CHAIN (parm), ++arg_index, ++i)
5631     {
5632       tree type = TREE_VALUE (parm);
5633
5634       conv = convs[i];
5635
5636       /* Don't make a copy here if build_call is going to.  */
5637       if (conv->kind == ck_rvalue
5638           && COMPLETE_TYPE_P (complete_type (type))
5639           && !TREE_ADDRESSABLE (type))
5640         conv = conv->u.next;
5641
5642       /* Warn about initializer_list deduction that isn't currently in the
5643          working draft.  */
5644       if (cxx_dialect > cxx98
5645           && flag_deduce_init_list
5646           && cand->template_decl
5647           && is_std_init_list (non_reference (type)))
5648         {
5649           tree tmpl = TI_TEMPLATE (cand->template_decl);
5650           tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
5651           tree patparm = get_pattern_parm (realparm, tmpl);
5652
5653           if (!is_std_init_list (non_reference (TREE_TYPE (patparm))))
5654             {
5655               pedwarn (input_location, 0, "deducing %qT as %qT",
5656                        non_reference (TREE_TYPE (patparm)),
5657                        non_reference (type));
5658               pedwarn (input_location, 0, "  in call to %q+D", cand->fn);
5659               pedwarn (input_location, 0,
5660                        "  (you can disable this with -fno-deduce-init-list)");
5661             }
5662         }
5663
5664       val = convert_like_with_context
5665         (conv, VEC_index (tree, args, arg_index), fn, i - is_method,
5666          complain);
5667
5668       val = convert_for_arg_passing (type, val);
5669       if (val == error_mark_node)
5670         return error_mark_node;
5671       else
5672         argarray[j++] = val;
5673     }
5674
5675   /* Default arguments */
5676   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
5677     argarray[j++] = convert_default_arg (TREE_VALUE (parm),
5678                                          TREE_PURPOSE (parm),
5679                                          fn, i - is_method);
5680   /* Ellipsis */
5681   for (; arg_index < VEC_length (tree, args); ++arg_index)
5682     {
5683       tree a = VEC_index (tree, args, arg_index);
5684       if (magic_varargs_p (fn))
5685         /* Do no conversions for magic varargs.  */;
5686       else
5687         a = convert_arg_to_ellipsis (a);
5688       argarray[j++] = a;
5689     }
5690
5691   gcc_assert (j <= nargs);
5692   nargs = j;
5693
5694   check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
5695                             nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
5696
5697   /* Avoid actually calling copy constructors and copy assignment operators,
5698      if possible.  */
5699
5700   if (! flag_elide_constructors)
5701     /* Do things the hard way.  */;
5702   else if (cand->num_convs == 1 
5703            && (DECL_COPY_CONSTRUCTOR_P (fn) 
5704                || DECL_MOVE_CONSTRUCTOR_P (fn)))
5705     {
5706       tree targ;
5707       tree arg = argarray[num_artificial_parms_for (fn)];
5708       tree fa;
5709
5710       /* Pull out the real argument, disregarding const-correctness.  */
5711       targ = arg;
5712       while (CONVERT_EXPR_P (targ)
5713              || TREE_CODE (targ) == NON_LVALUE_EXPR)
5714         targ = TREE_OPERAND (targ, 0);
5715       if (TREE_CODE (targ) == ADDR_EXPR)
5716         {
5717           targ = TREE_OPERAND (targ, 0);
5718           if (!same_type_ignoring_top_level_qualifiers_p
5719               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
5720             targ = NULL_TREE;
5721         }
5722       else
5723         targ = NULL_TREE;
5724
5725       if (targ)
5726         arg = targ;
5727       else
5728         arg = cp_build_indirect_ref (arg, 0, complain);
5729
5730       if (TREE_CODE (arg) == TARGET_EXPR
5731           && TARGET_EXPR_LIST_INIT_P (arg))
5732         {
5733           /* Copy-list-initialization doesn't require the copy constructor
5734              to be defined.  */
5735         }
5736       /* [class.copy]: the copy constructor is implicitly defined even if
5737          the implementation elided its use.  */
5738       else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5739         {
5740           mark_used (fn);
5741           already_used = true;
5742         }
5743
5744       /* If we're creating a temp and we already have one, don't create a
5745          new one.  If we're not creating a temp but we get one, use
5746          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
5747          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5748          temp or an INIT_EXPR otherwise.  */
5749       fa = (cand->first_arg != NULL_TREE
5750             ? cand->first_arg
5751             : VEC_index (tree, args, 0));
5752       if (integer_zerop (fa))
5753         {
5754           if (TREE_CODE (arg) == TARGET_EXPR)
5755             return arg;
5756           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5757             return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
5758         }
5759       else if (TREE_CODE (arg) == TARGET_EXPR
5760                || (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
5761                    && !move_fn_p (fn)))
5762         {
5763           tree to = stabilize_reference (cp_build_indirect_ref (fa, 0,
5764                                                                 complain));
5765
5766           val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5767           return val;
5768         }
5769     }
5770   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
5771            && copy_fn_p (fn)
5772            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5773     {
5774       tree to = stabilize_reference
5775         (cp_build_indirect_ref (argarray[0], 0, complain));
5776       tree type = TREE_TYPE (to);
5777       tree as_base = CLASSTYPE_AS_BASE (type);
5778       tree arg = argarray[1];
5779
5780       if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
5781         {
5782           arg = cp_build_indirect_ref (arg, 0, complain);
5783           val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5784         }
5785       else
5786         {
5787           /* We must only copy the non-tail padding parts.
5788              Use __builtin_memcpy for the bitwise copy.
5789              FIXME fix 22488 so we can go back to using MODIFY_EXPR
5790              instead of an explicit call to memcpy.  */
5791         
5792           tree arg0, arg1, arg2, t;
5793           tree test = NULL_TREE;
5794
5795           arg2 = TYPE_SIZE_UNIT (as_base);
5796           arg1 = arg;
5797           arg0 = cp_build_unary_op (ADDR_EXPR, to, 0, complain);
5798
5799           if (!can_trust_pointer_alignment ())
5800             {
5801               /* If we can't be sure about pointer alignment, a call
5802                  to __builtin_memcpy is expanded as a call to memcpy, which
5803                  is invalid with identical args.  Otherwise it is
5804                  expanded as a block move, which should be safe.  */
5805               arg0 = save_expr (arg0);
5806               arg1 = save_expr (arg1);
5807               test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
5808             }
5809           t = implicit_built_in_decls[BUILT_IN_MEMCPY];
5810           t = build_call_n (t, 3, arg0, arg1, arg2);
5811
5812           t = convert (TREE_TYPE (arg0), t);
5813           if (test)
5814             t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
5815           val = cp_build_indirect_ref (t, 0, complain);
5816           TREE_NO_WARNING (val) = 1;
5817         }
5818
5819       return val;
5820     }
5821
5822   if (!already_used)
5823     mark_used (fn);
5824
5825   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5826     {
5827       tree t;
5828       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
5829                                 DECL_CONTEXT (fn),
5830                                 ba_any, NULL);
5831       gcc_assert (binfo && binfo != error_mark_node);
5832
5833       /* Warn about deprecated virtual functions now, since we're about
5834          to throw away the decl.  */
5835       if (TREE_DEPRECATED (fn))
5836         warn_deprecated_use (fn, NULL_TREE);
5837
5838       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
5839       if (TREE_SIDE_EFFECTS (argarray[0]))
5840         argarray[0] = save_expr (argarray[0]);
5841       t = build_pointer_type (TREE_TYPE (fn));
5842       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
5843         fn = build_java_interface_fn_ref (fn, argarray[0]);
5844       else
5845         fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
5846       TREE_TYPE (fn) = t;
5847     }
5848   else
5849     fn = build_addr_func (fn);
5850
5851   return build_cxx_call (fn, nargs, argarray);
5852 }
5853
5854 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
5855    This function performs no overload resolution, conversion, or other
5856    high-level operations.  */
5857
5858 tree
5859 build_cxx_call (tree fn, int nargs, tree *argarray)
5860 {
5861   tree fndecl;
5862
5863   fn = build_call_a (fn, nargs, argarray);
5864
5865   /* If this call might throw an exception, note that fact.  */
5866   fndecl = get_callee_fndecl (fn);
5867   if ((!fndecl || !TREE_NOTHROW (fndecl))
5868       && at_function_scope_p ()
5869       && cfun)
5870     cp_function_chain->can_throw = 1;
5871
5872   /* Check that arguments to builtin functions match the expectations.  */
5873   if (fndecl
5874       && DECL_BUILT_IN (fndecl)
5875       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
5876       && !check_builtin_function_arguments (fndecl, nargs, argarray))
5877     return error_mark_node;
5878
5879   /* Some built-in function calls will be evaluated at compile-time in
5880      fold ().  */
5881   fn = fold_if_not_in_template (fn);
5882
5883   if (VOID_TYPE_P (TREE_TYPE (fn)))
5884     return fn;
5885
5886   fn = require_complete_type (fn);
5887   if (fn == error_mark_node)
5888     return error_mark_node;
5889
5890   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
5891     fn = build_cplus_new (TREE_TYPE (fn), fn);
5892   return convert_from_reference (fn);
5893 }
5894
5895 static GTY(()) tree java_iface_lookup_fn;
5896
5897 /* Make an expression which yields the address of the Java interface
5898    method FN.  This is achieved by generating a call to libjava's
5899    _Jv_LookupInterfaceMethodIdx().  */
5900
5901 static tree
5902 build_java_interface_fn_ref (tree fn, tree instance)
5903 {
5904   tree lookup_fn, method, idx;
5905   tree klass_ref, iface, iface_ref;
5906   int i;
5907
5908   if (!java_iface_lookup_fn)
5909     {
5910       tree endlink = build_void_list_node ();
5911       tree t = tree_cons (NULL_TREE, ptr_type_node,
5912                           tree_cons (NULL_TREE, ptr_type_node,
5913                                      tree_cons (NULL_TREE, java_int_type_node,
5914                                                 endlink)));
5915       java_iface_lookup_fn
5916         = add_builtin_function ("_Jv_LookupInterfaceMethodIdx",
5917                                 build_function_type (ptr_type_node, t),
5918                                 0, NOT_BUILT_IN, NULL, NULL_TREE);
5919     }
5920
5921   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5922      This is the first entry in the vtable.  */
5923   klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, 0, 
5924                                                      tf_warning_or_error),
5925                               integer_zero_node);
5926
5927   /* Get the java.lang.Class pointer for the interface being called.  */
5928   iface = DECL_CONTEXT (fn);
5929   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5930   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5931       || DECL_CONTEXT (iface_ref) != iface)
5932     {
5933       error ("could not find class$ field in java interface type %qT",
5934                 iface);
5935       return error_mark_node;
5936     }
5937   iface_ref = build_address (iface_ref);
5938   iface_ref = convert (build_pointer_type (iface), iface_ref);
5939
5940   /* Determine the itable index of FN.  */
5941   i = 1;
5942   for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5943     {
5944       if (!DECL_VIRTUAL_P (method))
5945         continue;
5946       if (fn == method)
5947         break;
5948       i++;
5949     }
5950   idx = build_int_cst (NULL_TREE, i);
5951
5952   lookup_fn = build1 (ADDR_EXPR,
5953                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5954                       java_iface_lookup_fn);
5955   return build_call_nary (ptr_type_node, lookup_fn,
5956                           3, klass_ref, iface_ref, idx);
5957 }
5958
5959 /* Returns the value to use for the in-charge parameter when making a
5960    call to a function with the indicated NAME.
5961
5962    FIXME:Can't we find a neater way to do this mapping?  */
5963
5964 tree
5965 in_charge_arg_for_name (tree name)
5966 {
5967  if (name == base_ctor_identifier
5968       || name == base_dtor_identifier)
5969     return integer_zero_node;
5970   else if (name == complete_ctor_identifier)
5971     return integer_one_node;
5972   else if (name == complete_dtor_identifier)
5973     return integer_two_node;
5974   else if (name == deleting_dtor_identifier)
5975     return integer_three_node;
5976
5977   /* This function should only be called with one of the names listed
5978      above.  */
5979   gcc_unreachable ();
5980   return NULL_TREE;
5981 }
5982
5983 /* Build a call to a constructor, destructor, or an assignment
5984    operator for INSTANCE, an expression with class type.  NAME
5985    indicates the special member function to call; *ARGS are the
5986    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
5987    indicates the base of INSTANCE that is to be passed as the `this'
5988    parameter to the member function called.
5989
5990    FLAGS are the LOOKUP_* flags to use when processing the call.
5991
5992    If NAME indicates a complete object constructor, INSTANCE may be
5993    NULL_TREE.  In this case, the caller will call build_cplus_new to
5994    store the newly constructed object into a VAR_DECL.  */
5995
5996 tree
5997 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
5998                            tree binfo, int flags, tsubst_flags_t complain)
5999 {
6000   tree fns;
6001   /* The type of the subobject to be constructed or destroyed.  */
6002   tree class_type;
6003   VEC(tree,gc) *allocated = NULL;
6004   tree ret;
6005
6006   gcc_assert (name == complete_ctor_identifier
6007               || name == base_ctor_identifier
6008               || name == complete_dtor_identifier
6009               || name == base_dtor_identifier
6010               || name == deleting_dtor_identifier
6011               || name == ansi_assopname (NOP_EXPR));
6012   if (TYPE_P (binfo))
6013     {
6014       /* Resolve the name.  */
6015       if (!complete_type_or_else (binfo, NULL_TREE))
6016         return error_mark_node;
6017
6018       binfo = TYPE_BINFO (binfo);
6019     }
6020
6021   gcc_assert (binfo != NULL_TREE);
6022
6023   class_type = BINFO_TYPE (binfo);
6024
6025   /* Handle the special case where INSTANCE is NULL_TREE.  */
6026   if (name == complete_ctor_identifier && !instance)
6027     {
6028       instance = build_int_cst (build_pointer_type (class_type), 0);
6029       instance = build1 (INDIRECT_REF, class_type, instance);
6030     }
6031   else
6032     {
6033       if (name == complete_dtor_identifier
6034           || name == base_dtor_identifier
6035           || name == deleting_dtor_identifier)
6036         gcc_assert (args == NULL || VEC_empty (tree, *args));
6037
6038       /* Convert to the base class, if necessary.  */
6039       if (!same_type_ignoring_top_level_qualifiers_p
6040           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
6041         {
6042           if (name != ansi_assopname (NOP_EXPR))
6043             /* For constructors and destructors, either the base is
6044                non-virtual, or it is virtual but we are doing the
6045                conversion from a constructor or destructor for the
6046                complete object.  In either case, we can convert
6047                statically.  */
6048             instance = convert_to_base_statically (instance, binfo);
6049           else
6050             /* However, for assignment operators, we must convert
6051                dynamically if the base is virtual.  */
6052             instance = build_base_path (PLUS_EXPR, instance,
6053                                         binfo, /*nonnull=*/1);
6054         }
6055     }
6056
6057   gcc_assert (instance != NULL_TREE);
6058
6059   fns = lookup_fnfields (binfo, name, 1);
6060
6061   /* When making a call to a constructor or destructor for a subobject
6062      that uses virtual base classes, pass down a pointer to a VTT for
6063      the subobject.  */
6064   if ((name == base_ctor_identifier
6065        || name == base_dtor_identifier)
6066       && CLASSTYPE_VBASECLASSES (class_type))
6067     {
6068       tree vtt;
6069       tree sub_vtt;
6070
6071       /* If the current function is a complete object constructor
6072          or destructor, then we fetch the VTT directly.
6073          Otherwise, we look it up using the VTT we were given.  */
6074       vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
6075       vtt = decay_conversion (vtt);
6076       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
6077                     build2 (EQ_EXPR, boolean_type_node,
6078                             current_in_charge_parm, integer_zero_node),
6079                     current_vtt_parm,
6080                     vtt);
6081       gcc_assert (BINFO_SUBVTT_INDEX (binfo));
6082       sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
6083                         BINFO_SUBVTT_INDEX (binfo));
6084
6085       if (args == NULL)
6086         {
6087           allocated = make_tree_vector ();
6088           args = &allocated;
6089         }
6090
6091       VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
6092     }
6093
6094   ret = build_new_method_call (instance, fns, args,
6095                                TYPE_BINFO (BINFO_TYPE (binfo)),
6096                                flags, /*fn=*/NULL,
6097                                complain);
6098
6099   if (allocated != NULL)
6100     release_tree_vector (allocated);
6101
6102   return ret;
6103 }
6104
6105 /* Return the NAME, as a C string.  The NAME indicates a function that
6106    is a member of TYPE.  *FREE_P is set to true if the caller must
6107    free the memory returned.
6108
6109    Rather than go through all of this, we should simply set the names
6110    of constructors and destructors appropriately, and dispense with
6111    ctor_identifier, dtor_identifier, etc.  */
6112
6113 static char *
6114 name_as_c_string (tree name, tree type, bool *free_p)
6115 {
6116   char *pretty_name;
6117
6118   /* Assume that we will not allocate memory.  */
6119   *free_p = false;
6120   /* Constructors and destructors are special.  */
6121   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6122     {
6123       pretty_name
6124         = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
6125       /* For a destructor, add the '~'.  */
6126       if (name == complete_dtor_identifier
6127           || name == base_dtor_identifier
6128           || name == deleting_dtor_identifier)
6129         {
6130           pretty_name = concat ("~", pretty_name, NULL);
6131           /* Remember that we need to free the memory allocated.  */
6132           *free_p = true;
6133         }
6134     }
6135   else if (IDENTIFIER_TYPENAME_P (name))
6136     {
6137       pretty_name = concat ("operator ",
6138                             type_as_string_translate (TREE_TYPE (name),
6139                                                       TFF_PLAIN_IDENTIFIER),
6140                             NULL);
6141       /* Remember that we need to free the memory allocated.  */
6142       *free_p = true;
6143     }
6144   else
6145     pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
6146
6147   return pretty_name;
6148 }
6149
6150 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
6151    be set, upon return, to the function called.  ARGS may be NULL.
6152    This may change ARGS.  */
6153
6154 tree
6155 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
6156                        tree conversion_path, int flags,
6157                        tree *fn_p, tsubst_flags_t complain)
6158 {
6159   struct z_candidate *candidates = 0, *cand;
6160   tree explicit_targs = NULL_TREE;
6161   tree basetype = NULL_TREE;
6162   tree access_binfo;
6163   tree optype;
6164   tree first_mem_arg = NULL_TREE;
6165   tree instance_ptr;
6166   tree name;
6167   bool skip_first_for_error;
6168   VEC(tree,gc) *user_args;
6169   tree call;
6170   tree fn;
6171   tree class_type;
6172   int template_only = 0;
6173   bool any_viable_p;
6174   tree orig_instance;
6175   tree orig_fns;
6176   VEC(tree,gc) *orig_args = NULL;
6177   void *p;
6178
6179   gcc_assert (instance != NULL_TREE);
6180
6181   /* We don't know what function we're going to call, yet.  */
6182   if (fn_p)
6183     *fn_p = NULL_TREE;
6184
6185   if (error_operand_p (instance)
6186       || error_operand_p (fns))
6187     return error_mark_node;
6188
6189   if (!BASELINK_P (fns))
6190     {
6191       if (complain & tf_error)
6192         error ("call to non-function %qD", fns);
6193       return error_mark_node;
6194     }
6195
6196   orig_instance = instance;
6197   orig_fns = fns;
6198
6199   /* Dismantle the baselink to collect all the information we need.  */
6200   if (!conversion_path)
6201     conversion_path = BASELINK_BINFO (fns);
6202   access_binfo = BASELINK_ACCESS_BINFO (fns);
6203   optype = BASELINK_OPTYPE (fns);
6204   fns = BASELINK_FUNCTIONS (fns);
6205   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
6206     {
6207       explicit_targs = TREE_OPERAND (fns, 1);
6208       fns = TREE_OPERAND (fns, 0);
6209       template_only = 1;
6210     }
6211   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
6212               || TREE_CODE (fns) == TEMPLATE_DECL
6213               || TREE_CODE (fns) == OVERLOAD);
6214   fn = get_first_fn (fns);
6215   name = DECL_NAME (fn);
6216
6217   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
6218   gcc_assert (CLASS_TYPE_P (basetype));
6219
6220   if (processing_template_decl)
6221     {
6222       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
6223       instance = build_non_dependent_expr (instance);
6224       if (args != NULL)
6225         make_args_non_dependent (*args);
6226     }
6227
6228   /* Figure out whether to skip the first argument for the error
6229      message we will display to users if an error occurs.  We don't
6230      want to display any compiler-generated arguments.  The "this"
6231      pointer hasn't been added yet.  However, we must remove the VTT
6232      pointer if this is a call to a base-class constructor or
6233      destructor.  */
6234   skip_first_for_error = false;
6235   user_args = args == NULL ? NULL : *args;
6236   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6237     {
6238       /* Callers should explicitly indicate whether they want to construct
6239          the complete object or just the part without virtual bases.  */
6240       gcc_assert (name != ctor_identifier);
6241       /* Similarly for destructors.  */
6242       gcc_assert (name != dtor_identifier);
6243       /* Remove the VTT pointer, if present.  */
6244       if ((name == base_ctor_identifier || name == base_dtor_identifier)
6245           && CLASSTYPE_VBASECLASSES (basetype))
6246         skip_first_for_error = true;
6247     }
6248
6249   /* Process the argument list.  */
6250   if (args != NULL && *args != NULL)
6251     {
6252       *args = resolve_args (*args);
6253       if (*args == NULL)
6254         return error_mark_node;
6255     }
6256
6257   instance_ptr = build_this (instance);
6258
6259   /* It's OK to call destructors and constructors on cv-qualified objects.
6260      Therefore, convert the INSTANCE_PTR to the unqualified type, if
6261      necessary.  */
6262   if (DECL_DESTRUCTOR_P (fn)
6263       || DECL_CONSTRUCTOR_P (fn))
6264     {
6265       tree type = build_pointer_type (basetype);
6266       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
6267         instance_ptr = build_nop (type, instance_ptr);
6268     }
6269   if (DECL_DESTRUCTOR_P (fn))
6270     name = complete_dtor_identifier;
6271
6272   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
6273      initializer, not T({ }).  If the type doesn't have a list ctor,
6274      break apart the list into separate ctor args.  */
6275   if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
6276       && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
6277       && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0))
6278       && !TYPE_HAS_LIST_CTOR (basetype))
6279     {
6280       gcc_assert (VEC_length (tree, *args) == 1);
6281       *args = ctor_to_vec (VEC_index (tree, *args, 0));
6282     }
6283
6284   class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
6285   first_mem_arg = instance_ptr;
6286
6287   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6288   p = conversion_obstack_alloc (0);
6289
6290   for (fn = fns; fn; fn = OVL_NEXT (fn))
6291     {
6292       tree t = OVL_CURRENT (fn);
6293       tree this_first_arg;
6294
6295       /* We can end up here for copy-init of same or base class.  */
6296       if ((flags & LOOKUP_ONLYCONVERTING)
6297           && DECL_NONCONVERTING_P (t))
6298         continue;
6299
6300       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
6301         this_first_arg = first_mem_arg;
6302       else
6303         this_first_arg = NULL_TREE;
6304
6305       if (TREE_CODE (t) == TEMPLATE_DECL)
6306         /* A member template.  */
6307         add_template_candidate (&candidates, t,
6308                                 class_type,
6309                                 explicit_targs,
6310                                 this_first_arg,
6311                                 args == NULL ? NULL : *args,
6312                                 optype,
6313                                 access_binfo,
6314                                 conversion_path,
6315                                 flags,
6316                                 DEDUCE_CALL);
6317       else if (! template_only)
6318         add_function_candidate (&candidates, t,
6319                                 class_type,
6320                                 this_first_arg,
6321                                 args == NULL ? NULL : *args,
6322                                 access_binfo,
6323                                 conversion_path,
6324                                 flags);
6325     }
6326
6327   candidates = splice_viable (candidates, pedantic, &any_viable_p);
6328   if (!any_viable_p)
6329     {
6330       if (complain & tf_error)
6331         {
6332           if (!COMPLETE_TYPE_P (basetype))
6333             cxx_incomplete_type_error (instance_ptr, basetype);
6334           else
6335             {
6336               char *pretty_name;
6337               bool free_p;
6338               tree arglist;
6339
6340               pretty_name = name_as_c_string (name, basetype, &free_p);
6341               arglist = build_tree_list_vec (user_args);
6342               if (skip_first_for_error)
6343                 arglist = TREE_CHAIN (arglist);
6344               error ("no matching function for call to %<%T::%s(%A)%#V%>",
6345                      basetype, pretty_name, arglist,
6346                      TREE_TYPE (TREE_TYPE (instance_ptr)));
6347               if (free_p)
6348                 free (pretty_name);
6349             }
6350           print_z_candidates (candidates);
6351         }
6352       call = error_mark_node;
6353     }
6354   else
6355     {
6356       cand = tourney (candidates);
6357       if (cand == 0)
6358         {
6359           char *pretty_name;
6360           bool free_p;
6361           tree arglist;
6362
6363           if (complain & tf_error)
6364             {
6365               pretty_name = name_as_c_string (name, basetype, &free_p);
6366               arglist = build_tree_list_vec (user_args);
6367               if (skip_first_for_error)
6368                 arglist = TREE_CHAIN (arglist);
6369               error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
6370                      arglist);
6371               print_z_candidates (candidates);
6372               if (free_p)
6373                 free (pretty_name);
6374             }
6375           call = error_mark_node;
6376         }
6377       else
6378         {
6379           fn = cand->fn;
6380
6381           if (!(flags & LOOKUP_NONVIRTUAL)
6382               && DECL_PURE_VIRTUAL_P (fn)
6383               && instance == current_class_ref
6384               && (DECL_CONSTRUCTOR_P (current_function_decl)
6385                   || DECL_DESTRUCTOR_P (current_function_decl))
6386               && (complain & tf_warning))
6387             /* This is not an error, it is runtime undefined
6388                behavior.  */
6389             warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
6390                       "abstract virtual %q#D called from constructor"
6391                       : "abstract virtual %q#D called from destructor"),
6392                      fn);
6393
6394           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
6395               && is_dummy_object (instance_ptr))
6396             {
6397               if (complain & tf_error)
6398                 error ("cannot call member function %qD without object",
6399                        fn);
6400               call = error_mark_node;
6401             }
6402           else
6403             {
6404               if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
6405                   && resolves_to_fixed_type_p (instance, 0))
6406                 flags |= LOOKUP_NONVIRTUAL;
6407               /* Now we know what function is being called.  */
6408               if (fn_p)
6409                 *fn_p = fn;
6410               /* Build the actual CALL_EXPR.  */
6411               call = build_over_call (cand, flags, complain);
6412               /* In an expression of the form `a->f()' where `f' turns
6413                  out to be a static member function, `a' is
6414                  none-the-less evaluated.  */
6415               if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
6416                   && !is_dummy_object (instance_ptr)
6417                   && TREE_SIDE_EFFECTS (instance_ptr))
6418                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
6419                                instance_ptr, call);
6420               else if (call != error_mark_node
6421                        && DECL_DESTRUCTOR_P (cand->fn)
6422                        && !VOID_TYPE_P (TREE_TYPE (call)))
6423                 /* An explicit call of the form "x->~X()" has type
6424                    "void".  However, on platforms where destructors
6425                    return "this" (i.e., those where
6426                    targetm.cxx.cdtor_returns_this is true), such calls
6427                    will appear to have a return value of pointer type
6428                    to the low-level call machinery.  We do not want to
6429                    change the low-level machinery, since we want to be
6430                    able to optimize "delete f()" on such platforms as
6431                    "operator delete(~X(f()))" (rather than generating
6432                    "t = f(), ~X(t), operator delete (t)").  */
6433                 call = build_nop (void_type_node, call);
6434             }
6435         }
6436     }
6437
6438   if (processing_template_decl && call != error_mark_node)
6439     {
6440       bool cast_to_void = false;
6441
6442       if (TREE_CODE (call) == COMPOUND_EXPR)
6443         call = TREE_OPERAND (call, 1);
6444       else if (TREE_CODE (call) == NOP_EXPR)
6445         {
6446           cast_to_void = true;
6447           call = TREE_OPERAND (call, 0);
6448         }
6449       if (TREE_CODE (call) == INDIRECT_REF)
6450         call = TREE_OPERAND (call, 0);
6451       call = (build_min_non_dep_call_vec
6452               (call,
6453                build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
6454                           orig_instance, orig_fns, NULL_TREE),
6455                orig_args));
6456       call = convert_from_reference (call);
6457       if (cast_to_void)
6458         call = build_nop (void_type_node, call);
6459     }
6460
6461  /* Free all the conversions we allocated.  */
6462   obstack_free (&conversion_obstack, p);
6463
6464   if (orig_args != NULL)
6465     release_tree_vector (orig_args);
6466
6467   return call;
6468 }
6469
6470 /* Returns true iff standard conversion sequence ICS1 is a proper
6471    subsequence of ICS2.  */
6472
6473 static bool
6474 is_subseq (conversion *ics1, conversion *ics2)
6475 {
6476   /* We can assume that a conversion of the same code
6477      between the same types indicates a subsequence since we only get
6478      here if the types we are converting from are the same.  */
6479
6480   while (ics1->kind == ck_rvalue
6481          || ics1->kind == ck_lvalue)
6482     ics1 = ics1->u.next;
6483
6484   while (1)
6485     {
6486       while (ics2->kind == ck_rvalue
6487              || ics2->kind == ck_lvalue)
6488         ics2 = ics2->u.next;
6489
6490       if (ics2->kind == ck_user
6491           || ics2->kind == ck_ambig
6492           || ics2->kind == ck_identity)
6493         /* At this point, ICS1 cannot be a proper subsequence of
6494            ICS2.  We can get a USER_CONV when we are comparing the
6495            second standard conversion sequence of two user conversion
6496            sequences.  */
6497         return false;
6498
6499       ics2 = ics2->u.next;
6500
6501       if (ics2->kind == ics1->kind
6502           && same_type_p (ics2->type, ics1->type)
6503           && same_type_p (ics2->u.next->type,
6504                           ics1->u.next->type))
6505         return true;
6506     }
6507 }
6508
6509 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
6510    be any _TYPE nodes.  */
6511
6512 bool
6513 is_properly_derived_from (tree derived, tree base)
6514 {
6515   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
6516     return false;
6517
6518   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
6519      considers every class derived from itself.  */
6520   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
6521           && DERIVED_FROM_P (base, derived));
6522 }
6523
6524 /* We build the ICS for an implicit object parameter as a pointer
6525    conversion sequence.  However, such a sequence should be compared
6526    as if it were a reference conversion sequence.  If ICS is the
6527    implicit conversion sequence for an implicit object parameter,
6528    modify it accordingly.  */
6529
6530 static void
6531 maybe_handle_implicit_object (conversion **ics)
6532 {
6533   if ((*ics)->this_p)
6534     {
6535       /* [over.match.funcs]
6536
6537          For non-static member functions, the type of the
6538          implicit object parameter is "reference to cv X"
6539          where X is the class of which the function is a
6540          member and cv is the cv-qualification on the member
6541          function declaration.  */
6542       conversion *t = *ics;
6543       tree reference_type;
6544
6545       /* The `this' parameter is a pointer to a class type.  Make the
6546          implicit conversion talk about a reference to that same class
6547          type.  */
6548       reference_type = TREE_TYPE (t->type);
6549       reference_type = build_reference_type (reference_type);
6550
6551       if (t->kind == ck_qual)
6552         t = t->u.next;
6553       if (t->kind == ck_ptr)
6554         t = t->u.next;
6555       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
6556       t = direct_reference_binding (reference_type, t);
6557       t->this_p = 1;
6558       t->rvaluedness_matches_p = 0;
6559       *ics = t;
6560     }
6561 }
6562
6563 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6564    and return the initial reference binding conversion. Otherwise,
6565    leave *ICS unchanged and return NULL.  */
6566
6567 static conversion *
6568 maybe_handle_ref_bind (conversion **ics)
6569 {
6570   if ((*ics)->kind == ck_ref_bind)
6571     {
6572       conversion *old_ics = *ics;
6573       *ics = old_ics->u.next;
6574       (*ics)->user_conv_p = old_ics->user_conv_p;
6575       return old_ics;
6576     }
6577
6578   return NULL;
6579 }
6580
6581 /* Compare two implicit conversion sequences according to the rules set out in
6582    [over.ics.rank].  Return values:
6583
6584       1: ics1 is better than ics2
6585      -1: ics2 is better than ics1
6586       0: ics1 and ics2 are indistinguishable */
6587
6588 static int
6589 compare_ics (conversion *ics1, conversion *ics2)
6590 {
6591   tree from_type1;
6592   tree from_type2;
6593   tree to_type1;
6594   tree to_type2;
6595   tree deref_from_type1 = NULL_TREE;
6596   tree deref_from_type2 = NULL_TREE;
6597   tree deref_to_type1 = NULL_TREE;
6598   tree deref_to_type2 = NULL_TREE;
6599   conversion_rank rank1, rank2;
6600
6601   /* REF_BINDING is nonzero if the result of the conversion sequence
6602      is a reference type.   In that case REF_CONV is the reference
6603      binding conversion. */
6604   conversion *ref_conv1;
6605   conversion *ref_conv2;
6606
6607   /* Handle implicit object parameters.  */
6608   maybe_handle_implicit_object (&ics1);
6609   maybe_handle_implicit_object (&ics2);
6610
6611   /* Handle reference parameters.  */
6612   ref_conv1 = maybe_handle_ref_bind (&ics1);
6613   ref_conv2 = maybe_handle_ref_bind (&ics2);
6614
6615   /* List-initialization sequence L1 is a better conversion sequence than
6616      list-initialization sequence L2 if L1 converts to
6617      std::initializer_list<X> for some X and L2 does not.  */
6618   if (ics1->kind == ck_list && ics2->kind != ck_list)
6619     return 1;
6620   if (ics2->kind == ck_list && ics1->kind != ck_list)
6621     return -1;
6622
6623   /* [over.ics.rank]
6624
6625      When  comparing  the  basic forms of implicit conversion sequences (as
6626      defined in _over.best.ics_)
6627
6628      --a standard conversion sequence (_over.ics.scs_) is a better
6629        conversion sequence than a user-defined conversion sequence
6630        or an ellipsis conversion sequence, and
6631
6632      --a user-defined conversion sequence (_over.ics.user_) is a
6633        better conversion sequence than an ellipsis conversion sequence
6634        (_over.ics.ellipsis_).  */
6635   rank1 = CONVERSION_RANK (ics1);
6636   rank2 = CONVERSION_RANK (ics2);
6637
6638   if (rank1 > rank2)
6639     return -1;
6640   else if (rank1 < rank2)
6641     return 1;
6642
6643   if (rank1 == cr_bad)
6644     {
6645       /* XXX Isn't this an extension? */
6646       /* Both ICS are bad.  We try to make a decision based on what
6647          would have happened if they'd been good.  */
6648       if (ics1->user_conv_p > ics2->user_conv_p
6649           || ics1->rank  > ics2->rank)
6650         return -1;
6651       else if (ics1->user_conv_p < ics2->user_conv_p
6652                || ics1->rank < ics2->rank)
6653         return 1;
6654
6655       /* We couldn't make up our minds; try to figure it out below.  */
6656     }
6657
6658   if (ics1->ellipsis_p || ics1->kind == ck_list)
6659     /* Both conversions are ellipsis conversions or both are building a
6660        std::initializer_list.  */
6661     return 0;
6662
6663   /* User-defined  conversion sequence U1 is a better conversion sequence
6664      than another user-defined conversion sequence U2 if they contain the
6665      same user-defined conversion operator or constructor and if the sec-
6666      ond standard conversion sequence of U1 is  better  than  the  second
6667      standard conversion sequence of U2.  */
6668
6669   if (ics1->user_conv_p)
6670     {
6671       conversion *t1;
6672       conversion *t2;
6673
6674       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
6675         if (t1->kind == ck_ambig || t1->kind == ck_aggr)
6676           return 0;
6677       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
6678         if (t2->kind == ck_ambig || t2->kind == ck_aggr)
6679           return 0;
6680
6681       if (t1->cand->fn != t2->cand->fn)
6682         return 0;
6683
6684       /* We can just fall through here, after setting up
6685          FROM_TYPE1 and FROM_TYPE2.  */
6686       from_type1 = t1->type;
6687       from_type2 = t2->type;
6688     }
6689   else
6690     {
6691       conversion *t1;
6692       conversion *t2;
6693
6694       /* We're dealing with two standard conversion sequences.
6695
6696          [over.ics.rank]
6697
6698          Standard conversion sequence S1 is a better conversion
6699          sequence than standard conversion sequence S2 if
6700
6701          --S1 is a proper subsequence of S2 (comparing the conversion
6702            sequences in the canonical form defined by _over.ics.scs_,
6703            excluding any Lvalue Transformation; the identity
6704            conversion sequence is considered to be a subsequence of
6705            any non-identity conversion sequence */
6706
6707       t1 = ics1;
6708       while (t1->kind != ck_identity)
6709         t1 = t1->u.next;
6710       from_type1 = t1->type;
6711
6712       t2 = ics2;
6713       while (t2->kind != ck_identity)
6714         t2 = t2->u.next;
6715       from_type2 = t2->type;
6716     }
6717
6718   /* One sequence can only be a subsequence of the other if they start with
6719      the same type.  They can start with different types when comparing the
6720      second standard conversion sequence in two user-defined conversion
6721      sequences.  */
6722   if (same_type_p (from_type1, from_type2))
6723     {
6724       if (is_subseq (ics1, ics2))
6725         return 1;
6726       if (is_subseq (ics2, ics1))
6727         return -1;
6728     }
6729
6730   /* [over.ics.rank]
6731
6732      Or, if not that,
6733
6734      --the rank of S1 is better than the rank of S2 (by the rules
6735        defined below):
6736
6737     Standard conversion sequences are ordered by their ranks: an Exact
6738     Match is a better conversion than a Promotion, which is a better
6739     conversion than a Conversion.
6740
6741     Two conversion sequences with the same rank are indistinguishable
6742     unless one of the following rules applies:
6743
6744     --A conversion that is not a conversion of a pointer, or pointer
6745       to member, to bool is better than another conversion that is such
6746       a conversion.
6747
6748     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6749     so that we do not have to check it explicitly.  */
6750   if (ics1->rank < ics2->rank)
6751     return 1;
6752   else if (ics2->rank < ics1->rank)
6753     return -1;
6754
6755   to_type1 = ics1->type;
6756   to_type2 = ics2->type;
6757
6758   /* A conversion from scalar arithmetic type to complex is worse than a
6759      conversion between scalar arithmetic types.  */
6760   if (same_type_p (from_type1, from_type2)
6761       && ARITHMETIC_TYPE_P (from_type1)
6762       && ARITHMETIC_TYPE_P (to_type1)
6763       && ARITHMETIC_TYPE_P (to_type2)
6764       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
6765           != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
6766     {
6767       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
6768         return -1;
6769       else
6770         return 1;
6771     }
6772
6773   if (TYPE_PTR_P (from_type1)
6774       && TYPE_PTR_P (from_type2)
6775       && TYPE_PTR_P (to_type1)
6776       && TYPE_PTR_P (to_type2))
6777     {
6778       deref_from_type1 = TREE_TYPE (from_type1);
6779       deref_from_type2 = TREE_TYPE (from_type2);
6780       deref_to_type1 = TREE_TYPE (to_type1);
6781       deref_to_type2 = TREE_TYPE (to_type2);
6782     }
6783   /* The rules for pointers to members A::* are just like the rules
6784      for pointers A*, except opposite: if B is derived from A then
6785      A::* converts to B::*, not vice versa.  For that reason, we
6786      switch the from_ and to_ variables here.  */
6787   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
6788             && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
6789            || (TYPE_PTRMEMFUNC_P (from_type1)
6790                && TYPE_PTRMEMFUNC_P (from_type2)
6791                && TYPE_PTRMEMFUNC_P (to_type1)
6792                && TYPE_PTRMEMFUNC_P (to_type2)))
6793     {
6794       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
6795       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
6796       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
6797       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
6798     }
6799
6800   if (deref_from_type1 != NULL_TREE
6801       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
6802       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
6803     {
6804       /* This was one of the pointer or pointer-like conversions.
6805
6806          [over.ics.rank]
6807
6808          --If class B is derived directly or indirectly from class A,
6809            conversion of B* to A* is better than conversion of B* to
6810            void*, and conversion of A* to void* is better than
6811            conversion of B* to void*.  */
6812       if (TREE_CODE (deref_to_type1) == VOID_TYPE
6813           && TREE_CODE (deref_to_type2) == VOID_TYPE)
6814         {
6815           if (is_properly_derived_from (deref_from_type1,
6816                                         deref_from_type2))
6817             return -1;
6818           else if (is_properly_derived_from (deref_from_type2,
6819                                              deref_from_type1))
6820             return 1;
6821         }
6822       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
6823                || TREE_CODE (deref_to_type2) == VOID_TYPE)
6824         {
6825           if (same_type_p (deref_from_type1, deref_from_type2))
6826             {
6827               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
6828                 {
6829                   if (is_properly_derived_from (deref_from_type1,
6830                                                 deref_to_type1))
6831                     return 1;
6832                 }
6833               /* We know that DEREF_TO_TYPE1 is `void' here.  */
6834               else if (is_properly_derived_from (deref_from_type1,
6835                                                  deref_to_type2))
6836                 return -1;
6837             }
6838         }
6839       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
6840                && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
6841         {
6842           /* [over.ics.rank]
6843
6844              --If class B is derived directly or indirectly from class A
6845                and class C is derived directly or indirectly from B,
6846
6847              --conversion of C* to B* is better than conversion of C* to
6848                A*,
6849
6850              --conversion of B* to A* is better than conversion of C* to
6851                A*  */
6852           if (same_type_p (deref_from_type1, deref_from_type2))
6853             {
6854               if (is_properly_derived_from (deref_to_type1,
6855                                             deref_to_type2))
6856                 return 1;
6857               else if (is_properly_derived_from (deref_to_type2,
6858                                                  deref_to_type1))
6859                 return -1;
6860             }
6861           else if (same_type_p (deref_to_type1, deref_to_type2))
6862             {
6863               if (is_properly_derived_from (deref_from_type2,
6864                                             deref_from_type1))
6865                 return 1;
6866               else if (is_properly_derived_from (deref_from_type1,
6867                                                  deref_from_type2))
6868                 return -1;
6869             }
6870         }
6871     }
6872   else if (CLASS_TYPE_P (non_reference (from_type1))
6873            && same_type_p (from_type1, from_type2))
6874     {
6875       tree from = non_reference (from_type1);
6876
6877       /* [over.ics.rank]
6878
6879          --binding of an expression of type C to a reference of type
6880            B& is better than binding an expression of type C to a
6881            reference of type A&
6882
6883          --conversion of C to B is better than conversion of C to A,  */
6884       if (is_properly_derived_from (from, to_type1)
6885           && is_properly_derived_from (from, to_type2))
6886         {
6887           if (is_properly_derived_from (to_type1, to_type2))
6888             return 1;
6889           else if (is_properly_derived_from (to_type2, to_type1))
6890             return -1;
6891         }
6892     }
6893   else if (CLASS_TYPE_P (non_reference (to_type1))
6894            && same_type_p (to_type1, to_type2))
6895     {
6896       tree to = non_reference (to_type1);
6897
6898       /* [over.ics.rank]
6899
6900          --binding of an expression of type B to a reference of type
6901            A& is better than binding an expression of type C to a
6902            reference of type A&,
6903
6904          --conversion of B to A is better than conversion of C to A  */
6905       if (is_properly_derived_from (from_type1, to)
6906           && is_properly_derived_from (from_type2, to))
6907         {
6908           if (is_properly_derived_from (from_type2, from_type1))
6909             return 1;
6910           else if (is_properly_derived_from (from_type1, from_type2))
6911             return -1;
6912         }
6913     }
6914
6915   /* [over.ics.rank]
6916
6917      --S1 and S2 differ only in their qualification conversion and  yield
6918        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
6919        qualification signature of type T1 is a proper subset of  the  cv-
6920        qualification signature of type T2  */
6921   if (ics1->kind == ck_qual
6922       && ics2->kind == ck_qual
6923       && same_type_p (from_type1, from_type2))
6924     {
6925       int result = comp_cv_qual_signature (to_type1, to_type2);
6926       if (result != 0)
6927         return result;
6928     }
6929
6930   /* [over.ics.rank]
6931
6932      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
6933      to an implicit object parameter, and either S1 binds an lvalue reference
6934      to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
6935      reference to an rvalue and S2 binds an lvalue reference
6936      (C++0x draft standard, 13.3.3.2)
6937
6938      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
6939      types to which the references refer are the same type except for
6940      top-level cv-qualifiers, and the type to which the reference
6941      initialized by S2 refers is more cv-qualified than the type to
6942      which the reference initialized by S1 refers */
6943
6944   if (ref_conv1 && ref_conv2)
6945     {
6946       if (!ref_conv1->this_p && !ref_conv2->this_p
6947           && (TYPE_REF_IS_RVALUE (ref_conv1->type)
6948               != TYPE_REF_IS_RVALUE (ref_conv2->type)))
6949         {
6950           if (ref_conv1->rvaluedness_matches_p)
6951             return 1;
6952           if (ref_conv2->rvaluedness_matches_p)
6953             return -1;
6954         }
6955
6956       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
6957         return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
6958                                       TREE_TYPE (ref_conv1->type));
6959     }
6960
6961   /* Neither conversion sequence is better than the other.  */
6962   return 0;
6963 }
6964
6965 /* The source type for this standard conversion sequence.  */
6966
6967 static tree
6968 source_type (conversion *t)
6969 {
6970   for (;; t = t->u.next)
6971     {
6972       if (t->kind == ck_user
6973           || t->kind == ck_ambig
6974           || t->kind == ck_identity)
6975         return t->type;
6976     }
6977   gcc_unreachable ();
6978 }
6979
6980 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
6981    a pointer to LOSER and re-running joust to produce the warning if WINNER
6982    is actually used.  */
6983
6984 static void
6985 add_warning (struct z_candidate *winner, struct z_candidate *loser)
6986 {
6987   candidate_warning *cw = (candidate_warning *)
6988     conversion_obstack_alloc (sizeof (candidate_warning));
6989   cw->loser = loser;
6990   cw->next = winner->warnings;
6991   winner->warnings = cw;
6992 }
6993
6994 /* Compare two candidates for overloading as described in
6995    [over.match.best].  Return values:
6996
6997       1: cand1 is better than cand2
6998      -1: cand2 is better than cand1
6999       0: cand1 and cand2 are indistinguishable */
7000
7001 static int
7002 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
7003 {
7004   int winner = 0;
7005   int off1 = 0, off2 = 0;
7006   size_t i;
7007   size_t len;
7008
7009   /* Candidates that involve bad conversions are always worse than those
7010      that don't.  */
7011   if (cand1->viable > cand2->viable)
7012     return 1;
7013   if (cand1->viable < cand2->viable)
7014     return -1;
7015
7016   /* If we have two pseudo-candidates for conversions to the same type,
7017      or two candidates for the same function, arbitrarily pick one.  */
7018   if (cand1->fn == cand2->fn
7019       && (IS_TYPE_OR_DECL_P (cand1->fn)))
7020     return 1;
7021
7022   /* a viable function F1
7023      is defined to be a better function than another viable function F2  if
7024      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
7025      ICSi(F2), and then */
7026
7027   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
7028      ICSj(F2) */
7029
7030   /* For comparing static and non-static member functions, we ignore
7031      the implicit object parameter of the non-static function.  The
7032      standard says to pretend that the static function has an object
7033      parm, but that won't work with operator overloading.  */
7034   len = cand1->num_convs;
7035   if (len != cand2->num_convs)
7036     {
7037       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
7038       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
7039
7040       gcc_assert (static_1 != static_2);
7041
7042       if (static_1)
7043         off2 = 1;
7044       else
7045         {
7046           off1 = 1;
7047           --len;
7048         }
7049     }
7050
7051   for (i = 0; i < len; ++i)
7052     {
7053       conversion *t1 = cand1->convs[i + off1];
7054       conversion *t2 = cand2->convs[i + off2];
7055       int comp = compare_ics (t1, t2);
7056
7057       if (comp != 0)
7058         {
7059           if (warn_sign_promo
7060               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
7061                   == cr_std + cr_promotion)
7062               && t1->kind == ck_std
7063               && t2->kind == ck_std
7064               && TREE_CODE (t1->type) == INTEGER_TYPE
7065               && TREE_CODE (t2->type) == INTEGER_TYPE
7066               && (TYPE_PRECISION (t1->type)
7067                   == TYPE_PRECISION (t2->type))
7068               && (TYPE_UNSIGNED (t1->u.next->type)
7069                   || (TREE_CODE (t1->u.next->type)
7070                       == ENUMERAL_TYPE)))
7071             {
7072               tree type = t1->u.next->type;
7073               tree type1, type2;
7074               struct z_candidate *w, *l;
7075               if (comp > 0)
7076                 type1 = t1->type, type2 = t2->type,
7077                   w = cand1, l = cand2;
7078               else
7079                 type1 = t2->type, type2 = t1->type,
7080                   w = cand2, l = cand1;
7081
7082               if (warn)
7083                 {
7084                   warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
7085                            type, type1, type2);
7086                   warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
7087                 }
7088               else
7089                 add_warning (w, l);
7090             }
7091
7092           if (winner && comp != winner)
7093             {
7094               winner = 0;
7095               goto tweak;
7096             }
7097           winner = comp;
7098         }
7099     }
7100
7101   /* warn about confusing overload resolution for user-defined conversions,
7102      either between a constructor and a conversion op, or between two
7103      conversion ops.  */
7104   if (winner && warn_conversion && cand1->second_conv
7105       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
7106       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
7107     {
7108       struct z_candidate *w, *l;
7109       bool give_warning = false;
7110
7111       if (winner == 1)
7112         w = cand1, l = cand2;
7113       else
7114         w = cand2, l = cand1;
7115
7116       /* We don't want to complain about `X::operator T1 ()'
7117          beating `X::operator T2 () const', when T2 is a no less
7118          cv-qualified version of T1.  */
7119       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
7120           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
7121         {
7122           tree t = TREE_TYPE (TREE_TYPE (l->fn));
7123           tree f = TREE_TYPE (TREE_TYPE (w->fn));
7124
7125           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
7126             {
7127               t = TREE_TYPE (t);
7128               f = TREE_TYPE (f);
7129             }
7130           if (!comp_ptr_ttypes (t, f))
7131             give_warning = true;
7132         }
7133       else
7134         give_warning = true;
7135
7136       if (!give_warning)
7137         /*NOP*/;
7138       else if (warn)
7139         {
7140           tree source = source_type (w->convs[0]);
7141           if (! DECL_CONSTRUCTOR_P (w->fn))
7142             source = TREE_TYPE (source);
7143           if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
7144               && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
7145                           source, w->second_conv->type)) 
7146             {
7147               inform (input_location, "  because conversion sequence for the argument is better");
7148             }
7149         }
7150       else
7151         add_warning (w, l);
7152     }
7153
7154   if (winner)
7155     return winner;
7156
7157   /* or, if not that,
7158      F1 is a non-template function and F2 is a template function
7159      specialization.  */
7160
7161   if (!cand1->template_decl && cand2->template_decl)
7162     return 1;
7163   else if (cand1->template_decl && !cand2->template_decl)
7164     return -1;
7165
7166   /* or, if not that,
7167      F1 and F2 are template functions and the function template for F1 is
7168      more specialized than the template for F2 according to the partial
7169      ordering rules.  */
7170
7171   if (cand1->template_decl && cand2->template_decl)
7172     {
7173       winner = more_specialized_fn
7174         (TI_TEMPLATE (cand1->template_decl),
7175          TI_TEMPLATE (cand2->template_decl),
7176          /* [temp.func.order]: The presence of unused ellipsis and default
7177             arguments has no effect on the partial ordering of function
7178             templates.   add_function_candidate() will not have
7179             counted the "this" argument for constructors.  */
7180          cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
7181       if (winner)
7182         return winner;
7183     }
7184
7185   /* or, if not that,
7186      the  context  is  an  initialization by user-defined conversion (see
7187      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
7188      sequence  from  the return type of F1 to the destination type (i.e.,
7189      the type of the entity being initialized)  is  a  better  conversion
7190      sequence  than the standard conversion sequence from the return type
7191      of F2 to the destination type.  */
7192
7193   if (cand1->second_conv)
7194     {
7195       winner = compare_ics (cand1->second_conv, cand2->second_conv);
7196       if (winner)
7197         return winner;
7198     }
7199
7200   /* Check whether we can discard a builtin candidate, either because we
7201      have two identical ones or matching builtin and non-builtin candidates.
7202
7203      (Pedantically in the latter case the builtin which matched the user
7204      function should not be added to the overload set, but we spot it here.
7205
7206      [over.match.oper]
7207      ... the builtin candidates include ...
7208      - do not have the same parameter type list as any non-template
7209        non-member candidate.  */
7210
7211   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
7212       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
7213     {
7214       for (i = 0; i < len; ++i)
7215         if (!same_type_p (cand1->convs[i]->type,
7216                           cand2->convs[i]->type))
7217           break;
7218       if (i == cand1->num_convs)
7219         {
7220           if (cand1->fn == cand2->fn)
7221             /* Two built-in candidates; arbitrarily pick one.  */
7222             return 1;
7223           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
7224             /* cand1 is built-in; prefer cand2.  */
7225             return -1;
7226           else
7227             /* cand2 is built-in; prefer cand1.  */
7228             return 1;
7229         }
7230     }
7231
7232   /* If the two function declarations represent the same function (this can
7233      happen with declarations in multiple scopes and arg-dependent lookup),
7234      arbitrarily choose one.  But first make sure the default args we're
7235      using match.  */
7236   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
7237       && equal_functions (cand1->fn, cand2->fn))
7238     {
7239       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
7240       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
7241
7242       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
7243
7244       for (i = 0; i < len; ++i)
7245         {
7246           /* Don't crash if the fn is variadic.  */
7247           if (!parms1)
7248             break;
7249           parms1 = TREE_CHAIN (parms1);
7250           parms2 = TREE_CHAIN (parms2);
7251         }
7252
7253       if (off1)
7254         parms1 = TREE_CHAIN (parms1);
7255       else if (off2)
7256         parms2 = TREE_CHAIN (parms2);
7257
7258       for (; parms1; ++i)
7259         {
7260           if (!cp_tree_equal (TREE_PURPOSE (parms1),
7261                               TREE_PURPOSE (parms2)))
7262             {
7263               if (warn)
7264                 {
7265                   permerror (input_location, "default argument mismatch in "
7266                              "overload resolution");
7267                   inform (input_location,
7268                           " candidate 1: %q+#F", cand1->fn);
7269                   inform (input_location,
7270                           " candidate 2: %q+#F", cand2->fn);
7271                 }
7272               else
7273                 add_warning (cand1, cand2);
7274               break;
7275             }
7276           parms1 = TREE_CHAIN (parms1);
7277           parms2 = TREE_CHAIN (parms2);
7278         }
7279
7280       return 1;
7281     }
7282
7283 tweak:
7284
7285   /* Extension: If the worst conversion for one candidate is worse than the
7286      worst conversion for the other, take the first.  */
7287   if (!pedantic)
7288     {
7289       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
7290       struct z_candidate *w = 0, *l = 0;
7291
7292       for (i = 0; i < len; ++i)
7293         {
7294           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
7295             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
7296           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
7297             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
7298         }
7299       if (rank1 < rank2)
7300         winner = 1, w = cand1, l = cand2;
7301       if (rank1 > rank2)
7302         winner = -1, w = cand2, l = cand1;
7303       if (winner)
7304         {
7305           if (warn)
7306             {
7307               pedwarn (input_location, 0,
7308               "ISO C++ says that these are ambiguous, even "
7309               "though the worst conversion for the first is better than "
7310               "the worst conversion for the second:");
7311               print_z_candidate (_("candidate 1:"), w);
7312               print_z_candidate (_("candidate 2:"), l);
7313             }
7314           else
7315             add_warning (w, l);
7316           return winner;
7317         }
7318     }
7319
7320   gcc_assert (!winner);
7321   return 0;
7322 }
7323
7324 /* Given a list of candidates for overloading, find the best one, if any.
7325    This algorithm has a worst case of O(2n) (winner is last), and a best
7326    case of O(n/2) (totally ambiguous); much better than a sorting
7327    algorithm.  */
7328
7329 static struct z_candidate *
7330 tourney (struct z_candidate *candidates)
7331 {
7332   struct z_candidate *champ = candidates, *challenger;
7333   int fate;
7334   int champ_compared_to_predecessor = 0;
7335
7336   /* Walk through the list once, comparing each current champ to the next
7337      candidate, knocking out a candidate or two with each comparison.  */
7338
7339   for (challenger = champ->next; challenger; )
7340     {
7341       fate = joust (champ, challenger, 0);
7342       if (fate == 1)
7343         challenger = challenger->next;
7344       else
7345         {
7346           if (fate == 0)
7347             {
7348               champ = challenger->next;
7349               if (champ == 0)
7350                 return NULL;
7351               champ_compared_to_predecessor = 0;
7352             }
7353           else
7354             {
7355               champ = challenger;
7356               champ_compared_to_predecessor = 1;
7357             }
7358
7359           challenger = champ->next;
7360         }
7361     }
7362
7363   /* Make sure the champ is better than all the candidates it hasn't yet
7364      been compared to.  */
7365
7366   for (challenger = candidates;
7367        challenger != champ
7368          && !(champ_compared_to_predecessor && challenger->next == champ);
7369        challenger = challenger->next)
7370     {
7371       fate = joust (champ, challenger, 0);
7372       if (fate != 1)
7373         return NULL;
7374     }
7375
7376   return champ;
7377 }
7378
7379 /* Returns nonzero if things of type FROM can be converted to TO.  */
7380
7381 bool
7382 can_convert (tree to, tree from)
7383 {
7384   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
7385 }
7386
7387 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
7388
7389 bool
7390 can_convert_arg (tree to, tree from, tree arg, int flags)
7391 {
7392   conversion *t;
7393   void *p;
7394   bool ok_p;
7395
7396   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7397   p = conversion_obstack_alloc (0);
7398
7399   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7400                             flags);
7401   ok_p = (t && !t->bad_p);
7402
7403   /* Free all the conversions we allocated.  */
7404   obstack_free (&conversion_obstack, p);
7405
7406   return ok_p;
7407 }
7408
7409 /* Like can_convert_arg, but allows dubious conversions as well.  */
7410
7411 bool
7412 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
7413 {
7414   conversion *t;
7415   void *p;
7416
7417   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7418   p = conversion_obstack_alloc (0);
7419   /* Try to perform the conversion.  */
7420   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7421                             flags);
7422   /* Free all the conversions we allocated.  */
7423   obstack_free (&conversion_obstack, p);
7424
7425   return t != NULL;
7426 }
7427
7428 /* Convert EXPR to TYPE.  Return the converted expression.
7429
7430    Note that we allow bad conversions here because by the time we get to
7431    this point we are committed to doing the conversion.  If we end up
7432    doing a bad conversion, convert_like will complain.  */
7433
7434 tree
7435 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
7436 {
7437   conversion *conv;
7438   void *p;
7439
7440   if (error_operand_p (expr))
7441     return error_mark_node;
7442
7443   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7444   p = conversion_obstack_alloc (0);
7445
7446   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7447                               /*c_cast_p=*/false,
7448                               flags);
7449
7450   if (!conv)
7451     {
7452       if (complain & tf_error)
7453         {
7454           /* If expr has unknown type, then it is an overloaded function.
7455              Call instantiate_type to get good error messages.  */
7456           if (TREE_TYPE (expr) == unknown_type_node)
7457             instantiate_type (type, expr, complain);
7458           else if (invalid_nonstatic_memfn_p (expr, complain))
7459             /* We gave an error.  */;
7460           else
7461             error ("could not convert %qE to %qT", expr, type);
7462         }
7463       expr = error_mark_node;
7464     }
7465   else if (processing_template_decl)
7466     {
7467       /* In a template, we are only concerned about determining the
7468          type of non-dependent expressions, so we do not have to
7469          perform the actual conversion.  */
7470       if (TREE_TYPE (expr) != type)
7471         expr = build_nop (type, expr);
7472     }
7473   else
7474     expr = convert_like (conv, expr, complain);
7475
7476   /* Free all the conversions we allocated.  */
7477   obstack_free (&conversion_obstack, p);
7478
7479   return expr;
7480 }
7481
7482 tree
7483 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
7484 {
7485   return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
7486 }
7487
7488 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7489    permitted.  If the conversion is valid, the converted expression is
7490    returned.  Otherwise, NULL_TREE is returned, except in the case
7491    that TYPE is a class type; in that case, an error is issued.  If
7492    C_CAST_P is true, then this direction initialization is taking
7493    place as part of a static_cast being attempted as part of a C-style
7494    cast.  */
7495
7496 tree
7497 perform_direct_initialization_if_possible (tree type,
7498                                            tree expr,
7499                                            bool c_cast_p,
7500                                            tsubst_flags_t complain)
7501 {
7502   conversion *conv;
7503   void *p;
7504
7505   if (type == error_mark_node || error_operand_p (expr))
7506     return error_mark_node;
7507   /* [dcl.init]
7508
7509      If the destination type is a (possibly cv-qualified) class type:
7510
7511      -- If the initialization is direct-initialization ...,
7512      constructors are considered. ... If no constructor applies, or
7513      the overload resolution is ambiguous, the initialization is
7514      ill-formed.  */
7515   if (CLASS_TYPE_P (type))
7516     {
7517       VEC(tree,gc) *args = make_tree_vector_single (expr);
7518       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7519                                         &args, type, LOOKUP_NORMAL, complain);
7520       release_tree_vector (args);
7521       return build_cplus_new (type, expr);
7522     }
7523
7524   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7525   p = conversion_obstack_alloc (0);
7526
7527   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7528                               c_cast_p,
7529                               LOOKUP_NORMAL);
7530   if (!conv || conv->bad_p)
7531     expr = NULL_TREE;
7532   else
7533     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
7534                               /*issue_conversion_warnings=*/false,
7535                               c_cast_p,
7536                               tf_warning_or_error);
7537
7538   /* Free all the conversions we allocated.  */
7539   obstack_free (&conversion_obstack, p);
7540
7541   return expr;
7542 }
7543
7544 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
7545    is being bound to a temporary.  Create and return a new VAR_DECL
7546    with the indicated TYPE; this variable will store the value to
7547    which the reference is bound.  */
7548
7549 tree
7550 make_temporary_var_for_ref_to_temp (tree decl, tree type)
7551 {
7552   tree var;
7553
7554   /* Create the variable.  */
7555   var = create_temporary_var (type);
7556
7557   /* Register the variable.  */
7558   if (TREE_STATIC (decl))
7559     {
7560       /* Namespace-scope or local static; give it a mangled name.  */
7561       tree name;
7562
7563       TREE_STATIC (var) = 1;
7564       name = mangle_ref_init_variable (decl);
7565       DECL_NAME (var) = name;
7566       SET_DECL_ASSEMBLER_NAME (var, name);
7567       var = pushdecl_top_level (var);
7568     }
7569   else
7570     /* Create a new cleanup level if necessary.  */
7571     maybe_push_cleanup_level (type);
7572
7573   return var;
7574 }
7575
7576 /* EXPR is the initializer for a variable DECL of reference or
7577    std::initializer_list type.  Create, push and return a new VAR_DECL
7578    for the initializer so that it will live as long as DECL.  Any
7579    cleanup for the new variable is returned through CLEANUP, and the
7580    code to initialize the new variable is returned through INITP.  */
7581
7582 tree
7583 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
7584 {
7585   tree init;
7586   tree type;
7587   tree var;
7588
7589   /* Create the temporary variable.  */
7590   type = TREE_TYPE (expr);
7591   var = make_temporary_var_for_ref_to_temp (decl, type);
7592   layout_decl (var, 0);
7593   /* If the rvalue is the result of a function call it will be
7594      a TARGET_EXPR.  If it is some other construct (such as a
7595      member access expression where the underlying object is
7596      itself the result of a function call), turn it into a
7597      TARGET_EXPR here.  It is important that EXPR be a
7598      TARGET_EXPR below since otherwise the INIT_EXPR will
7599      attempt to make a bitwise copy of EXPR to initialize
7600      VAR.  */
7601   if (TREE_CODE (expr) != TARGET_EXPR)
7602     expr = get_target_expr (expr);
7603   /* Create the INIT_EXPR that will initialize the temporary
7604      variable.  */
7605   init = build2 (INIT_EXPR, type, var, expr);
7606   if (at_function_scope_p ())
7607     {
7608       add_decl_expr (var);
7609
7610       if (TREE_STATIC (var))
7611         init = add_stmt_to_compound (init, register_dtor_fn (var));
7612       else
7613         *cleanup = cxx_maybe_build_cleanup (var);
7614
7615       /* We must be careful to destroy the temporary only
7616          after its initialization has taken place.  If the
7617          initialization throws an exception, then the
7618          destructor should not be run.  We cannot simply
7619          transform INIT into something like:
7620
7621          (INIT, ({ CLEANUP_STMT; }))
7622
7623          because emit_local_var always treats the
7624          initializer as a full-expression.  Thus, the
7625          destructor would run too early; it would run at the
7626          end of initializing the reference variable, rather
7627          than at the end of the block enclosing the
7628          reference variable.
7629
7630          The solution is to pass back a cleanup expression
7631          which the caller is responsible for attaching to
7632          the statement tree.  */
7633     }
7634   else
7635     {
7636       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
7637       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7638         static_aggregates = tree_cons (NULL_TREE, var,
7639                                        static_aggregates);
7640     }
7641
7642   *initp = init;
7643   return var;
7644 }
7645
7646 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7647    initializing a variable of that TYPE.  If DECL is non-NULL, it is
7648    the VAR_DECL being initialized with the EXPR.  (In that case, the
7649    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
7650    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
7651    return, if *CLEANUP is no longer NULL, it will be an expression
7652    that should be pushed as a cleanup after the returned expression
7653    is used to initialize DECL.
7654
7655    Return the converted expression.  */
7656
7657 tree
7658 initialize_reference (tree type, tree expr, tree decl, tree *cleanup,
7659                       tsubst_flags_t complain)
7660 {
7661   conversion *conv;
7662   void *p;
7663
7664   if (type == error_mark_node || error_operand_p (expr))
7665     return error_mark_node;
7666
7667   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7668   p = conversion_obstack_alloc (0);
7669
7670   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
7671                             LOOKUP_NORMAL);
7672   if (!conv || conv->bad_p)
7673     {
7674       if (complain & tf_error)
7675         {
7676           if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
7677               && !TYPE_REF_IS_RVALUE (type)
7678               && !real_lvalue_p (expr))
7679             error ("invalid initialization of non-const reference of "
7680                    "type %qT from an rvalue of type %qT",
7681                    type, TREE_TYPE (expr));
7682           else
7683             error ("invalid initialization of reference of type "
7684                    "%qT from expression of type %qT", type,
7685                    TREE_TYPE (expr));
7686         }
7687       return error_mark_node;
7688     }
7689
7690   /* If DECL is non-NULL, then this special rule applies:
7691
7692        [class.temporary]
7693
7694        The temporary to which the reference is bound or the temporary
7695        that is the complete object to which the reference is bound
7696        persists for the lifetime of the reference.
7697
7698        The temporaries created during the evaluation of the expression
7699        initializing the reference, except the temporary to which the
7700        reference is bound, are destroyed at the end of the
7701        full-expression in which they are created.
7702
7703      In that case, we store the converted expression into a new
7704      VAR_DECL in a new scope.
7705
7706      However, we want to be careful not to create temporaries when
7707      they are not required.  For example, given:
7708
7709        struct B {};
7710        struct D : public B {};
7711        D f();
7712        const B& b = f();
7713
7714      there is no need to copy the return value from "f"; we can just
7715      extend its lifetime.  Similarly, given:
7716
7717        struct S {};
7718        struct T { operator S(); };
7719        T t;
7720        const S& s = t;
7721
7722     we can extend the lifetime of the return value of the conversion
7723     operator.  */
7724   gcc_assert (conv->kind == ck_ref_bind);
7725   if (decl)
7726     {
7727       tree var;
7728       tree base_conv_type;
7729
7730       /* Skip over the REF_BIND.  */
7731       conv = conv->u.next;
7732       /* If the next conversion is a BASE_CONV, skip that too -- but
7733          remember that the conversion was required.  */
7734       if (conv->kind == ck_base)
7735         {
7736           base_conv_type = conv->type;
7737           conv = conv->u.next;
7738         }
7739       else
7740         base_conv_type = NULL_TREE;
7741       /* Perform the remainder of the conversion.  */
7742       expr = convert_like_real (conv, expr,
7743                                 /*fn=*/NULL_TREE, /*argnum=*/0,
7744                                 /*inner=*/-1,
7745                                 /*issue_conversion_warnings=*/true,
7746                                 /*c_cast_p=*/false,
7747                                 tf_warning_or_error);
7748       if (error_operand_p (expr))
7749         expr = error_mark_node;
7750       else
7751         {
7752           if (!lvalue_or_rvalue_with_address_p (expr))
7753             {
7754               tree init;
7755               var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
7756               /* Use its address to initialize the reference variable.  */
7757               expr = build_address (var);
7758               if (base_conv_type)
7759                 expr = convert_to_base (expr,
7760                                         build_pointer_type (base_conv_type),
7761                                         /*check_access=*/true,
7762                                         /*nonnull=*/true);
7763               expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
7764             }
7765           else
7766             /* Take the address of EXPR.  */
7767             expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error);
7768           /* If a BASE_CONV was required, perform it now.  */
7769           if (base_conv_type)
7770             expr = (perform_implicit_conversion
7771                     (build_pointer_type (base_conv_type), expr,
7772                      tf_warning_or_error));
7773           expr = build_nop (type, expr);
7774         }
7775     }
7776   else
7777     /* Perform the conversion.  */
7778     expr = convert_like (conv, expr, tf_warning_or_error);
7779
7780   /* Free all the conversions we allocated.  */
7781   obstack_free (&conversion_obstack, p);
7782
7783   return expr;
7784 }
7785
7786 /* Returns true iff TYPE is some variant of std::initializer_list.  */
7787
7788 bool
7789 is_std_init_list (tree type)
7790 {
7791   return (CLASS_TYPE_P (type)
7792           && CP_TYPE_CONTEXT (type) == std_node
7793           && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
7794 }
7795
7796 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7797    will accept an argument list of a single std::initializer_list<T>.  */
7798
7799 bool
7800 is_list_ctor (tree decl)
7801 {
7802   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
7803   tree arg;
7804
7805   if (!args || args == void_list_node)
7806     return false;
7807
7808   arg = non_reference (TREE_VALUE (args));
7809   if (!is_std_init_list (arg))
7810     return false;
7811
7812   args = TREE_CHAIN (args);
7813
7814   if (args && args != void_list_node && !TREE_PURPOSE (args))
7815     /* There are more non-defaulted parms.  */
7816     return false;
7817
7818   return true;
7819 }
7820
7821 #include "gt-cp-call.h"