OSDN Git Service

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