OSDN Git Service

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