OSDN Git Service

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