OSDN Git Service

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