OSDN Git Service

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