OSDN Git Service

* decl.c (start_decl): Don't allow duplicate definitions of static
[pf3gnuchains/gcc-fork.git] / gcc / cp / call.c
1 /* Functions related to invoking methods and overloaded functions.
2    Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com) and
4    hacked by Brendan Kehoe (brendan@cygnus.com).
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23
24 /* High-level class interface.  */
25
26 #include "config.h"
27 #include "tree.h"
28 #include <stdio.h>
29 #include "cp-tree.h"
30 #include "class.h"
31 #include "output.h"
32 #include "flags.h"
33
34 #ifdef HAVE_STDLIB_H
35 #include <stdlib.h>
36 #endif
37
38 #include "obstack.h"
39 #define obstack_chunk_alloc xmalloc
40 #define obstack_chunk_free free
41
42 extern int inhibit_warnings;
43 extern tree ctor_label, dtor_label;
44
45 /* Compute the ease with which a conversion can be performed
46    between an expected and the given type.  */
47
48 static struct harshness_code convert_harshness PROTO((register tree, register tree, tree));
49 static tree build_new_method_call               PROTO((tree, tree, tree, tree, int));
50
51 static int rank_for_ideal PROTO((struct candidate *,
52                                  struct candidate *));
53 static int user_harshness PROTO((tree, tree));
54 static int strictly_better PROTO((unsigned int, unsigned int));
55 static struct candidate * ideal_candidate PROTO((struct candidate *,
56                                                  int, int));
57 static int may_be_remote PROTO((tree));
58 static tree build_field_call PROTO((tree, tree, tree, tree));
59 static tree find_scoped_type PROTO((tree, tree, tree));
60 static void print_candidates PROTO((tree));
61 static struct z_candidate * tourney PROTO((struct z_candidate *));
62 static int joust PROTO((struct z_candidate *, struct z_candidate *));
63 static int compare_qual PROTO((tree, tree));
64 static int compare_ics PROTO((tree, tree));
65 static tree build_over_call PROTO((tree, tree, tree, int));
66 static tree convert_default_arg PROTO((tree, tree));
67 static void enforce_access PROTO((tree, tree));
68 static tree convert_like PROTO((tree, tree));
69 static void op_error PROTO((enum tree_code, enum tree_code, tree, tree,
70                             tree, char *));
71 static tree build_object_call PROTO((tree, tree));
72 static tree resolve_args PROTO((tree));
73 static struct z_candidate * build_user_type_conversion_1
74         PROTO ((tree, tree, int));
75 static void print_z_candidates PROTO((struct z_candidate *));
76 static tree build_this PROTO((tree));
77 static struct z_candidate * splice_viable PROTO((struct z_candidate *));
78 static int any_viable PROTO((struct z_candidate *));
79 static struct z_candidate * add_template_candidate
80         PROTO((struct z_candidate *, tree, tree, tree, tree, int));
81 static struct z_candidate * add_template_conv_candidate 
82         PROTO((struct z_candidate *, tree, tree, tree, tree));
83 static struct z_candidate * add_builtin_candidates
84         PROTO((struct z_candidate *, enum tree_code, enum tree_code,
85                tree, tree *, int));
86 static struct z_candidate * add_builtin_candidate
87         PROTO((struct z_candidate *, enum tree_code, enum tree_code,
88                tree, tree, tree, tree *, tree *, int));
89 static int is_complete PROTO((tree));
90 static struct z_candidate * build_builtin_candidate 
91         PROTO((struct z_candidate *, tree, tree, tree, tree *, tree *,
92                int));
93 static struct z_candidate * add_conv_candidate 
94         PROTO((struct z_candidate *, tree, tree, tree));
95 static struct z_candidate * add_function_candidate 
96         PROTO((struct z_candidate *, tree, tree, int));
97 static tree implicit_conversion PROTO((tree, tree, tree, int));
98 static tree standard_conversion PROTO((tree, tree, tree));
99 static tree reference_binding PROTO((tree, tree, tree, int));
100 static tree strip_top_quals PROTO((tree));
101 static tree non_reference PROTO((tree));
102 static tree build_conv PROTO((enum tree_code, tree, tree));
103 static void print_n_candidates PROTO((struct candidate *, int));
104 static tree default_parm_conversions PROTO((tree, tree *));
105 static int is_subseq PROTO((tree, tree));
106
107 #define EVIL_RETURN(ARG)        ((ARG).code = EVIL_CODE, (ARG))
108 #define STD_RETURN(ARG)         ((ARG).code = STD_CODE, (ARG))
109 #define QUAL_RETURN(ARG)        ((ARG).code = QUAL_CODE, (ARG))
110 #define TRIVIAL_RETURN(ARG)     ((ARG).code = TRIVIAL_CODE, (ARG))
111 #define ZERO_RETURN(ARG)        ((ARG).code = 0, (ARG))
112
113 /* Ordering function for overload resolution.  Compare two candidates
114    by gross quality.  */
115
116 int
117 rank_for_overload (x, y)
118      struct candidate *x, *y;
119 {
120   if (y->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
121     return y->h.code - x->h.code;
122   if (x->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
123     return -1;
124
125   /* This is set by compute_conversion_costs, for calling a non-const
126      member function from a const member function.  */
127   if ((y->harshness[0].code & CONST_CODE) ^ (x->harshness[0].code & CONST_CODE))
128     return y->harshness[0].code - x->harshness[0].code;
129
130   if (y->h.code & STD_CODE)
131     {
132       if (x->h.code & STD_CODE)
133         return y->h.distance - x->h.distance;
134       return 1;
135     }
136   if (x->h.code & STD_CODE)
137     return -1;
138
139   return y->h.code - x->h.code;
140 }
141
142 /* Compare two candidates, argument by argument.  */
143
144 static int
145 rank_for_ideal (x, y)
146      struct candidate *x, *y;
147 {
148   int i;
149
150   if (x->h_len != y->h_len)
151     abort ();
152
153   for (i = 0; i < x->h_len; i++)
154     {
155       if (y->harshness[i].code - x->harshness[i].code)
156         return y->harshness[i].code - x->harshness[i].code;
157       if ((y->harshness[i].code & STD_CODE)
158           && (y->harshness[i].distance - x->harshness[i].distance))
159         return y->harshness[i].distance - x->harshness[i].distance;
160
161       /* They're both the same code.  Now see if we're dealing with an
162          integral promotion that needs a finer grain of accuracy.  */
163       if (y->harshness[0].code & PROMO_CODE
164           && (y->harshness[i].int_penalty ^ x->harshness[i].int_penalty))
165         return y->harshness[i].int_penalty - x->harshness[i].int_penalty;
166     }
167   return 0;
168 }
169
170 /* TYPE is the type we wish to convert to.  PARM is the parameter
171    we have to work with.  We use a somewhat arbitrary cost function
172    to measure this conversion.  */
173
174 static struct harshness_code
175 convert_harshness (type, parmtype, parm)
176      register tree type, parmtype;
177      tree parm;
178 {
179   struct harshness_code h;
180   register enum tree_code codel;
181   register enum tree_code coder;
182   int lvalue;
183
184   h.code = 0;
185   h.distance = 0;
186   h.int_penalty = 0;
187
188 #ifdef GATHER_STATISTICS
189   n_convert_harshness++;
190 #endif
191
192   if (TREE_CODE (parmtype) == REFERENCE_TYPE)
193     {
194       if (parm)
195         parm = convert_from_reference (parm);
196       parmtype = TREE_TYPE (parmtype);
197       lvalue = 1;
198     }
199   else if (parm)
200     lvalue = lvalue_p (parm);
201   else
202     lvalue = 0;
203
204   if (TYPE_PTRMEMFUNC_P (type))
205     type = TYPE_PTRMEMFUNC_FN_TYPE (type);
206   if (TYPE_PTRMEMFUNC_P (parmtype))
207     parmtype = TYPE_PTRMEMFUNC_FN_TYPE (parmtype);
208
209   codel = TREE_CODE (type);
210   coder = TREE_CODE (parmtype);
211
212   if (TYPE_MAIN_VARIANT (parmtype) == TYPE_MAIN_VARIANT (type))
213     return ZERO_RETURN (h);
214
215   if (coder == ERROR_MARK)
216     return EVIL_RETURN (h);
217
218   if (codel == REFERENCE_TYPE)
219     {
220       tree ttl, ttr;
221       int constp = parm ? TREE_READONLY (parm) : TYPE_READONLY (parmtype);
222       int volatilep = (parm ? TREE_THIS_VOLATILE (parm)
223                        : TYPE_VOLATILE (parmtype));
224       register tree intype = TYPE_MAIN_VARIANT (parmtype);
225       register enum tree_code form = TREE_CODE (intype);
226       int penalty = 0;
227
228       ttl = TREE_TYPE (type);
229
230       /* Only allow const reference binding if we were given a parm to deal
231          with, since it isn't really a conversion.  This is a hack to
232          prevent build_type_conversion from finding this conversion, but
233          still allow overloading to find it.  */
234       if (! lvalue && ! (parm && TYPE_READONLY (ttl)))
235         return EVIL_RETURN (h);
236
237       if ((TYPE_READONLY (ttl) < constp)
238           || (TYPE_VOLATILE (ttl) < volatilep))
239         return EVIL_RETURN (h);
240
241       /* When passing a non-const argument into a const reference, dig it a
242          little, so a non-const reference is preferred over this one.  */
243       penalty = ((TYPE_READONLY (ttl) > constp)
244                  + (TYPE_VOLATILE (ttl) > volatilep));
245
246       ttl = TYPE_MAIN_VARIANT (ttl);
247
248       if (form == OFFSET_TYPE)
249         {
250           intype = TREE_TYPE (intype);
251           form = TREE_CODE (intype);
252         }
253
254       ttr = intype;
255
256       if (TREE_CODE (ttl) == ARRAY_TYPE && TREE_CODE (ttr) == ARRAY_TYPE)
257         {
258           if (comptypes (ttl, ttr, 1))
259             return ZERO_RETURN (h);
260           return EVIL_RETURN (h);
261         }
262
263       h = convert_harshness (ttl, ttr, NULL_TREE);
264       if (penalty && h.code == 0)
265         {
266           h.code = QUAL_CODE;
267           h.int_penalty = penalty;
268         }
269       return h;
270     }
271
272   if (codel == POINTER_TYPE && fntype_p (parmtype))
273     {
274       tree p1, p2;
275       struct harshness_code h1, h2;
276
277       /* Get to the METHOD_TYPE or FUNCTION_TYPE that this might be.  */
278       type = TREE_TYPE (type);
279
280       if (coder == POINTER_TYPE)
281         {
282           parmtype = TREE_TYPE (parmtype);
283           coder = TREE_CODE (parmtype);
284         }
285
286       if (coder != TREE_CODE (type))
287         return EVIL_RETURN (h);
288
289       if (type != parmtype && coder == METHOD_TYPE)
290         {
291           tree ttl = TYPE_METHOD_BASETYPE (type);
292           tree ttr = TYPE_METHOD_BASETYPE (parmtype);
293
294           int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
295           if (b_or_d < 0)
296             {
297               b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
298               if (b_or_d < 0)
299                 return EVIL_RETURN (h);
300               h.distance = -b_or_d;
301             }
302           else
303             h.distance = b_or_d;
304           h.code = STD_CODE;
305
306           type = build_function_type
307             (TREE_TYPE (type), TREE_CHAIN (TYPE_ARG_TYPES (type)));
308           parmtype = build_function_type
309             (TREE_TYPE (parmtype), TREE_CHAIN (TYPE_ARG_TYPES (parmtype)));
310         }
311
312       /* We allow the default conversion between function type
313          and pointer-to-function type for free.  */
314       if (comptypes (type, parmtype, 1))
315         return h;
316
317       if (pedantic)
318         return EVIL_RETURN (h);
319
320       /* Compare return types.  */
321       p1 = TREE_TYPE (type);
322       p2 = TREE_TYPE (parmtype);
323       h2 = convert_harshness (p1, p2, NULL_TREE);
324       if (h2.code & EVIL_CODE)
325         return h2;
326
327       h1.code = TRIVIAL_CODE;
328       h1.distance = 0;
329
330       if (h2.distance != 0)
331         {
332           tree binfo;
333
334           /* This only works for pointers.  */
335           if (TREE_CODE (p1) != POINTER_TYPE
336               && TREE_CODE (p1) != REFERENCE_TYPE)
337             return EVIL_RETURN (h);
338
339           p1 = TREE_TYPE (p1);
340           p2 = TREE_TYPE (p2);
341           /* Don't die if we happen to be dealing with void*.  */
342           if (!IS_AGGR_TYPE (p1) || !IS_AGGR_TYPE (p2))
343             return EVIL_RETURN (h);
344           if (h2.distance < 0)
345             binfo = get_binfo (p2, p1, 0);
346           else
347             binfo = get_binfo (p1, p2, 0);
348
349           if (! BINFO_OFFSET_ZEROP (binfo))
350             {
351 #if 0
352               static int explained = 0;
353               if (h2.distance < 0)
354                 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p2, p1);
355               else
356                 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p1, p2);
357
358               if (! explained++)
359                 sorry ("(because pointer values change during conversion)");
360 #endif
361               return EVIL_RETURN (h);
362             }
363         }
364
365       h1.code |= h2.code;
366       if (h2.distance > h1.distance)
367         h1.distance = h2.distance;
368
369       p1 = TYPE_ARG_TYPES (type);
370       p2 = TYPE_ARG_TYPES (parmtype);
371       while (p1 && TREE_VALUE (p1) != void_type_node
372              && p2 && TREE_VALUE (p2) != void_type_node)
373         {
374           h2 = convert_harshness (TREE_VALUE (p1), TREE_VALUE (p2),
375                                        NULL_TREE);
376           if (h2.code & EVIL_CODE)
377             return h2;
378
379           if (h2.distance)
380             {
381               /* This only works for pointers and references.  */
382               if (TREE_CODE (TREE_VALUE (p1)) != POINTER_TYPE
383                   && TREE_CODE (TREE_VALUE (p1)) != REFERENCE_TYPE)
384                 return EVIL_RETURN (h);
385               h2.distance = - h2.distance;
386             }
387
388           h1.code |= h2.code;
389           if (h2.distance > h1.distance)
390             h1.distance = h2.distance;
391           p1 = TREE_CHAIN (p1);
392           p2 = TREE_CHAIN (p2);
393         }
394       if (p1 == p2)
395         return h1;
396       if (p2)
397         {
398           if (p1)
399             return EVIL_RETURN (h);
400           h1.code |= ELLIPSIS_CODE;
401           return h1;
402         }
403       if (p1)
404         {
405           if (TREE_PURPOSE (p1) == NULL_TREE)
406             h1.code |= EVIL_CODE;
407           return h1;
408         }
409     }
410   else if (codel == POINTER_TYPE && coder == OFFSET_TYPE)
411     {
412       tree ttl, ttr;
413
414       /* Get to the OFFSET_TYPE that this might be.  */
415       type = TREE_TYPE (type);
416
417       if (coder != TREE_CODE (type))
418         return EVIL_RETURN (h);
419
420       ttl = TYPE_OFFSET_BASETYPE (type);
421       ttr = TYPE_OFFSET_BASETYPE (parmtype);
422
423       if (ttl == ttr)
424         h.code = 0;
425       else
426         {
427           int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
428           if (b_or_d < 0)
429             {
430               b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
431               if (b_or_d < 0)
432                 return EVIL_RETURN (h);
433               h.distance = -b_or_d;
434             }
435           else
436             h.distance = b_or_d;
437           h.code = STD_CODE;
438         }
439
440       /* Now test the OFFSET_TYPE's target compatibility.  */
441       type = TREE_TYPE (type);
442       parmtype = TREE_TYPE (parmtype);
443     }
444
445   if (coder == UNKNOWN_TYPE)
446     {
447       if (codel == FUNCTION_TYPE
448           || codel == METHOD_TYPE
449           || (codel == POINTER_TYPE
450               && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
451                   || TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)))
452         return TRIVIAL_RETURN (h);
453       return EVIL_RETURN (h);
454     }
455
456   if (coder == VOID_TYPE)
457     return EVIL_RETURN (h);
458
459   if (codel == BOOLEAN_TYPE)
460     {
461       if (INTEGRAL_CODE_P (coder) || coder == REAL_TYPE)
462         return STD_RETURN (h);
463       else if (coder == POINTER_TYPE || coder == OFFSET_TYPE)
464         {
465           /* Make this worse than any conversion to another pointer.
466              FIXME this is how I think the language should work, but it may not
467              end up being how the language is standardized (jason 1/30/95).  */
468           h.distance = 32767;
469           return STD_RETURN (h);
470         }
471       return EVIL_RETURN (h);
472     }
473
474   if (INTEGRAL_CODE_P (codel))
475     {
476       /* Control equivalence of ints an enums.  */
477
478       if (codel == ENUMERAL_TYPE
479           && flag_int_enum_equivalence == 0)
480         {
481           /* Enums can be converted to ints, but not vice-versa.  */
482           if (coder != ENUMERAL_TYPE
483               || TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (parmtype))
484             return EVIL_RETURN (h);
485         }
486
487       /* else enums and ints (almost) freely interconvert.  */
488
489       if (INTEGRAL_CODE_P (coder))
490         {
491           if (TYPE_MAIN_VARIANT (type)
492               == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
493             {
494               h.code = PROMO_CODE;
495             }
496           else
497             h.code = STD_CODE;
498             
499           return h;
500         }
501       else if (coder == REAL_TYPE)
502         {
503           h.code = STD_CODE;
504           h.distance = 0;
505           return h;
506         }
507     }
508
509   if (codel == REAL_TYPE)
510     {
511       if (coder == REAL_TYPE)
512         {
513           if (TYPE_MAIN_VARIANT (type)
514               == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
515             h.code = PROMO_CODE;
516           else
517             h.code = STD_CODE;
518             
519           return h;
520         }
521       else if (INTEGRAL_CODE_P (coder))
522         {
523           h.code = STD_CODE;
524           h.distance = 0;
525           return h;
526         }
527     }
528
529   /* Convert arrays which have not previously been converted.  */
530   if (coder == ARRAY_TYPE)
531     {
532       coder = POINTER_TYPE;
533       if (parm)
534         {
535           parm = decay_conversion (parm);
536           parmtype = TREE_TYPE (parm);
537         }
538       else
539         parmtype = build_pointer_type (TREE_TYPE (parmtype));
540     }
541
542   /* Conversions among pointers */
543   if (codel == POINTER_TYPE && coder == POINTER_TYPE)
544     {
545       register tree ttl = TYPE_MAIN_VARIANT (TREE_TYPE (type));
546       register tree ttr = TYPE_MAIN_VARIANT (TREE_TYPE (parmtype));
547       int penalty = 4 * (ttl != ttr);
548
549       /* Anything converts to void *.  Since this may be `const void *'
550          (etc.) use VOID_TYPE instead of void_type_node.  Otherwise, the
551          targets must be the same, except that we do allow (at some cost)
552          conversion between signed and unsigned pointer types.  */
553
554       if ((TREE_CODE (ttl) == METHOD_TYPE
555            || TREE_CODE (ttl) == FUNCTION_TYPE)
556           && TREE_CODE (ttl) == TREE_CODE (ttr))
557         {
558           if (comptypes (ttl, ttr, -1))
559             {
560               h.code = penalty ? STD_CODE : 0;
561               h.distance =  0;
562             }
563           else
564             h.code = EVIL_CODE;
565           return h;
566         }
567
568 #if 1
569       if (TREE_CODE (ttl) != VOID_TYPE
570           && (TREE_CODE (ttr) != VOID_TYPE || !parm || !null_ptr_cst_p (parm)))
571         {
572           if (comp_target_types (type, parmtype, 1) <= 0)
573             return EVIL_RETURN (h);
574         }
575 #else
576       if (!(TREE_CODE (ttl) == VOID_TYPE
577             || TREE_CODE (ttr) == VOID_TYPE
578             || (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (ttr)
579                 && (ttl = unsigned_type (ttl),
580                     ttr = unsigned_type (ttr),
581                     penalty = 10, 0))
582             || (comp_target_types (ttl, ttr, 0) > 0)))
583         return EVIL_RETURN (h);
584 #endif
585
586       if (ttr == ttl)
587         {
588           tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
589
590           h.code = 0;
591           /* Note conversion from `T*' to `const T*',
592                                or `T*' to `volatile T*'.  */
593           if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
594               || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
595             h.code = EVIL_CODE;
596           else if ((TYPE_READONLY (tmp1) != TREE_READONLY (tmp2))
597                    || (TYPE_VOLATILE (tmp1) != TYPE_VOLATILE (tmp2)))
598             h.code |= QUAL_CODE;
599
600           h.distance = 0;
601           return h;
602         }
603
604
605       if (TREE_CODE (ttl) == RECORD_TYPE && TREE_CODE (ttr) == RECORD_TYPE)
606         {
607           int b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
608           if (b_or_d < 0)
609             {
610               b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
611               if (b_or_d < 0)
612                 return EVIL_RETURN (h);
613               h.distance = -b_or_d;
614             }
615           else
616             h.distance = b_or_d;
617           h.code = STD_CODE;
618           return h;
619         }
620
621       /* If converting from a `class*' to a `void*', make it
622          less favorable than any inheritance relationship.  */
623       if (TREE_CODE (ttl) == VOID_TYPE && IS_AGGR_TYPE (ttr))
624         {
625           h.code = STD_CODE;
626           h.distance = CLASSTYPE_MAX_DEPTH (ttr)+1;
627           return h;
628         }
629
630       h.code = penalty ? STD_CODE : PROMO_CODE;
631       /* Catch things like `const char *' -> `const void *'
632          vs `const char *' -> `void *'.  */
633       if (ttl != ttr)
634         {
635           tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
636           if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
637               || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
638             h.code = EVIL_CODE;
639           else if ((TYPE_READONLY (tmp1) > TREE_READONLY (tmp2))
640                    || (TYPE_VOLATILE (tmp1) > TYPE_VOLATILE (tmp2)))
641             h.code |= QUAL_CODE;
642         }
643       return h;
644     }
645
646   if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
647     {
648       /* This is not a bad match, but don't let it beat
649          integer-enum combinations.  */
650       if (parm && integer_zerop (parm))
651         {
652           h.code = STD_CODE;
653           h.distance = 0;
654           return h;
655         }
656     }
657
658   /* C++: Since the `this' parameter of a signature member function
659      is represented as a signature pointer to handle default implementations
660      correctly, we can have the case that `type' is a signature pointer
661      while `parmtype' is a pointer to a signature table.  We don't really
662      do any conversions in this case, so just return 0.  */
663
664   if (codel == RECORD_TYPE && coder == POINTER_TYPE
665       && IS_SIGNATURE_POINTER (type) && IS_SIGNATURE (TREE_TYPE (parmtype)))
666     return ZERO_RETURN (h);
667
668   if (codel == RECORD_TYPE && coder == RECORD_TYPE)
669     {
670       int b_or_d = get_base_distance (type, parmtype, 0, (tree*)0);
671       if (b_or_d < 0)
672         {
673           b_or_d = get_base_distance (parmtype, type, 0, (tree*)0);
674           if (b_or_d < 0)
675             return EVIL_RETURN (h);
676           h.distance = -b_or_d;
677         }
678       else
679         h.distance = b_or_d;
680       h.code = STD_CODE;
681       return h;
682     }
683   return EVIL_RETURN (h);
684 }
685
686 /* A clone of build_type_conversion for checking user-defined conversions in
687    overload resolution.  */
688
689 static int
690 user_harshness (type, parmtype)
691      register tree type, parmtype;
692 {
693   tree conv;
694   tree winner = NULL_TREE;
695   int code;
696
697   {
698     tree typename = build_typename_overload (type);
699     if (lookup_fnfields (TYPE_BINFO (parmtype), typename, 0))
700       return 0;
701   }
702                         
703   for (conv = lookup_conversions (parmtype); conv; conv = TREE_CHAIN (conv))
704     {
705       struct harshness_code tmp;
706       tree cand = TREE_VALUE (conv);
707
708       if (winner && winner == cand)
709         continue;
710
711       tmp = convert_harshness (type, TREE_TYPE (TREE_TYPE (cand)), NULL_TREE);
712       if ((tmp.code < USER_CODE) && (tmp.distance >= 0))
713         {
714           if (winner)
715             return EVIL_CODE;
716           else
717             {
718               winner = cand;
719               code = tmp.code;
720             }
721         }
722     }
723
724   if (winner)
725     return code;
726
727   return -1;
728 }
729
730 #ifdef DEBUG_MATCHING
731 static char *
732 print_harshness (h)
733      struct harshness_code *h;
734 {
735   static char buf[1024];
736   char tmp[1024];
737
738   bzero (buf, 1024 * sizeof (char));
739   strcat (buf, "codes=[");
740   if (h->code & EVIL_CODE)
741     strcat (buf, "EVIL");
742   if (h->code & CONST_CODE)
743     strcat (buf, " CONST");
744   if (h->code & ELLIPSIS_CODE)
745     strcat (buf, " ELLIPSIS");
746   if (h->code & USER_CODE)
747     strcat (buf, " USER");
748   if (h->code & STD_CODE)
749     strcat (buf, " STD");
750   if (h->code & PROMO_CODE)
751     strcat (buf, " PROMO");
752   if (h->code & QUAL_CODE)
753     strcat (buf, " QUAL");
754   if (h->code & TRIVIAL_CODE)
755     strcat (buf, " TRIVIAL");
756   if (buf[0] == '\0')
757     strcat (buf, "0");
758
759   sprintf (tmp, "] distance=%d int_penalty=%d", h->distance, h->int_penalty);
760
761   strcat (buf, tmp);
762
763   return buf;
764 }
765 #endif
766
767 /* Algorithm: For each argument, calculate how difficult it is to
768    make FUNCTION accept that argument.  If we can easily tell that
769    FUNCTION won't be acceptable to one of the arguments, then we
770    don't need to compute the ease of converting the other arguments,
771    since it will never show up in the intersection of all arguments'
772    favorite functions.
773
774    Conversions between builtin and user-defined types are allowed, but
775    no function involving such a conversion is preferred to one which
776    does not require such a conversion.  Furthermore, such conversions
777    must be unique.  */
778
779 void
780 compute_conversion_costs (function, tta_in, cp, arglen)
781      tree function;
782      tree tta_in;
783      struct candidate *cp;
784      int arglen;
785 {
786   tree ttf_in = TYPE_ARG_TYPES (TREE_TYPE (function));
787   tree ttf = ttf_in;
788   tree tta = tta_in;
789
790   /* Start out with no strikes against.  */
791   int evil_strikes = 0;
792   int ellipsis_strikes = 0;
793   int user_strikes = 0;
794   int b_or_d_strikes = 0;
795   int easy_strikes = 0;
796
797   int strike_index = 0, win;
798   struct harshness_code lose;
799   extern int cp_silent;
800
801 #ifdef GATHER_STATISTICS
802   n_compute_conversion_costs++;
803 #endif
804
805 #ifndef DEBUG_MATCHING
806   /* We don't emit any warnings or errors while trying out each candidate.  */
807   cp_silent = 1;
808 #endif
809
810   cp->function = function;
811   cp->arg = tta ? TREE_VALUE (tta) : NULL_TREE;
812   cp->u.bad_arg = 0;            /* optimistic!  */
813
814   cp->h.code = 0;
815   cp->h.distance = 0;
816   cp->h.int_penalty = 0;
817   bzero ((char *) cp->harshness,
818          (cp->h_len + 1) * sizeof (struct harshness_code));
819
820   while (ttf && tta)
821     {
822       struct harshness_code h;
823
824       if (ttf == void_list_node)
825         break;
826
827       if (type_unknown_p (TREE_VALUE (tta)))
828         {         
829           /* Must perform some instantiation here.  */
830           tree rhs = TREE_VALUE (tta);
831           tree lhstype = TREE_VALUE (ttf);
832
833           /* Keep quiet about possible contravariance violations.  */
834           int old_inhibit_warnings = inhibit_warnings;
835           inhibit_warnings = 1;
836
837           /* @@ This is to undo what `grokdeclarator' does to
838              parameter types.  It really should go through
839              something more general.  */
840
841           TREE_TYPE (tta) = unknown_type_node;
842           rhs = instantiate_type (lhstype, rhs, 0);
843           inhibit_warnings = old_inhibit_warnings;
844
845           if (TREE_CODE (rhs) == ERROR_MARK)
846             h.code = EVIL_CODE;
847           else
848             h = convert_harshness (lhstype, TREE_TYPE (rhs), rhs);
849         }
850       else
851         {
852 #ifdef DEBUG_MATCHING
853           static tree old_function = NULL_TREE;
854
855           if (!old_function || function != old_function)
856             {
857               cp_error ("trying %D", function);
858               old_function = function;
859             }
860
861           cp_error ("      doing (%T) %E against arg %T",
862                     TREE_TYPE (TREE_VALUE (tta)), TREE_VALUE (tta),
863                     TREE_VALUE (ttf));
864 #endif
865
866           h = convert_harshness (TREE_VALUE (ttf),
867                                  TREE_TYPE (TREE_VALUE (tta)),
868                                  TREE_VALUE (tta));
869
870 #ifdef DEBUG_MATCHING
871           cp_error ("     evaluated %s", print_harshness (&h));
872 #endif
873         }
874
875       cp->harshness[strike_index] = h;
876       if ((h.code & EVIL_CODE)
877           || ((h.code & STD_CODE) && h.distance < 0))
878         {
879           cp->u.bad_arg = strike_index;
880           evil_strikes = 1;
881         }
882      else if (h.code & ELLIPSIS_CODE)
883        ellipsis_strikes += 1;
884 #if 0
885       /* This is never set by `convert_harshness'.  */
886       else if (h.code & USER_CODE)
887         {
888           user_strikes += 1;
889         }
890 #endif
891       else
892         {
893           if ((h.code & STD_CODE) && h.distance)
894             {
895               if (h.distance > b_or_d_strikes)
896                 b_or_d_strikes = h.distance;
897             }
898           else
899             easy_strikes += (h.code & (STD_CODE|PROMO_CODE|TRIVIAL_CODE));
900           cp->h.code |= h.code;
901           /* Make sure we communicate this.  */
902           cp->h.int_penalty += h.int_penalty;
903         }
904
905       ttf = TREE_CHAIN (ttf);
906       tta = TREE_CHAIN (tta);
907       strike_index += 1;
908     }
909
910   if (tta)
911     {
912       /* ran out of formals, and parmlist is fixed size.  */
913       if (ttf /* == void_type_node */)
914         {
915           cp->h.code = EVIL_CODE;
916           cp->u.bad_arg = -1;
917           cp_silent = 0;
918           return;
919         }
920       else
921         {
922           struct harshness_code h;
923           int l = list_length (tta);
924           ellipsis_strikes += l;
925           h.code = ELLIPSIS_CODE;
926           h.distance = 0;
927           h.int_penalty = 0;
928           for (; l; --l)
929             cp->harshness[strike_index++] = h;
930         }
931     }
932   else if (ttf && ttf != void_list_node)
933     {
934       /* ran out of actuals, and no defaults.  */
935       if (TREE_PURPOSE (ttf) == NULL_TREE)
936         {
937           cp->h.code = EVIL_CODE;
938           cp->u.bad_arg = -2;
939           cp_silent = 0;
940           return;
941         }
942       /* Store index of first default.  */
943       cp->harshness[arglen].distance = strike_index+1;
944     }
945   else
946     cp->harshness[arglen].distance = 0;
947
948   /* Argument list lengths work out, so don't need to check them again.  */
949   if (evil_strikes)
950     {
951       /* We do not check for derived->base conversions here, since in
952          no case would they give evil strike counts, unless such conversions
953          are somehow ambiguous.  */
954
955       /* See if any user-defined conversions apply.
956          But make sure that we do not loop.  */
957       static int dont_convert_types = 0;
958
959       if (dont_convert_types)
960         {
961           cp->h.code = EVIL_CODE;
962           cp_silent = 0;
963           return;
964         }
965
966       win = 0;                  /* Only get one chance to win.  */
967       ttf = TYPE_ARG_TYPES (TREE_TYPE (function));
968       tta = tta_in;
969       strike_index = 0;
970       evil_strikes = 0;
971
972       while (ttf && tta)
973         {
974           if (ttf == void_list_node)
975             break;
976
977           lose = cp->harshness[strike_index];
978           if ((lose.code & EVIL_CODE)
979               || ((lose.code & STD_CODE) && lose.distance < 0))
980             {
981               tree actual_type = TREE_TYPE (TREE_VALUE (tta));
982               tree formal_type = TREE_VALUE (ttf);
983               int extra_conversions = 0;
984
985               dont_convert_types = 1;
986
987               if (TREE_CODE (formal_type) == REFERENCE_TYPE)
988                 formal_type = TREE_TYPE (formal_type);
989               if (TREE_CODE (actual_type) == REFERENCE_TYPE)
990                 actual_type = TREE_TYPE (actual_type);
991
992               if (formal_type != error_mark_node
993                   && actual_type != error_mark_node)
994                 {
995                   formal_type = complete_type (TYPE_MAIN_VARIANT (formal_type));
996                   actual_type = complete_type (TYPE_MAIN_VARIANT (actual_type));
997
998                   if (TYPE_HAS_CONSTRUCTOR (formal_type))
999                     {
1000                       /* If it has a constructor for this type,
1001                          try to use it.  */
1002                       /* @@ There is no way to save this result yet, so
1003                          success is a NULL_TREE for now.  */
1004                       if (convert_to_aggr (formal_type, TREE_VALUE (tta), 0, 1)
1005                           != error_mark_node)
1006                         win++;
1007                     }
1008                   if (TYPE_LANG_SPECIFIC (actual_type)
1009                       && TYPE_HAS_CONVERSION (actual_type))
1010                     {
1011                       int extra = user_harshness (formal_type, actual_type);
1012
1013                       if (extra == EVIL_CODE)
1014                         win += 2;
1015                       else if (extra >= 0)
1016                         {
1017                           win++;
1018                           extra_conversions = extra;
1019                         }
1020                     }
1021                 }
1022               dont_convert_types = 0;
1023
1024               if (win == 1)
1025                 {
1026                   user_strikes += 1;
1027                   cp->harshness[strike_index].code
1028                     = USER_CODE | (extra_conversions ? STD_CODE : 0);
1029                   win = 0;
1030                 }
1031               else
1032                 {
1033                   if (cp->u.bad_arg > strike_index)
1034                     cp->u.bad_arg = strike_index;
1035
1036                   evil_strikes = win ? 2 : 1;
1037                   break;
1038                 }
1039             }
1040
1041           ttf = TREE_CHAIN (ttf);
1042           tta = TREE_CHAIN (tta);
1043           strike_index += 1;
1044         }
1045     }
1046
1047   /* Const member functions get a small penalty because defaulting
1048      to const is less useful than defaulting to non-const.  */
1049   /* This is bogus, it does not correspond to anything in the ARM.
1050      This code will be fixed when this entire section is rewritten
1051      to conform to the ARM.  (mrs)  */
1052   if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
1053     {
1054       tree this_parm = TREE_VALUE (ttf_in);
1055
1056       if (TREE_CODE (this_parm) == RECORD_TYPE  /* Is `this' a sig ptr?  */
1057             ? TYPE_READONLY (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (this_parm))))
1058             : TYPE_READONLY (TREE_TYPE (this_parm)))
1059         {
1060           cp->harshness[0].code |= TRIVIAL_CODE;
1061           ++easy_strikes;
1062         }
1063       else
1064         {
1065           /* Calling a non-const member function from a const member function
1066              is probably invalid, but for now we let it only draw a warning.
1067              We indicate that such a mismatch has occurred by setting the
1068              harshness to a maximum value.  */
1069           if (TREE_CODE (TREE_TYPE (TREE_VALUE (tta_in))) == POINTER_TYPE
1070               && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (TREE_VALUE (tta_in))))))
1071             cp->harshness[0].code |= CONST_CODE;
1072         }
1073     }
1074
1075   if (evil_strikes)
1076     cp->h.code = EVIL_CODE;
1077   if (ellipsis_strikes)
1078     cp->h.code |= ELLIPSIS_CODE;
1079   if (user_strikes)
1080     cp->h.code |= USER_CODE;
1081   cp_silent = 0;
1082 #ifdef DEBUG_MATCHING
1083   cp_error ("final eval %s", print_harshness (&cp->h));
1084 #endif
1085 }
1086
1087 /* Subroutine of ideal_candidate.  See if X or Y is a better match
1088    than the other.  */
1089
1090 static int
1091 strictly_better (x, y)
1092      unsigned int x, y;
1093 {
1094   unsigned short xor;
1095
1096   if (x == y)
1097     return 0;
1098
1099   xor = x ^ y;
1100   if (xor >= x || xor >= y)
1101     return 1;
1102   return 0;
1103 }
1104
1105 /* When one of several possible overloaded functions and/or methods
1106    can be called, choose the best candidate for overloading.
1107
1108    BASETYPE is the context from which we start method resolution
1109    or NULL if we are comparing overloaded functions.
1110    CANDIDATES is the array of candidates we have to choose from.
1111    N_CANDIDATES is the length of CANDIDATES.
1112    PARMS is a TREE_LIST of parameters to the function we'll ultimately
1113    choose.  It is modified in place when resolving methods.  It is not
1114    modified in place when resolving overloaded functions.
1115    LEN is the length of the parameter list.  */
1116
1117 static struct candidate *
1118 ideal_candidate (candidates, n_candidates, len)
1119      struct candidate *candidates;
1120      int n_candidates;
1121      int len;
1122 {
1123   struct candidate *cp = candidates+n_candidates;
1124   int i, j = -1, best_code;
1125
1126   /* For each argument, sort the functions from best to worst for the arg.
1127      For each function that's not best for this arg, set its overall
1128      harshness to EVIL so that other args won't like it.  The candidate
1129      list for the last argument is the intersection of all the best-liked
1130      functions.  */
1131
1132   qsort (candidates, n_candidates, sizeof (struct candidate),
1133          (int (*) PROTO((const void *, const void *))) rank_for_overload);
1134   best_code = cp[-1].h.code;
1135
1136   /* If they're at least as good as each other, do an arg-by-arg check.  */
1137   if (! strictly_better (cp[-1].h.code, cp[-2].h.code))
1138     {
1139       int better = 0;
1140       int worse = 0;
1141
1142       for (j = 0; j < n_candidates; j++)
1143         if (! strictly_better (candidates[j].h.code, best_code))
1144           break;
1145
1146       qsort (candidates+j, n_candidates-j, sizeof (struct candidate),
1147              (int (*) PROTO((const void *, const void *))) rank_for_ideal);
1148       for (i = 0; i < len; i++)
1149         {
1150           if (cp[-1].harshness[i].code < cp[-2].harshness[i].code)
1151             better = 1;
1152           else if (cp[-1].harshness[i].code > cp[-2].harshness[i].code)
1153             worse = 1;
1154           else if (cp[-1].harshness[i].code & STD_CODE)
1155             {
1156               /* If it involves a standard conversion, let the
1157                  inheritance lattice be the final arbiter.  */
1158               if (cp[-1].harshness[i].distance > cp[-2].harshness[i].distance)
1159                 worse = 1;
1160               else if (cp[-1].harshness[i].distance < cp[-2].harshness[i].distance)
1161                 better = 1;
1162             }
1163           else if (cp[-1].harshness[i].code & PROMO_CODE)
1164             {
1165               /* For integral promotions, take into account a finer
1166                  granularity for determining which types should be favored
1167                  over others in such promotions.  */
1168               if (cp[-1].harshness[i].int_penalty > cp[-2].harshness[i].int_penalty)
1169                 worse = 1;
1170               else if (cp[-1].harshness[i].int_penalty < cp[-2].harshness[i].int_penalty)
1171                 better = 1;
1172             }
1173         }
1174
1175       if (! better || worse)
1176         return NULL;
1177     }
1178   return cp-1;
1179 }
1180
1181 /* Assume that if the class referred to is not in the
1182    current class hierarchy, that it may be remote.
1183    PARENT is assumed to be of aggregate type here.  */
1184
1185 static int
1186 may_be_remote (parent)
1187      tree parent;
1188 {
1189   if (TYPE_OVERLOADS_METHOD_CALL_EXPR (parent) == 0)
1190     return 0;
1191
1192   if (current_class_type == NULL_TREE)
1193     return 0;
1194
1195   if (parent == current_class_type)
1196     return 0;
1197
1198   if (UNIQUELY_DERIVED_FROM_P (parent, current_class_type))
1199     return 0;
1200   return 1;
1201 }
1202
1203 tree
1204 build_vfield_ref (datum, type)
1205      tree datum, type;
1206 {
1207   tree rval;
1208   int old_assume_nonnull_objects = flag_assume_nonnull_objects;
1209
1210   if (datum == error_mark_node)
1211     return error_mark_node;
1212
1213   /* Vtable references are always made from non-null objects.  */
1214   flag_assume_nonnull_objects = 1;
1215   if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
1216     datum = convert_from_reference (datum);
1217
1218   if (! TYPE_USES_COMPLEX_INHERITANCE (type))
1219     rval = build (COMPONENT_REF, TREE_TYPE (CLASSTYPE_VFIELD (type)),
1220                   datum, CLASSTYPE_VFIELD (type));
1221   else
1222     rval = build_component_ref (datum, DECL_NAME (CLASSTYPE_VFIELD (type)), NULL_TREE, 0);
1223   flag_assume_nonnull_objects = old_assume_nonnull_objects;
1224
1225   return rval;
1226 }
1227
1228 /* Build a call to a member of an object.  I.e., one that overloads
1229    operator ()(), or is a pointer-to-function or pointer-to-method.  */
1230
1231 static tree
1232 build_field_call (basetype_path, instance_ptr, name, parms)
1233      tree basetype_path, instance_ptr, name, parms;
1234 {
1235   tree field, instance;
1236
1237   if (name == ctor_identifier || name == dtor_identifier)
1238     return NULL_TREE;
1239
1240   if (instance_ptr == current_class_ptr)
1241     {
1242       /* Check to see if we really have a reference to an instance variable
1243          with `operator()()' overloaded.  */
1244       field = IDENTIFIER_CLASS_VALUE (name);
1245
1246       if (field == NULL_TREE)
1247         {
1248           cp_error ("`this' has no member named `%D'", name);
1249           return error_mark_node;
1250         }
1251
1252       if (TREE_CODE (field) == FIELD_DECL)
1253         {
1254           /* If it's a field, try overloading operator (),
1255              or calling if the field is a pointer-to-function.  */
1256           instance = build_component_ref_1 (current_class_ref, field, 0);
1257           if (instance == error_mark_node)
1258             return error_mark_node;
1259
1260           if (TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1261               && (TYPE_OVERLOADS_CALL_EXPR (TREE_TYPE (instance))
1262                   || flag_ansi_overloading))
1263             return build_opfncall (CALL_EXPR, LOOKUP_NORMAL, instance, parms, NULL_TREE);
1264
1265           if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1266             {
1267               if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE)
1268                 return build_function_call (instance, parms);
1269               else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE)
1270                 return build_function_call (instance, expr_tree_cons (NULL_TREE, current_class_ptr, parms));
1271             }
1272         }
1273       return NULL_TREE;
1274     }
1275
1276   /* Check to see if this is not really a reference to an instance variable
1277      with `operator()()' overloaded.  */
1278   field = lookup_field (basetype_path, name, 1, 0);
1279
1280   /* This can happen if the reference was ambiguous or for access
1281      violations.  */
1282   if (field == error_mark_node)
1283     return error_mark_node;
1284
1285   if (field)
1286     {
1287       tree basetype;
1288       tree ftype = TREE_TYPE (field);
1289
1290       if (TREE_CODE (ftype) == REFERENCE_TYPE)
1291         ftype = TREE_TYPE (ftype);
1292
1293       if (TYPE_LANG_SPECIFIC (ftype)
1294           && (TYPE_OVERLOADS_CALL_EXPR (ftype) || flag_ansi_overloading))
1295         {
1296           /* Make the next search for this field very short.  */
1297           basetype = DECL_FIELD_CONTEXT (field);
1298           instance_ptr = convert_pointer_to (basetype, instance_ptr);
1299
1300           instance = build_indirect_ref (instance_ptr, NULL_PTR);
1301           return build_opfncall (CALL_EXPR, LOOKUP_NORMAL,
1302                                  build_component_ref_1 (instance, field, 0),
1303                                  parms, NULL_TREE);
1304         }
1305       if (TREE_CODE (ftype) == POINTER_TYPE)
1306         {
1307           if (TREE_CODE (TREE_TYPE (ftype)) == FUNCTION_TYPE
1308               || TREE_CODE (TREE_TYPE (ftype)) == METHOD_TYPE)
1309             {
1310               /* This is a member which is a pointer to function.  */
1311               tree ref
1312                 = build_component_ref_1 (build_indirect_ref (instance_ptr,
1313                                                              NULL_PTR),
1314                                          field, LOOKUP_COMPLAIN);
1315               if (ref == error_mark_node)
1316                 return error_mark_node;
1317               return build_function_call (ref, parms);
1318             }
1319         }
1320       else if (TREE_CODE (ftype) == METHOD_TYPE)
1321         {
1322           error ("invalid call via pointer-to-member function");
1323           return error_mark_node;
1324         }
1325       else
1326         return NULL_TREE;
1327     }
1328   return NULL_TREE;
1329 }
1330
1331 static tree
1332 find_scoped_type (type, inner_name, inner_types)
1333      tree type, inner_name, inner_types;
1334 {
1335   tree tags = CLASSTYPE_TAGS (type);
1336
1337   while (tags)
1338     {
1339       /* The TREE_PURPOSE of an enum tag (which becomes a member of the
1340          enclosing class) is set to the name for the enum type.  So, if
1341          inner_name is `bar', and we strike `baz' for `enum bar { baz }',
1342          then this test will be true.  */
1343       if (TREE_PURPOSE (tags) == inner_name)
1344         {
1345           if (inner_types == NULL_TREE)
1346             return TYPE_MAIN_DECL (TREE_VALUE (tags));
1347           return resolve_scope_to_name (TREE_VALUE (tags), inner_types);
1348         }
1349       tags = TREE_CHAIN (tags);
1350     }
1351
1352   /* Look for a TYPE_DECL.  */
1353   for (tags = TYPE_FIELDS (type); tags; tags = TREE_CHAIN (tags))
1354     if (TREE_CODE (tags) == TYPE_DECL && DECL_NAME (tags) == inner_name)
1355       {
1356         /* Code by raeburn.  */
1357         if (inner_types == NULL_TREE)
1358           return tags;
1359         return resolve_scope_to_name (TREE_TYPE (tags), inner_types);
1360       }
1361
1362   return NULL_TREE;
1363 }
1364
1365 /* Resolve an expression NAME1::NAME2::...::NAMEn to
1366    the name that names the above nested type.  INNER_TYPES
1367    is a chain of nested type names (held together by SCOPE_REFs);
1368    OUTER_TYPE is the type we know to enclose INNER_TYPES.
1369    Returns NULL_TREE if there is an error.  */
1370
1371 tree
1372 resolve_scope_to_name (outer_type, inner_stuff)
1373      tree outer_type, inner_stuff;
1374 {
1375   register tree tmp;
1376   tree inner_name, inner_type;
1377
1378   if (outer_type == NULL_TREE && current_class_type != NULL_TREE)
1379     {
1380       /* We first try to look for a nesting in our current class context,
1381          then try any enclosing classes.  */
1382       tree type = current_class_type;
1383       
1384       while (type && (TREE_CODE (type) == RECORD_TYPE
1385                       || TREE_CODE (type) == UNION_TYPE))
1386         {
1387           tree rval = resolve_scope_to_name (type, inner_stuff);
1388
1389           if (rval != NULL_TREE)
1390             return rval;
1391           type = DECL_CONTEXT (TYPE_MAIN_DECL (type));
1392         }
1393     }
1394
1395   if (TREE_CODE (inner_stuff) == SCOPE_REF)
1396     {
1397       inner_name = TREE_OPERAND (inner_stuff, 0);
1398       inner_type = TREE_OPERAND (inner_stuff, 1);
1399     }
1400   else
1401     {
1402       inner_name = inner_stuff;
1403       inner_type = NULL_TREE;
1404     }
1405
1406   if (outer_type == NULL_TREE)
1407     {
1408       tree x;
1409       /* If we have something that's already a type by itself,
1410          use that.  */
1411       if (IDENTIFIER_HAS_TYPE_VALUE (inner_name))
1412         {
1413           if (inner_type)
1414             return resolve_scope_to_name (IDENTIFIER_TYPE_VALUE (inner_name),
1415                                           inner_type);
1416           return inner_name;
1417         }
1418       
1419       x = lookup_name (inner_name, 0);
1420
1421       if (x && TREE_CODE (x) == NAMESPACE_DECL)
1422         {
1423           x = lookup_namespace_name (x, inner_type);
1424           return x;
1425         }
1426       return NULL_TREE;
1427     }
1428
1429   if (! IS_AGGR_TYPE (outer_type))
1430     return NULL_TREE;
1431
1432   /* Look for member classes or enums.  */
1433   tmp = find_scoped_type (outer_type, inner_name, inner_type);
1434
1435   /* If it's not a type in this class, then go down into the
1436      base classes and search there.  */
1437   if (! tmp && TYPE_BINFO (outer_type))
1438     {
1439       tree binfos = TYPE_BINFO_BASETYPES (outer_type);
1440       int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
1441
1442       for (i = 0; i < n_baselinks; i++)
1443         {
1444           tree base_binfo = TREE_VEC_ELT (binfos, i);
1445           tmp = resolve_scope_to_name (BINFO_TYPE (base_binfo), inner_stuff);
1446           if (tmp)
1447             return tmp;
1448         }
1449       tmp = NULL_TREE;
1450     }
1451
1452   return tmp;
1453 }
1454
1455 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
1456    This is how virtual function calls are avoided.  */
1457
1458 tree
1459 build_scoped_method_call (exp, basetype, name, parms)
1460      tree exp, basetype, name, parms;
1461 {
1462   /* Because this syntactic form does not allow
1463      a pointer to a base class to be `stolen',
1464      we need not protect the derived->base conversion
1465      that happens here.
1466      
1467      @@ But we do have to check access privileges later.  */
1468   tree binfo, decl;
1469   tree type = TREE_TYPE (exp);
1470
1471   if (type == error_mark_node
1472       || basetype == error_mark_node)
1473     return error_mark_node;
1474
1475   if (processing_template_decl)
1476     {
1477       if (TREE_CODE (name) == BIT_NOT_EXPR)
1478         {
1479           tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1480           name = build_min_nt (BIT_NOT_EXPR, type);
1481         }
1482       name = build_min_nt (SCOPE_REF, basetype, name);
1483       return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
1484     }
1485
1486   if (TREE_CODE (type) == REFERENCE_TYPE)
1487     type = TREE_TYPE (type);
1488
1489   if (TREE_CODE (basetype) == TREE_VEC)
1490     {
1491       binfo = basetype;
1492       basetype = BINFO_TYPE (binfo);
1493     }
1494   else
1495     binfo = NULL_TREE;
1496
1497   /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
1498      that explicit ~int is caught in the parser; this deals with typedefs
1499      and template parms.  */
1500   if (TREE_CODE (name) == BIT_NOT_EXPR && ! IS_AGGR_TYPE (basetype))
1501     {
1502       if (type != basetype)
1503         cp_error ("type of `%E' does not match destructor type `%T' (type was `%T')",
1504                   exp, basetype, type);
1505       name = TREE_OPERAND (name, 0);
1506       if (basetype != name && basetype != get_type_value (name))
1507         cp_error ("qualified type `%T' does not match destructor name `~%T'",
1508                   basetype, name);
1509       return cp_convert (void_type_node, exp);
1510     }
1511
1512   if (! is_aggr_type (basetype, 1))
1513     return error_mark_node;
1514
1515   if (! IS_AGGR_TYPE (type))
1516     {
1517       cp_error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
1518                 exp, type);
1519       return error_mark_node;
1520     }
1521
1522   if (! binfo)
1523     {
1524       binfo = get_binfo (basetype, type, 1);
1525       if (binfo == error_mark_node)
1526         return error_mark_node;
1527       if (! binfo)
1528         error_not_base_type (basetype, type);
1529     }
1530
1531   if (binfo)
1532     {
1533       if (TREE_CODE (exp) == INDIRECT_REF)
1534         decl = build_indirect_ref
1535           (convert_pointer_to_real
1536            (binfo, build_unary_op (ADDR_EXPR, exp, 0)), NULL_PTR);
1537       else
1538         decl = build_scoped_ref (exp, basetype);
1539
1540       /* Call to a destructor.  */
1541       if (TREE_CODE (name) == BIT_NOT_EXPR)
1542         {
1543           /* Explicit call to destructor.  */
1544           name = TREE_OPERAND (name, 0);
1545           if (! (name == TYPE_MAIN_VARIANT (TREE_TYPE (decl))
1546                  || name == constructor_name (TREE_TYPE (decl))
1547                  || TREE_TYPE (decl) == get_type_value (name)))
1548             {
1549               cp_error
1550                 ("qualified type `%T' does not match destructor name `~%T'",
1551                  TREE_TYPE (decl), name);
1552               return error_mark_node;
1553             }
1554           if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
1555             return cp_convert (void_type_node, exp);
1556           
1557           return build_delete (TREE_TYPE (decl), decl, integer_two_node,
1558                                LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
1559                                0);
1560         }
1561
1562       /* Call to a method.  */
1563       return build_method_call (decl, name, parms, binfo,
1564                                 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
1565     }
1566   return error_mark_node;
1567 }
1568
1569 static void
1570 print_candidates (candidates)
1571      tree candidates;
1572 {
1573   cp_error_at ("candidates are: %D", TREE_VALUE (candidates));
1574   candidates = TREE_CHAIN (candidates);
1575
1576   while (candidates)
1577     {
1578       cp_error_at ("                %D", TREE_VALUE (candidates));
1579       candidates = TREE_CHAIN (candidates);
1580     }
1581 }
1582
1583 static void
1584 print_n_candidates (candidates, n)
1585      struct candidate *candidates;
1586      int n;
1587 {
1588   int i;
1589
1590   cp_error_at ("candidates are: %D", candidates[0].function);
1591   for (i = 1; i < n; i++)
1592     cp_error_at ("                %D", candidates[i].function);
1593 }
1594
1595 /* We want the address of a function or method.  We avoid creating a
1596    pointer-to-member function.  */
1597
1598 tree
1599 build_addr_func (function)
1600      tree function;
1601 {
1602   tree type = TREE_TYPE (function);
1603
1604   /* We have to do these by hand to avoid real pointer to member
1605      functions.  */
1606   if (TREE_CODE (type) == METHOD_TYPE)
1607     {
1608       tree addr;
1609
1610       type = build_pointer_type (type);
1611
1612       if (mark_addressable (function) == 0)
1613         return error_mark_node;
1614
1615       addr = build1 (ADDR_EXPR, type, function);
1616
1617       /* Address of a static or external variable or function counts
1618          as a constant */
1619       if (staticp (function))
1620         TREE_CONSTANT (addr) = 1;
1621
1622       function = addr;
1623     }
1624   else
1625     function = default_conversion (function);
1626
1627   return function;
1628 }
1629
1630 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
1631    POINTER_TYPE to those.  Note, pointer to member function types
1632    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  */
1633
1634 tree
1635 build_call (function, result_type, parms)
1636      tree function, result_type, parms;
1637 {
1638   int is_constructor = 0;
1639
1640   function = build_addr_func (function);
1641
1642   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
1643     {
1644       sorry ("unable to call pointer to member function here");
1645       return error_mark_node;
1646     }
1647
1648   if (TREE_CODE (function) == ADDR_EXPR
1649       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1650       && DECL_CONSTRUCTOR_P (TREE_OPERAND (function, 0)))
1651     is_constructor = 1;
1652
1653   function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
1654   TREE_HAS_CONSTRUCTOR (function) = is_constructor;
1655   TREE_TYPE (function) = result_type;
1656   TREE_SIDE_EFFECTS (function) = 1;
1657   
1658   return function;
1659 }
1660
1661 static tree
1662 default_parm_conversions (parms, last)
1663      tree parms, *last;
1664 {
1665   tree parm, parmtypes = NULL_TREE;
1666
1667   *last = NULL_TREE;
1668
1669   for (parm = parms; parm; parm = TREE_CHAIN (parm))
1670     {
1671       tree t = TREE_TYPE (TREE_VALUE (parm));
1672
1673       if (TREE_CODE (t) == OFFSET_TYPE
1674           || TREE_CODE (t) == METHOD_TYPE
1675           || TREE_CODE (t) == FUNCTION_TYPE)
1676         {
1677           TREE_VALUE (parm) = default_conversion (TREE_VALUE (parm));
1678           t = TREE_TYPE (TREE_VALUE (parm));
1679         }
1680
1681       if (t == error_mark_node)
1682           return error_mark_node;
1683
1684       *last = build_tree_list (NULL_TREE, t);
1685       parmtypes = chainon (parmtypes, *last);
1686     }
1687
1688   return parmtypes;
1689 }
1690
1691
1692 /* Build something of the form ptr->method (args)
1693    or object.method (args).  This can also build
1694    calls to constructors, and find friends.
1695
1696    Member functions always take their class variable
1697    as a pointer.
1698
1699    INSTANCE is a class instance.
1700
1701    NAME is the name of the method desired, usually an IDENTIFIER_NODE.
1702
1703    PARMS help to figure out what that NAME really refers to.
1704
1705    BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
1706    down to the real instance type to use for access checking.  We need this
1707    information to get protected accesses correct.  This parameter is used
1708    by build_member_call.
1709
1710    FLAGS is the logical disjunction of zero or more LOOKUP_
1711    flags.  See cp-tree.h for more info.
1712
1713    If this is all OK, calls build_function_call with the resolved
1714    member function.
1715
1716    This function must also handle being called to perform
1717    initialization, promotion/coercion of arguments, and
1718    instantiation of default parameters.
1719
1720    Note that NAME may refer to an instance variable name.  If
1721    `operator()()' is defined for the type of that field, then we return
1722    that result.  */
1723
1724 tree
1725 build_method_call (instance, name, parms, basetype_path, flags)
1726      tree instance, name, parms, basetype_path;
1727      int flags;
1728 {
1729   register tree function, fntype, value_type;
1730   register tree basetype, save_basetype;
1731   register tree baselink, result, parmtypes;
1732   tree last;
1733   int pass;
1734   tree access = access_public_node;
1735   tree orig_basetype = basetype_path ? BINFO_TYPE (basetype_path) : NULL_TREE;
1736
1737   /* Range of cases for vtable optimization.  */
1738   enum vtable_needs { not_needed, maybe_needed, unneeded, needed };
1739   enum vtable_needs need_vtbl = not_needed;
1740
1741   char *name_kind;
1742   tree save_name = name;
1743   int ever_seen = 0;
1744   tree instance_ptr = NULL_TREE;
1745   int all_virtual = flag_all_virtual;
1746   int static_call_context = 0;
1747   tree found_fns = NULL_TREE;
1748
1749   /* Keep track of `const' and `volatile' objects.  */
1750   int constp, volatilep;
1751
1752 #ifdef GATHER_STATISTICS
1753   n_build_method_call++;
1754 #endif
1755
1756   if (instance == error_mark_node
1757       || name == error_mark_node
1758       || parms == error_mark_node
1759       || (instance != NULL_TREE && TREE_TYPE (instance) == error_mark_node))
1760     return error_mark_node;
1761
1762   if (processing_template_decl)
1763     {
1764       if (TREE_CODE (name) == BIT_NOT_EXPR)
1765         {
1766           tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1767           name = build_min_nt (BIT_NOT_EXPR, type);
1768         }
1769
1770       return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
1771     }
1772
1773   /* This is the logic that magically deletes the second argument to
1774      operator delete, if it is not needed.  */
1775   if (name == ansi_opname[(int) DELETE_EXPR] && list_length (parms)==2)
1776     {
1777       tree save_last = TREE_CHAIN (parms);
1778       tree result;
1779       /* get rid of unneeded argument */
1780       TREE_CHAIN (parms) = NULL_TREE;
1781       result = build_method_call (instance, name, parms, basetype_path,
1782                                   (LOOKUP_SPECULATIVELY|flags)
1783                                   &~LOOKUP_COMPLAIN);
1784       /* If it finds a match, return it.  */
1785       if (result)
1786         return build_method_call (instance, name, parms, basetype_path, flags);
1787       /* If it doesn't work, two argument delete must work */
1788       TREE_CHAIN (parms) = save_last;
1789     }
1790   /* We already know whether it's needed or not for vec delete.  */
1791   else if (name == ansi_opname[(int) VEC_DELETE_EXPR]
1792            && TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1793            && ! TYPE_VEC_DELETE_TAKES_SIZE (TREE_TYPE (instance)))
1794     TREE_CHAIN (parms) = NULL_TREE;
1795
1796   if (TREE_CODE (name) == BIT_NOT_EXPR)
1797     {
1798       flags |= LOOKUP_DESTRUCTOR;
1799       name = TREE_OPERAND (name, 0);
1800       if (parms)
1801         error ("destructors take no parameters");
1802       basetype = TREE_TYPE (instance);
1803       if (TREE_CODE (basetype) == REFERENCE_TYPE)
1804         basetype = TREE_TYPE (basetype);
1805       if (! (name == basetype
1806              || (IS_AGGR_TYPE (basetype)
1807                  && name == constructor_name (basetype))
1808              || basetype == get_type_value (name)))
1809         {
1810           cp_error ("destructor name `~%D' does not match type `%T' of expression",
1811                     name, basetype);
1812           return cp_convert (void_type_node, instance);
1813         }
1814
1815       if (! TYPE_HAS_DESTRUCTOR (complete_type (basetype)))
1816         return cp_convert (void_type_node, instance);
1817       instance = default_conversion (instance);
1818       instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1819       return build_delete (build_pointer_type (basetype),
1820                            instance_ptr, integer_two_node,
1821                            LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
1822     }
1823
1824   if (flag_ansi_overloading)
1825     return build_new_method_call (instance, name, parms, basetype_path, flags);
1826
1827   {
1828     char *xref_name;
1829     
1830     /* Initialize name for error reporting.  */
1831     if (IDENTIFIER_OPNAME_P (name) && ! IDENTIFIER_TYPENAME_P (name))
1832       {
1833         char *p = operator_name_string (name);
1834         xref_name = (char *)alloca (strlen (p) + 10);
1835         sprintf (xref_name, "operator %s", p);
1836       }
1837     else if (TREE_CODE (name) == SCOPE_REF)
1838       xref_name = IDENTIFIER_POINTER (TREE_OPERAND (name, 1));
1839     else
1840       xref_name = IDENTIFIER_POINTER (name);
1841
1842     GNU_xref_call (current_function_decl, xref_name);
1843   }
1844
1845   if (instance == NULL_TREE)
1846     {
1847       basetype = NULL_TREE;
1848       /* Check cases where this is really a call to raise
1849          an exception.  */
1850       if (current_class_type && TREE_CODE (name) == IDENTIFIER_NODE)
1851         {
1852           basetype = purpose_member (name, CLASSTYPE_TAGS (current_class_type));
1853           if (basetype)
1854             basetype = TREE_VALUE (basetype);
1855         }
1856       else if (TREE_CODE (name) == SCOPE_REF
1857                && TREE_CODE (TREE_OPERAND (name, 0)) == IDENTIFIER_NODE)
1858         {
1859           if (! is_aggr_typedef (TREE_OPERAND (name, 0), 1))
1860             return error_mark_node;
1861           basetype = purpose_member (TREE_OPERAND (name, 1),
1862                                      CLASSTYPE_TAGS (IDENTIFIER_TYPE_VALUE (TREE_OPERAND (name, 0))));
1863           if (basetype)
1864             basetype = TREE_VALUE (basetype);
1865         }
1866
1867       if (basetype != NULL_TREE)
1868         ;
1869       /* call to a constructor...  */
1870       else if (basetype_path)
1871         {
1872           basetype = BINFO_TYPE (basetype_path);
1873           if (name == TYPE_IDENTIFIER (basetype))
1874             name = ctor_identifier;
1875         }
1876       else if (IDENTIFIER_HAS_TYPE_VALUE (name))
1877         {
1878           basetype = IDENTIFIER_TYPE_VALUE (name);
1879           name = ctor_identifier;
1880         }
1881       else
1882         {
1883           tree typedef_name = lookup_name (name, 1);
1884           if (typedef_name && TREE_CODE (typedef_name) == TYPE_DECL)
1885             {
1886               /* Canonicalize the typedef name.  */
1887               basetype = TREE_TYPE (typedef_name);
1888               name = ctor_identifier;
1889             }
1890           else
1891             {
1892               cp_error ("no constructor named `%T' in scope",
1893                         name);
1894               return error_mark_node;
1895             }
1896         }
1897
1898       if (! IS_AGGR_TYPE (basetype))
1899         {
1900         non_aggr_error:
1901           if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
1902             cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
1903                       name, instance, basetype);
1904
1905           return error_mark_node;
1906         }
1907     }
1908   else if (instance == current_class_ref || instance == current_class_ptr)
1909     {
1910       /* When doing initialization, we side-effect the TREE_TYPE of
1911          current_class_ref, hence we cannot set up BASETYPE from CURRENT_CLASS_TYPE.  */
1912       basetype = TREE_TYPE (current_class_ref);
1913
1914       /* Anything manifestly `this' in constructors and destructors
1915          has a known type, so virtual function tables are not needed.  */
1916       if (TYPE_VIRTUAL_P (basetype)
1917           && !(flags & LOOKUP_NONVIRTUAL))
1918         need_vtbl = (dtor_label || ctor_label)
1919           ? unneeded : maybe_needed;
1920
1921       /* If `this' is a signature pointer and `name' is not a constructor,
1922          we are calling a signature member function.  In that case, set the
1923          `basetype' to the signature type and dereference the `optr' field.  */
1924       if (IS_SIGNATURE_POINTER (basetype)
1925           && TYPE_IDENTIFIER (basetype) != name)
1926         {
1927           basetype = SIGNATURE_TYPE (basetype);
1928           instance_ptr = instance;
1929           basetype_path = TYPE_BINFO (basetype);
1930         }
1931       else
1932         {
1933           instance = current_class_ref;
1934           instance_ptr = current_class_ptr;
1935           basetype_path = TYPE_BINFO (current_class_type);
1936         }
1937       result = build_field_call (basetype_path, instance_ptr, name, parms);
1938
1939       if (result)
1940         return result;
1941     }
1942   else if (TREE_CODE (instance) == RESULT_DECL)
1943     {
1944       basetype = TREE_TYPE (instance);
1945       /* Should we ever have to make a virtual function reference
1946          from a RESULT_DECL, know that it must be of fixed type
1947          within the scope of this function.  */
1948       if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
1949         need_vtbl = maybe_needed;
1950       instance_ptr = build1 (ADDR_EXPR, build_pointer_type (basetype), instance);
1951     }
1952   else
1953     {
1954       /* The MAIN_VARIANT of the type that `instance_ptr' winds up being.  */
1955       tree inst_ptr_basetype;
1956
1957       static_call_context
1958         = (TREE_CODE (instance) == INDIRECT_REF
1959            && TREE_CODE (TREE_OPERAND (instance, 0)) == NOP_EXPR
1960            && TREE_OPERAND (TREE_OPERAND (instance, 0), 0) == error_mark_node);
1961
1962       if (TREE_CODE (instance) == OFFSET_REF)
1963         instance = resolve_offset_ref (instance);
1964
1965       /* the base type of an instance variable is pointer to class */
1966       basetype = TREE_TYPE (instance);
1967
1968       if (TREE_CODE (basetype) == REFERENCE_TYPE)
1969         {
1970           basetype = TREE_TYPE (basetype);
1971           if (! IS_AGGR_TYPE (basetype))
1972             goto non_aggr_error;
1973           /* Call to convert not needed because we are remaining
1974              within the same type.  */
1975           instance_ptr = build1 (NOP_EXPR, build_pointer_type (basetype),
1976                                  instance);
1977           inst_ptr_basetype = TYPE_MAIN_VARIANT (basetype);
1978         }
1979       else
1980         {
1981           if (! IS_AGGR_TYPE (basetype)
1982               && ! (TYPE_LANG_SPECIFIC (basetype)
1983                     && (IS_SIGNATURE_POINTER (basetype)
1984                         || IS_SIGNATURE_REFERENCE (basetype))))
1985             goto non_aggr_error;
1986
1987           /* If `instance' is a signature pointer/reference and `name' is
1988              not a constructor, we are calling a signature member function.
1989              In that case set the `basetype' to the signature type.  */
1990           if ((IS_SIGNATURE_POINTER (basetype)
1991                || IS_SIGNATURE_REFERENCE (basetype))
1992               && TYPE_IDENTIFIER (basetype) != name)
1993             basetype = SIGNATURE_TYPE (basetype);
1994
1995           basetype = complete_type (basetype);
1996
1997           if ((IS_SIGNATURE (basetype)
1998                && (instance_ptr = instance))
1999               || (lvalue_p (instance)
2000                   && (instance_ptr = build_unary_op (ADDR_EXPR, instance, 0)))
2001               || (instance_ptr = unary_complex_lvalue (ADDR_EXPR, instance)))
2002             {
2003               if (instance_ptr == error_mark_node)
2004                 return error_mark_node;
2005             }
2006           else if (TREE_CODE (instance) == NOP_EXPR
2007                    || TREE_CODE (instance) == CONSTRUCTOR)
2008             {
2009               /* A cast is not an lvalue.  Initialize a fresh temp
2010                  with the value we are casting from, and proceed with
2011                  that temporary.  We can't cast to a reference type,
2012                  so that simplifies the initialization to something
2013                  we can manage.  */
2014               tree temp = get_temp_name (TREE_TYPE (instance), 0);
2015               if (IS_AGGR_TYPE (TREE_TYPE (instance)))
2016                 expand_aggr_init (temp, instance, 0, flags);
2017               else
2018                 {
2019                   store_init_value (temp, instance);
2020                   expand_decl_init (temp);
2021                 }
2022               instance = temp;
2023               instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
2024             }
2025           else
2026             {
2027               if (TREE_CODE (instance) != CALL_EXPR)
2028                 my_friendly_abort (125);
2029               if (TYPE_NEEDS_CONSTRUCTING (basetype))
2030                 instance = build_cplus_new (basetype, instance);
2031               else
2032                 {
2033                   instance = get_temp_name (basetype, 0);
2034                   TREE_ADDRESSABLE (instance) = 1;
2035                 }
2036               instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
2037             }
2038           /* @@ Should we call comp_target_types here?  */
2039           if (IS_SIGNATURE (basetype))
2040             inst_ptr_basetype = basetype;
2041           else
2042             inst_ptr_basetype = TREE_TYPE (TREE_TYPE (instance_ptr));
2043           if (TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (inst_ptr_basetype))
2044             basetype = inst_ptr_basetype;
2045           else
2046             {
2047               instance_ptr = cp_convert (build_pointer_type (basetype), instance_ptr);
2048               if (instance_ptr == error_mark_node)
2049                 return error_mark_node;
2050             }
2051         }
2052
2053       /* After converting `instance_ptr' above, `inst_ptr_basetype' was
2054          not updated, so we use `basetype' instead.  */
2055       if (basetype_path == NULL_TREE
2056           && IS_SIGNATURE (basetype))
2057         basetype_path = TYPE_BINFO (basetype);
2058       else if (basetype_path == NULL_TREE
2059                || (BINFO_TYPE (basetype_path)
2060                    != TYPE_MAIN_VARIANT (inst_ptr_basetype)))
2061         basetype_path = TYPE_BINFO (inst_ptr_basetype);
2062
2063       result = build_field_call (basetype_path, instance_ptr, name, parms);
2064       if (result)
2065         return result;
2066
2067       if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
2068         {
2069           if (TREE_SIDE_EFFECTS (instance_ptr))
2070             {
2071               /* This action is needed because the instance is needed
2072                  for providing the base of the virtual function table.
2073                  Without using a SAVE_EXPR, the function we are building
2074                  may be called twice, or side effects on the instance
2075                  variable (such as a post-increment), may happen twice.  */
2076               instance_ptr = save_expr (instance_ptr);
2077               instance = build_indirect_ref (instance_ptr, NULL_PTR);
2078             }
2079           else if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
2080             {
2081               /* This happens when called for operator new ().  */
2082               instance = build_indirect_ref (instance, NULL_PTR);
2083             }
2084
2085           need_vtbl = maybe_needed;
2086         }
2087     }
2088
2089   if (save_name == ctor_identifier)
2090     save_name = TYPE_IDENTIFIER (basetype);
2091
2092   if (TYPE_SIZE (complete_type (basetype)) == 0)
2093     {
2094       /* This is worth complaining about, I think.  */
2095       cp_error ("cannot lookup method in incomplete type `%T'", basetype);
2096       return error_mark_node;
2097     }
2098
2099   save_basetype = TYPE_MAIN_VARIANT (basetype);
2100
2101   parmtypes = default_parm_conversions (parms, &last);
2102   if (parmtypes == error_mark_node)
2103     {
2104       return error_mark_node;
2105     }
2106
2107   if (instance && IS_SIGNATURE (basetype))
2108     {
2109       /* @@ Should this be the constp/volatilep flags for the optr field
2110          of the signature pointer?  */
2111       constp = TYPE_READONLY (basetype);
2112       volatilep = TYPE_VOLATILE (basetype);
2113       parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
2114     }
2115   else if (instance)
2116     {
2117       /* TREE_READONLY (instance) fails for references.  */
2118       constp = TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr)));
2119       volatilep = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr)));
2120       parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
2121     }
2122   else
2123     {
2124       /* Raw constructors are always in charge.  */
2125       if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2126           && ! (flags & LOOKUP_HAS_IN_CHARGE))
2127         {
2128           flags |= LOOKUP_HAS_IN_CHARGE;
2129           parms = expr_tree_cons (NULL_TREE, integer_one_node, parms);
2130           parmtypes = scratch_tree_cons (NULL_TREE, integer_type_node, parmtypes);
2131         }
2132
2133       constp = 0;
2134       volatilep = 0;
2135       instance_ptr = build_int_2 (0, 0);
2136       TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
2137       parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
2138     }
2139
2140   parmtypes = scratch_tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes);
2141
2142   if (last == NULL_TREE)
2143     last = parmtypes;
2144
2145   /* Look up function name in the structure type definition.  */
2146
2147   /* FIXME Axe most of this now?  */
2148   if ((IDENTIFIER_HAS_TYPE_VALUE (name)
2149        && ! IDENTIFIER_OPNAME_P (name)
2150        && IS_AGGR_TYPE (IDENTIFIER_TYPE_VALUE (name)))
2151       || name == constructor_name (basetype)
2152       || name == ctor_identifier)
2153     {
2154       tree tmp = NULL_TREE;
2155       if (IDENTIFIER_TYPE_VALUE (name) == basetype
2156           || name == constructor_name (basetype)
2157           || name == ctor_identifier)
2158         tmp = TYPE_BINFO (basetype);
2159       else
2160         tmp = get_binfo (IDENTIFIER_TYPE_VALUE (name), basetype, 0);
2161       
2162       if (tmp != NULL_TREE)
2163         {
2164           name_kind = "constructor";
2165           
2166           if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2167               && ! (flags & LOOKUP_HAS_IN_CHARGE))
2168             {
2169               /* Constructors called for initialization
2170                  only are never in charge.  */
2171               tree tmplist;
2172               
2173               flags |= LOOKUP_HAS_IN_CHARGE;
2174               tmplist = expr_tree_cons (NULL_TREE, integer_zero_node,
2175                                    TREE_CHAIN (parms));
2176               TREE_CHAIN (parms) = tmplist;
2177               tmplist = scratch_tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
2178               TREE_CHAIN (parmtypes) = tmplist;
2179             }
2180           basetype = BINFO_TYPE (tmp);
2181         }
2182       else
2183         name_kind = "method";
2184     }
2185   else
2186     name_kind = "method";
2187   
2188   if (basetype_path == NULL_TREE
2189       || BINFO_TYPE (basetype_path) != TYPE_MAIN_VARIANT (basetype))
2190     basetype_path = TYPE_BINFO (basetype);
2191   result = lookup_fnfields (basetype_path, name,
2192                             (flags & LOOKUP_COMPLAIN));
2193   if (result == error_mark_node)
2194     return error_mark_node;
2195
2196   for (pass = 0; pass < 2; pass++)
2197     {
2198       struct candidate *candidates;
2199       struct candidate *cp;
2200       int len;
2201       unsigned best = 1;
2202
2203       baselink = result;
2204
2205       if (pass > 0)
2206         {
2207           candidates
2208             = (struct candidate *) alloca ((ever_seen+1)
2209                                            * sizeof (struct candidate));
2210           bzero ((char *) candidates, (ever_seen + 1) * sizeof (struct candidate));
2211           cp = candidates;
2212           len = list_length (parms);
2213           ever_seen = 0;
2214
2215           /* First see if a global function has a shot at it.  */
2216           if (flags & LOOKUP_GLOBAL)
2217             {
2218               tree friend_parms;
2219               tree parm = instance_ptr;
2220
2221               if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE)
2222                 parm = convert_from_reference (parm);
2223               else if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE)
2224                 parm = build_indirect_ref (parm, "friendifying parms (compiler error)");
2225               else
2226                 my_friendly_abort (167);
2227
2228               friend_parms = expr_tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
2229
2230               cp->h_len = len;
2231               cp->harshness = (struct harshness_code *)
2232                 alloca ((len + 1) * sizeof (struct harshness_code));
2233
2234               result = build_overload_call_real (name, friend_parms, 0, cp, 1);
2235
2236               /* If it turns out to be the one we were actually looking for
2237                  (it was probably a friend function), the return the
2238                  good result.  */
2239               if (TREE_CODE (result) == CALL_EXPR)
2240                 return result;
2241
2242               while ((cp->h.code & EVIL_CODE) == 0)
2243                 {
2244                   /* non-standard uses: set the field to 0 to indicate
2245                      we are using a non-member function.  */
2246                   cp->u.field = 0;
2247                   if (cp->harshness[len].distance == 0
2248                       && cp->h.code < best)
2249                     best = cp->h.code;
2250                   cp += 1;
2251                 }
2252             }
2253         }
2254
2255       if (baselink)
2256         {
2257           /* We have a hit (of sorts). If the parameter list is
2258              "error_mark_node", or some variant thereof, it won't
2259              match any methods.  Since we have verified that the is
2260              some method vaguely matching this one (in name at least),
2261              silently return.
2262              
2263              Don't stop for friends, however.  */
2264           basetype_path = TREE_PURPOSE (baselink);
2265
2266           function = TREE_VALUE (baselink);
2267           if (TREE_CODE (basetype_path) == TREE_LIST)
2268             basetype_path = TREE_VALUE (basetype_path);
2269           basetype = BINFO_TYPE (basetype_path);
2270
2271           for (; function; function = DECL_CHAIN (function))
2272             {
2273 #ifdef GATHER_STATISTICS
2274               n_inner_fields_searched++;
2275 #endif
2276               ever_seen++;
2277               if (pass > 0)
2278                 found_fns = scratch_tree_cons (NULL_TREE, function, found_fns);
2279
2280               /* Not looking for friends here.  */
2281               if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE
2282                   && ! DECL_STATIC_FUNCTION_P (function))
2283                 continue;
2284
2285               if (pass > 0)
2286                 {
2287                   tree these_parms = parms;
2288
2289 #ifdef GATHER_STATISTICS
2290                   n_inner_fields_searched++;
2291 #endif
2292                   cp->h_len = len;
2293                   cp->harshness = (struct harshness_code *)
2294                     alloca ((len + 1) * sizeof (struct harshness_code));
2295
2296                   if (DECL_STATIC_FUNCTION_P (function))
2297                     these_parms = TREE_CHAIN (these_parms);
2298                   compute_conversion_costs (function, these_parms, cp, len);
2299
2300                   if ((cp->h.code & EVIL_CODE) == 0)
2301                     {
2302                       cp->u.field = function;
2303                       cp->function = function;
2304                       cp->basetypes = basetype_path;
2305
2306                       /* Don't allow non-converting constructors to convert.  */
2307                       if (flags & LOOKUP_ONLYCONVERTING
2308                           && DECL_LANG_SPECIFIC (function)
2309                           && DECL_NONCONVERTING_P (function))
2310                         continue;
2311
2312                       /* No "two-level" conversions.  */
2313                       if (flags & LOOKUP_NO_CONVERSION
2314                           && (cp->h.code & USER_CODE))
2315                         continue;
2316
2317                       cp++;
2318                     }
2319                 }
2320             }
2321         }
2322
2323       if (pass == 0)
2324         {
2325           tree igv = lookup_name_nonclass (name);
2326
2327           /* No exact match could be found.  Now try to find match
2328              using default conversions.  */
2329           if ((flags & LOOKUP_GLOBAL) && igv)
2330             {
2331               if (TREE_CODE (igv) == FUNCTION_DECL)
2332                 ever_seen += 1;
2333               else if (TREE_CODE (igv) == TREE_LIST)
2334                 ever_seen += count_functions (igv);
2335             }
2336
2337           if (ever_seen == 0)
2338             {
2339               if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2340                   == LOOKUP_SPECULATIVELY)
2341                 return NULL_TREE;
2342               
2343               TREE_CHAIN (last) = void_list_node;
2344               if (flags & LOOKUP_GLOBAL)
2345                 cp_error ("no global or member function `%D(%A)' defined",
2346                           save_name, parmtypes);
2347               else
2348                 cp_error ("no member function `%T::%D(%A)' defined",
2349                           save_basetype, save_name, TREE_CHAIN (parmtypes));
2350               return error_mark_node;
2351             }
2352           continue;
2353         }
2354
2355       if (cp - candidates != 0)
2356         {
2357           /* Rank from worst to best.  Then cp will point to best one.
2358              Private fields have their bits flipped.  For unsigned
2359              numbers, this should make them look very large.
2360              If the best alternate has a (signed) negative value,
2361              then all we ever saw were private members.  */
2362           if (cp - candidates > 1)
2363             {
2364               int n_candidates = cp - candidates;
2365               extern int warn_synth;
2366               TREE_VALUE (parms) = instance_ptr;
2367               cp = ideal_candidate (candidates, n_candidates, len);
2368               if (cp == (struct candidate *)0)
2369                 {
2370                   if (flags & LOOKUP_COMPLAIN)
2371                     {
2372                       TREE_CHAIN (last) = void_list_node;
2373                       cp_error ("call of overloaded %s `%D(%A)' is ambiguous",
2374                                 name_kind, save_name, TREE_CHAIN (parmtypes));
2375                       print_n_candidates (candidates, n_candidates);
2376                     }
2377                   return error_mark_node;
2378                 }
2379               if (cp->h.code & EVIL_CODE)
2380                 return error_mark_node;
2381               if (warn_synth
2382                   && DECL_NAME (cp->function) == ansi_opname[MODIFY_EXPR]
2383                   && DECL_ARTIFICIAL (cp->function)
2384                   && n_candidates == 2)
2385                 {
2386                   cp_warning ("using synthesized `%#D' for copy assignment",
2387                               cp->function);
2388                   cp_warning_at ("  where cfront would use `%#D'",
2389                                  candidates->function);
2390                 }
2391             }
2392           else if (cp[-1].h.code & EVIL_CODE)
2393             {
2394               if (flags & LOOKUP_COMPLAIN)
2395                 cp_error ("ambiguous type conversion requested for %s `%D'",
2396                           name_kind, save_name);
2397               return error_mark_node;
2398             }
2399           else
2400             cp--;
2401
2402           /* The global function was the best, so use it.  */
2403           if (cp->u.field == 0)
2404             {
2405               /* We must convert the instance pointer into a reference type.
2406                  Global overloaded functions can only either take
2407                  aggregate objects (which come for free from references)
2408                  or reference data types anyway.  */
2409               TREE_VALUE (parms) = copy_node (instance_ptr);
2410               TREE_TYPE (TREE_VALUE (parms)) = build_reference_type (TREE_TYPE (TREE_TYPE (instance_ptr)));
2411               return build_function_call (cp->function, parms);
2412             }
2413
2414           function = cp->function;
2415           basetype_path = cp->basetypes;
2416           if (! DECL_STATIC_FUNCTION_P (function))
2417             TREE_VALUE (parms) = cp->arg;
2418           goto found_and_maybe_warn;
2419         }
2420
2421       if (flags & (LOOKUP_COMPLAIN|LOOKUP_SPECULATIVELY))
2422         {
2423           if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2424               == LOOKUP_SPECULATIVELY)
2425             return NULL_TREE;
2426
2427           if (DECL_STATIC_FUNCTION_P (cp->function))
2428             parms = TREE_CHAIN (parms);
2429           if (ever_seen)
2430             {
2431               if (flags & LOOKUP_SPECULATIVELY)
2432                 return NULL_TREE;
2433               if (static_call_context
2434                   && TREE_CODE (TREE_TYPE (cp->function)) == METHOD_TYPE)
2435                 cp_error ("object missing in call to `%D'", cp->function);
2436               else if (ever_seen > 1)
2437                 {
2438                   TREE_CHAIN (last) = void_list_node;
2439                   cp_error ("no matching function for call to `%T::%D (%A)%V'",
2440                             TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (instance_ptr))),
2441                             save_name, TREE_CHAIN (parmtypes),
2442                             TREE_TYPE (TREE_TYPE (instance_ptr)));
2443                   TREE_CHAIN (last) = NULL_TREE;
2444                   print_candidates (found_fns);
2445                 }
2446               else
2447                 report_type_mismatch (cp, parms, name_kind);
2448               return error_mark_node;
2449             }
2450
2451           if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2452               == LOOKUP_COMPLAIN)
2453             {
2454               cp_error ("%T has no method named %D", save_basetype, save_name);
2455               return error_mark_node;
2456             }
2457           return NULL_TREE;
2458         }
2459       continue;
2460
2461     found_and_maybe_warn:
2462       if ((cp->harshness[0].code & CONST_CODE)
2463           /* 12.1p2: Constructors can be called for const objects.  */
2464           && ! DECL_CONSTRUCTOR_P (cp->function))
2465         {
2466           if (flags & LOOKUP_COMPLAIN)
2467             {
2468               cp_error_at ("non-const member function `%D'", cp->function);
2469               error ("called for const object at this point in file");
2470             }
2471           /* Not good enough for a match.  */
2472           else
2473             return error_mark_node;
2474         }
2475       goto found;
2476     }
2477   /* Silently return error_mark_node.  */
2478   return error_mark_node;
2479
2480  found:
2481   if (flags & LOOKUP_PROTECT)
2482     access = compute_access (basetype_path, function);
2483
2484   if (access == access_private_node)
2485     {
2486       if (flags & LOOKUP_COMPLAIN)
2487         {
2488           cp_error_at ("%s `%+#D' is %s", name_kind, function, 
2489                        TREE_PRIVATE (function) ? "private"
2490                        : "from private base class");
2491           error ("within this context");
2492         }
2493       return error_mark_node;
2494     }
2495   else if (access == access_protected_node)
2496     {
2497       if (flags & LOOKUP_COMPLAIN)
2498         {
2499           cp_error_at ("%s `%+#D' %s", name_kind, function,
2500                        TREE_PROTECTED (function) ? "is protected"
2501                        : "has protected accessibility");
2502           error ("within this context");
2503         }
2504       return error_mark_node;
2505     }
2506
2507   /* From here on down, BASETYPE is the type that INSTANCE_PTR's
2508      type (if it exists) is a pointer to.  */
2509
2510   if (DECL_ABSTRACT_VIRTUAL_P (function)
2511       && instance == current_class_ref
2512       && DECL_CONSTRUCTOR_P (current_function_decl)
2513       && ! (flags & LOOKUP_NONVIRTUAL)
2514       && value_member (function, get_abstract_virtuals (basetype)))
2515     cp_error ("abstract virtual `%#D' called from constructor", function);
2516
2517   if (IS_SIGNATURE (basetype))
2518     {
2519       if (static_call_context)
2520         {
2521           cp_error ("cannot call signature member function `%T::%D' without signature pointer/reference",
2522                     basetype, save_name);
2523           return error_mark_node;
2524         }
2525       return build_signature_method_call (function, parms);
2526     }
2527
2528   function = DECL_MAIN_VARIANT (function);
2529   mark_used (function);
2530
2531   fntype = TREE_TYPE (function);
2532   if (TREE_CODE (fntype) == POINTER_TYPE)
2533     fntype = TREE_TYPE (fntype);
2534   basetype = DECL_CLASS_CONTEXT (function);
2535
2536   /* If we are referencing a virtual function from an object
2537      of effectively static type, then there is no need
2538      to go through the virtual function table.  */
2539   if (need_vtbl == maybe_needed)
2540     {
2541       int fixed_type = resolves_to_fixed_type_p (instance, 0);
2542
2543       if (all_virtual == 1
2544           && DECL_VINDEX (function)
2545           && may_be_remote (basetype))
2546         need_vtbl = needed;
2547       else if (DECL_VINDEX (function))
2548         need_vtbl = fixed_type ? unneeded : needed;
2549       else
2550         need_vtbl = not_needed;
2551     }
2552
2553   if (TREE_CODE (fntype) == METHOD_TYPE && static_call_context
2554       && !DECL_CONSTRUCTOR_P (function))
2555     {
2556       /* Let's be nasty to the user now, and give reasonable
2557          error messages.  */
2558       instance_ptr = current_class_ptr;
2559       if (instance_ptr)
2560         {
2561           if (basetype != current_class_type)
2562             {
2563               if (basetype == error_mark_node)
2564                 return error_mark_node;
2565               else 
2566                 {
2567                   if (orig_basetype != NULL_TREE)
2568                     error_not_base_type (orig_basetype, current_class_type);
2569                   else
2570                     error_not_base_type (function, current_class_type);
2571                   return error_mark_node;
2572                 }
2573             }
2574         }
2575       /* Only allow a static member function to call another static member
2576          function.  */
2577       else if (DECL_LANG_SPECIFIC (function)
2578                && !DECL_STATIC_FUNCTION_P (function))
2579         {
2580           cp_error ("cannot call member function `%D' without object",
2581                     function);
2582           return error_mark_node;
2583         }
2584     }
2585
2586   value_type = TREE_TYPE (fntype) ? TREE_TYPE (fntype) : void_type_node;
2587
2588   if (TYPE_SIZE (complete_type (value_type)) == 0)
2589     {
2590       if (flags & LOOKUP_COMPLAIN)
2591         incomplete_type_error (0, value_type);
2592       return error_mark_node;
2593     }
2594
2595   if (DECL_STATIC_FUNCTION_P (function))
2596     parms = convert_arguments (NULL_TREE, TYPE_ARG_TYPES (fntype),
2597                                TREE_CHAIN (parms), function, LOOKUP_NORMAL);
2598   else if (need_vtbl == unneeded)
2599     {
2600       int sub_flags = DECL_CONSTRUCTOR_P (function) ? flags : LOOKUP_NORMAL;
2601       basetype = TREE_TYPE (instance);
2602       if (TYPE_METHOD_BASETYPE (TREE_TYPE (function))
2603           != TYPE_MAIN_VARIANT (basetype))
2604         {
2605           basetype = DECL_CLASS_CONTEXT (function);
2606           instance_ptr = convert_pointer_to (basetype, instance_ptr);
2607           instance = build_indirect_ref (instance_ptr, NULL_PTR);
2608         }
2609       parms = expr_tree_cons (NULL_TREE, instance_ptr,
2610                          convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, sub_flags));
2611     }
2612   else
2613     {
2614       if ((flags & LOOKUP_NONVIRTUAL) == 0)
2615         basetype = DECL_CONTEXT (function);
2616
2617       /* First parm could be integer_zerop with casts like
2618          ((Object*)0)->Object::IsA()  */
2619       if (!integer_zerop (TREE_VALUE (parms)))
2620         {
2621           /* Since we can't have inheritance with a union, doing get_binfo
2622              on it won't work.  We do all the convert_pointer_to_real
2623              stuff to handle MI correctly...for unions, that's not
2624              an issue, so we must short-circuit that extra work here.  */
2625           tree tmp = TREE_TYPE (TREE_TYPE (TREE_VALUE (parms)));
2626           if (tmp != NULL_TREE && TREE_CODE (tmp) == UNION_TYPE)
2627             instance_ptr = TREE_VALUE (parms);
2628           else
2629             {
2630               tree binfo = get_binfo (basetype,
2631                                       TREE_TYPE (TREE_TYPE (TREE_VALUE (parms))),
2632                                       0);
2633               instance_ptr = convert_pointer_to_real (binfo, TREE_VALUE (parms));
2634             }
2635           instance_ptr
2636             = convert_pointer_to (build_type_variant (basetype,
2637                                                       constp, volatilep),
2638                                   instance_ptr);
2639
2640           if (TREE_CODE (instance_ptr) == COND_EXPR)
2641             {
2642               instance_ptr = save_expr (instance_ptr);
2643               instance = build_indirect_ref (instance_ptr, NULL_PTR);
2644             }
2645           else if (TREE_CODE (instance_ptr) == NOP_EXPR
2646                    && TREE_CODE (TREE_OPERAND (instance_ptr, 0)) == ADDR_EXPR
2647                    && TREE_OPERAND (TREE_OPERAND (instance_ptr, 0), 0) == instance)
2648             ;
2649           /* The call to `convert_pointer_to' may return error_mark_node.  */
2650           else if (instance_ptr == error_mark_node)
2651             return instance_ptr;
2652           else if (instance == NULL_TREE
2653                    || TREE_CODE (instance) != INDIRECT_REF
2654                    || TREE_OPERAND (instance, 0) != instance_ptr)
2655             instance = build_indirect_ref (instance_ptr, NULL_PTR);
2656         }
2657       parms = expr_tree_cons (NULL_TREE, instance_ptr,
2658                          convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, LOOKUP_NORMAL));
2659     }
2660
2661   if (parms == error_mark_node
2662       || (parms && TREE_CHAIN (parms) == error_mark_node))
2663     return error_mark_node;
2664
2665   if (need_vtbl == needed)
2666     {
2667       function = build_vfn_ref (&TREE_VALUE (parms), instance,
2668                                 DECL_VINDEX (function));
2669       TREE_TYPE (function) = build_pointer_type (fntype);
2670     }
2671
2672   if (TREE_CODE (function) == FUNCTION_DECL)
2673     GNU_xref_call (current_function_decl,
2674                    IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function)));
2675
2676   result = build_call (function, value_type, parms);
2677   if (IS_AGGR_TYPE (value_type))
2678     result = build_cplus_new (value_type, result);
2679   result = convert_from_reference (result);
2680   return result;
2681 }
2682
2683 /* Similar to `build_method_call', but for overloaded non-member functions.
2684    The name of this function comes through NAME.  The name depends
2685    on PARMS.
2686
2687    Note that this function must handle simple `C' promotions,
2688    as well as variable numbers of arguments (...), and
2689    default arguments to boot.
2690
2691    If the overloading is successful, we return a tree node which
2692    contains the call to the function.
2693
2694    If overloading produces candidates which are probable, but not definite,
2695    we hold these candidates.  If FINAL_CP is non-zero, then we are free
2696    to assume that final_cp points to enough storage for all candidates that
2697    this function might generate.  The `harshness' array is preallocated for
2698    the first candidate, but not for subsequent ones.
2699
2700    Note that the DECL_RTL of FUNCTION must be made to agree with this
2701    function's new name.  */
2702
2703 tree
2704 build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
2705      tree fnname, parms;
2706      int flags;
2707      struct candidate *final_cp;
2708      int require_complete;
2709 {
2710   /* must check for overloading here */
2711   tree functions, function;
2712   tree parmtypes, last;
2713   register tree outer;
2714   int length;
2715   int parmlength = list_length (parms);
2716
2717   struct candidate *candidates, *cp;
2718
2719   if (final_cp)
2720     {
2721       final_cp[0].h.code = 0;
2722       final_cp[0].h.distance = 0;
2723       final_cp[0].function = 0;
2724       /* end marker.  */
2725       final_cp[1].h.code = EVIL_CODE;
2726     }
2727
2728   parmtypes = default_parm_conversions (parms, &last);
2729   if (parmtypes == error_mark_node)
2730     {
2731       if (final_cp)
2732         final_cp->h.code = EVIL_CODE;
2733       return error_mark_node;
2734     }
2735
2736   if (last)
2737     TREE_CHAIN (last) = void_list_node;
2738   else
2739     parmtypes = void_list_node;
2740
2741   if (is_overloaded_fn (fnname))
2742     {
2743       functions = fnname;
2744       if (TREE_CODE (fnname) == TREE_LIST)
2745         fnname = TREE_PURPOSE (functions);
2746       else if (TREE_CODE (fnname) == FUNCTION_DECL)
2747         fnname = DECL_NAME (functions);
2748     }
2749   else 
2750     functions = lookup_name_nonclass (fnname);
2751
2752   if (functions == NULL_TREE)
2753     {
2754       if (flags & LOOKUP_SPECULATIVELY)
2755         return NULL_TREE;
2756       if (flags & LOOKUP_COMPLAIN)
2757         error ("only member functions apply");
2758       if (final_cp)
2759         final_cp->h.code = EVIL_CODE;
2760       return error_mark_node;
2761     }
2762
2763   if (TREE_CODE (functions) == FUNCTION_DECL && ! IDENTIFIER_OPNAME_P (fnname))
2764     {
2765       functions = DECL_MAIN_VARIANT (functions);
2766       if (final_cp)
2767         {
2768           /* We are just curious whether this is a viable alternative or
2769              not.  */
2770           compute_conversion_costs (functions, parms, final_cp, parmlength);
2771           return functions;
2772         }
2773       else
2774         return build_function_call_real (functions, parms, 1, flags);
2775     }
2776
2777   if (TREE_CODE (functions) == TREE_LIST
2778       && TREE_VALUE (functions) == NULL_TREE)
2779     {
2780       if (flags & LOOKUP_SPECULATIVELY)
2781         return NULL_TREE;
2782       
2783       if (flags & LOOKUP_COMPLAIN)
2784         cp_error ("function `%D' declared overloaded, but no instances of that function declared",
2785                   TREE_PURPOSE (functions));
2786       if (final_cp)
2787         final_cp->h.code = EVIL_CODE;
2788       return error_mark_node;
2789     }
2790
2791   length = count_functions (functions);
2792   
2793   if (final_cp)
2794     candidates = final_cp;
2795   else
2796     {
2797       candidates
2798         = (struct candidate *)alloca ((length+1) * sizeof (struct candidate));
2799       bzero ((char *) candidates, (length + 1) * sizeof (struct candidate));
2800     }
2801
2802   cp = candidates;
2803
2804   my_friendly_assert (is_overloaded_fn (functions), 169);
2805
2806   functions = get_first_fn (functions);
2807
2808   /* OUTER is the list of FUNCTION_DECLS, in a TREE_LIST.  */
2809   for (outer = functions; outer; outer = DECL_CHAIN (outer))
2810     {
2811       int template_cost = 0;
2812       function = outer;
2813       if (TREE_CODE (function) != FUNCTION_DECL
2814           && ! (TREE_CODE (function) == TEMPLATE_DECL
2815                 && TREE_CODE (DECL_TEMPLATE_RESULT (function)) == FUNCTION_DECL))
2816         {
2817           enum tree_code code = TREE_CODE (function);
2818           if (code == TEMPLATE_DECL)
2819             code = TREE_CODE (DECL_TEMPLATE_RESULT (function));
2820           if (code == CONST_DECL)
2821             cp_error_at
2822               ("enumeral value `%D' conflicts with function of same name",
2823                function);
2824           else if (code == VAR_DECL)
2825             {
2826               if (TREE_STATIC (function))
2827                 cp_error_at
2828                   ("variable `%D' conflicts with function of same name",
2829                    function);
2830               else
2831                 cp_error_at
2832                   ("constant field `%D' conflicts with function of same name",
2833                    function);
2834             }
2835           else if (code == TYPE_DECL)
2836             continue;
2837           else
2838             my_friendly_abort (2);
2839           error ("at this point in file");
2840           continue;
2841         }
2842       if (TREE_CODE (function) == TEMPLATE_DECL)
2843         {
2844           int ntparms = DECL_NTPARMS (function);
2845           tree targs = make_scratch_vec (ntparms);
2846           int i;
2847
2848           i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (function),
2849                                 &TREE_VEC_ELT (targs, 0),
2850                                 TYPE_ARG_TYPES (TREE_TYPE (function)),
2851                                 parms, NULL_TREE, &template_cost, 0, 0);
2852           if (i == 0)
2853             {
2854               function = instantiate_template (function, targs);
2855               if (function == error_mark_node)
2856                 return function;
2857             }
2858         }
2859
2860       if (TREE_CODE (function) == TEMPLATE_DECL)
2861         {
2862           /* Unconverted template -- failed match.  */
2863           cp->function = function;
2864           cp->u.bad_arg = -4;
2865           cp->h.code = EVIL_CODE;
2866         }
2867       else
2868         {
2869           struct candidate *cp2;
2870
2871           /* Check that this decl is not the same as a function that's in
2872              the list due to some template instantiation.  */
2873           cp2 = candidates;
2874           while (cp2 != cp)
2875             if (cp2->function == function)
2876               break;
2877             else
2878               cp2 += 1;
2879           if (cp2->function == function)
2880             continue;
2881
2882           function = DECL_MAIN_VARIANT (function);
2883
2884           /* Can't use alloca here, since result might be
2885              passed to calling function.  */
2886           cp->h_len = parmlength;
2887           cp->harshness = (struct harshness_code *)
2888             scratchalloc ((parmlength + 1) * sizeof (struct harshness_code));
2889
2890           compute_conversion_costs (function, parms, cp, parmlength);
2891
2892           /* Make sure this is clear as well.  */
2893           cp->h.int_penalty += template_cost;
2894
2895           if ((cp[0].h.code & EVIL_CODE) == 0)
2896             {
2897               cp[1].h.code = EVIL_CODE;
2898               cp++;
2899             }
2900         }
2901     }
2902
2903   if (cp - candidates)
2904     {
2905       tree rval = error_mark_node;
2906
2907       /* Leave marker.  */
2908       cp[0].h.code = EVIL_CODE;
2909       if (cp - candidates > 1)
2910         {
2911           struct candidate *best_cp
2912             = ideal_candidate (candidates, cp - candidates, parmlength);
2913           if (best_cp == (struct candidate *)0)
2914             {
2915               if (flags & LOOKUP_COMPLAIN)
2916                 {
2917                   cp_error ("call of overloaded `%D' is ambiguous", fnname);
2918                   print_n_candidates (candidates, cp - candidates);
2919                 }
2920               return error_mark_node;
2921             }
2922           else
2923             rval = best_cp->function;
2924         }
2925       else
2926         {
2927           cp -= 1;
2928           if (cp->h.code & EVIL_CODE)
2929             {
2930               if (flags & LOOKUP_COMPLAIN)
2931                 error ("type conversion ambiguous");
2932             }
2933           else
2934             rval = cp->function;
2935         }
2936
2937       if (final_cp)
2938         return rval;
2939
2940       return build_function_call_real (rval, parms, require_complete, flags);
2941     }
2942
2943   if (flags & LOOKUP_SPECULATIVELY)
2944     return NULL_TREE;
2945   
2946   if (flags & LOOKUP_COMPLAIN)
2947     report_type_mismatch (cp, parms, "function");
2948
2949   return error_mark_node;
2950 }
2951
2952 /* This requires a complete type on the result of the call.  */
2953
2954 tree
2955 build_overload_call (fnname, parms, flags)
2956      tree fnname, parms;
2957      int flags;
2958 {
2959   return build_overload_call_real (fnname, parms, flags, (struct candidate *)0, 1);
2960 }
2961
2962 /* New overloading code.  */
2963
2964 struct z_candidate {
2965   tree fn;
2966   tree convs;
2967   tree second_conv;
2968   int viable;
2969   tree basetype_path;
2970   tree template;
2971   struct z_candidate *next;
2972 };
2973
2974 #define IDENTITY_RANK 0
2975 #define EXACT_RANK 1
2976 #define PROMO_RANK 2
2977 #define STD_RANK 3
2978 #define PBOOL_RANK 4
2979 #define USER_RANK 5
2980 #define ELLIPSIS_RANK 6
2981 #define BAD_RANK 7
2982
2983 #define ICS_RANK(NODE)                          \
2984   (ICS_BAD_FLAG (NODE) ? BAD_RANK   \
2985    : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK   \
2986    : ICS_USER_FLAG (NODE) ? USER_RANK           \
2987    : ICS_STD_RANK (NODE))
2988
2989 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
2990
2991 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
2992 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2993 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
2994 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
2995
2996 #define USER_CONV_FN(NODE) TREE_OPERAND (NODE, 1)
2997
2998 int
2999 null_ptr_cst_p (t)
3000      tree t;
3001 {
3002   if (t == null_node
3003       || integer_zerop (t) && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE)
3004     return 1;
3005   return 0;
3006 }
3007
3008 static tree
3009 build_conv (code, type, from)
3010      enum tree_code code;
3011      tree type, from;
3012 {
3013   tree t = build1 (code, type, from);
3014   int rank = ICS_STD_RANK (from);
3015   switch (code)
3016     {
3017     case PTR_CONV:
3018     case PMEM_CONV:
3019     case BASE_CONV:
3020     case STD_CONV:
3021       if (rank < STD_RANK)
3022         rank = STD_RANK;
3023       break;
3024
3025     case QUAL_CONV:
3026       if (rank < EXACT_RANK)
3027         rank = EXACT_RANK;
3028
3029     default:
3030       break;
3031     }
3032   ICS_STD_RANK (t) = rank;
3033   ICS_USER_FLAG (t) = ICS_USER_FLAG (from);
3034   ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
3035   return t;
3036 }
3037
3038 static tree
3039 non_reference (t)
3040      tree t;
3041 {
3042   if (TREE_CODE (t) == REFERENCE_TYPE)
3043     t = TREE_TYPE (t);
3044   return t;
3045 }
3046
3047 static tree
3048 strip_top_quals (t)
3049      tree t;
3050 {
3051   if (TREE_CODE (t) == ARRAY_TYPE)
3052     return t;
3053   return TYPE_MAIN_VARIANT (t);
3054 }
3055
3056 /* Returns the standard conversion path (see [conv]) from type FROM to type
3057    TO, if any.  For proper handling of null pointer constants, you must
3058    also pass the expression EXPR to convert from.  */
3059
3060 static tree
3061 standard_conversion (to, from, expr)
3062      tree to, from, expr;
3063 {
3064   enum tree_code fcode, tcode;
3065   tree conv;
3066   int fromref = 0;
3067
3068   if (TREE_CODE (to) == REFERENCE_TYPE)
3069     to = TREE_TYPE (to);
3070   if (TREE_CODE (from) == REFERENCE_TYPE)
3071     {
3072       fromref = 1;
3073       from = TREE_TYPE (from);
3074     }
3075   to = strip_top_quals (to);
3076   from = strip_top_quals (from);
3077
3078   fcode = TREE_CODE (from);
3079   tcode = TREE_CODE (to);
3080
3081   conv = build1 (IDENTITY_CONV, from, expr);
3082
3083   if (fcode == FUNCTION_TYPE)
3084     {
3085       from = build_pointer_type (from);
3086       fcode = TREE_CODE (from);
3087       conv = build_conv (LVALUE_CONV, from, conv);
3088     }
3089   else if (fcode == ARRAY_TYPE)
3090     {
3091       from = build_pointer_type (TREE_TYPE (from));
3092       fcode = TREE_CODE (from);
3093       conv = build_conv (LVALUE_CONV, from, conv);
3094     }
3095   else if (fromref || (expr && real_lvalue_p (expr)))
3096     conv = build_conv (RVALUE_CONV, from, conv);
3097
3098   if (from == to)
3099     return conv;
3100
3101   if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
3102       && expr && null_ptr_cst_p (expr))
3103     {
3104       conv = build_conv (STD_CONV, to, conv);
3105     }
3106   else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
3107     {
3108       enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
3109       enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
3110       tree nconv = NULL_TREE;
3111
3112       if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (from)),
3113                      TYPE_MAIN_VARIANT (TREE_TYPE (to)), 1))
3114         nconv = conv;
3115       else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
3116                && ufcode != FUNCTION_TYPE)
3117         {
3118           from = build_pointer_type
3119             (cp_build_type_variant (void_type_node,
3120                                     TYPE_READONLY (TREE_TYPE (from)),
3121                                     TYPE_VOLATILE (TREE_TYPE (from))));
3122           nconv = build_conv (PTR_CONV, from, conv);
3123         }
3124       else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
3125         {
3126           tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
3127           tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
3128
3129           if (DERIVED_FROM_P (fbase, tbase)
3130               && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (from))),
3131                              TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (to))),
3132                              1)))
3133             {
3134               from = build_offset_type (tbase, TREE_TYPE (TREE_TYPE (from)));
3135               from = build_pointer_type (from);
3136               nconv = build_conv (PMEM_CONV, from, conv);
3137             }
3138         }
3139       else if (IS_AGGR_TYPE (TREE_TYPE (from))
3140                && IS_AGGR_TYPE (TREE_TYPE (to)))
3141         {
3142           if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
3143             {
3144               from = cp_build_type_variant (TREE_TYPE (to),
3145                                             TYPE_READONLY (TREE_TYPE (from)),
3146                                             TYPE_VOLATILE (TREE_TYPE (from)));
3147               from = build_pointer_type (from);
3148               nconv = build_conv (PTR_CONV, from, conv);
3149             }
3150         }
3151
3152       if (nconv && comptypes (from, to, 1))
3153         conv = nconv;
3154       else if (nconv && comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
3155         conv = build_conv (QUAL_CONV, to, nconv);
3156       else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
3157         {
3158           conv = build_conv (PTR_CONV, to, conv);
3159           ICS_BAD_FLAG (conv) = 1;
3160         }
3161       else
3162         return 0;
3163
3164       from = to;
3165     }
3166   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
3167     {
3168       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
3169       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
3170       tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
3171       tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
3172
3173       if (! DERIVED_FROM_P (fbase, tbase)
3174           || ! comptypes (TREE_TYPE (fromfn), TREE_TYPE (tofn), 1)
3175           || ! compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
3176                           TREE_CHAIN (TYPE_ARG_TYPES (tofn)), 1)
3177           || TYPE_READONLY (fbase) != TYPE_READONLY (tbase)
3178           || TYPE_VOLATILE (fbase) != TYPE_VOLATILE (tbase))
3179         return 0;
3180
3181       from = cp_build_type_variant (tbase, TYPE_READONLY (fbase),
3182                                     TYPE_VOLATILE (fbase));
3183       from = build_cplus_method_type (from, TREE_TYPE (fromfn),
3184                                       TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
3185       from = build_ptrmemfunc_type (build_pointer_type (from));
3186       conv = build_conv (PMEM_CONV, from, conv);
3187     }
3188   else if (tcode == BOOLEAN_TYPE)
3189     {
3190       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
3191              || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
3192         return 0;
3193
3194       conv = build_conv (STD_CONV, to, conv);
3195       if (fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)
3196           && ICS_STD_RANK (conv) < PBOOL_RANK)
3197         ICS_STD_RANK (conv) = PBOOL_RANK;
3198     }
3199   /* We don't check for ENUMERAL_TYPE here because there are no standard
3200      conversions to enum type.  */
3201   else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
3202            || tcode == REAL_TYPE)
3203     {
3204       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
3205         return 0;
3206       conv = build_conv (STD_CONV, to, conv);
3207
3208       /* Give this a better rank if it's a promotion.  */
3209       if (to == type_promotes_to (from)
3210           && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
3211         ICS_STD_RANK (conv) = PROMO_RANK;
3212     }
3213   else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3214            && DERIVED_FROM_P (to, from))
3215     conv = build_conv (BASE_CONV, to, conv);
3216   else
3217     return 0;
3218
3219   return conv;
3220 }
3221
3222 /* Returns the conversion path from type FROM to reference type TO for
3223    purposes of reference binding.  For lvalue binding, either pass a
3224    reference type to FROM or an lvalue expression to EXPR.
3225
3226    Currently does not distinguish in the generated trees between binding to
3227    an lvalue and a temporary.  Should it?  */
3228
3229 static tree
3230 reference_binding (rto, rfrom, expr, flags)
3231      tree rto, rfrom, expr;
3232      int flags;
3233 {
3234   tree conv;
3235   int lvalue = 1;
3236   tree to = TREE_TYPE (rto);
3237   tree from = rfrom;
3238   int related;
3239
3240   if (TREE_CODE (from) == REFERENCE_TYPE)
3241     from = TREE_TYPE (from);
3242   else if (! expr || ! real_lvalue_p (expr))
3243     lvalue = 0;
3244
3245   related = (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from)
3246              || (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3247                  && DERIVED_FROM_P (to, from)));
3248
3249   if (lvalue && related
3250       && TYPE_READONLY (to) >= TYPE_READONLY (from)
3251       && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
3252     {
3253       conv = build1 (IDENTITY_CONV, from, expr);
3254
3255       if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
3256         conv = build_conv (REF_BIND, rto, conv);
3257       else
3258         {
3259           conv = build_conv (REF_BIND, rto, conv);
3260           ICS_STD_RANK (conv) = STD_RANK;
3261         }
3262     }
3263   else
3264     conv = NULL_TREE;
3265
3266   if (! conv)
3267     {
3268       conv = standard_conversion (to, rfrom, expr);
3269       if (conv)
3270         {
3271           conv = build_conv (REF_BIND, rto, conv);
3272
3273           /* Bind directly to a base subobject of a class rvalue.  Do it
3274              after building the conversion for proper handling of ICS_RANK.  */
3275           if (TREE_CODE (TREE_OPERAND (conv, 0)) == BASE_CONV)
3276             TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
3277         }
3278       if (conv
3279           && ((! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
3280                   && (flags & LOOKUP_NO_TEMP_BIND) == 0))
3281               /* If T1 is reference-related to T2, cv1 must be the same
3282                  cv-qualification as, or greater cv-qualification than,
3283                  cv2; otherwise, the program is ill-formed.  */
3284               || (related
3285                   && (TYPE_READONLY (to) < TYPE_READONLY (from)
3286                       || TYPE_VOLATILE (to) < TYPE_VOLATILE (from)))))
3287         ICS_BAD_FLAG (conv) = 1;
3288     }
3289
3290   return conv;
3291 }
3292
3293 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
3294    to type TO.  The optional expression EXPR may affect the conversion.
3295    FLAGS are the usual overloading flags.  Only LOOKUP_NO_CONVERSION is
3296    significant.  */
3297
3298 static tree
3299 implicit_conversion (to, from, expr, flags)
3300      tree to, from, expr;
3301      int flags;
3302 {
3303   tree conv;
3304   struct z_candidate *cand;
3305
3306   if (expr && type_unknown_p (expr))
3307     {
3308       expr = instantiate_type (to, expr, 0);
3309       if (expr == error_mark_node)
3310         return 0;
3311       from = TREE_TYPE (expr);
3312     }
3313
3314   if (TREE_CODE (to) == REFERENCE_TYPE)
3315     conv = reference_binding (to, from, expr, flags);
3316   else
3317     conv = standard_conversion (to, from, expr);
3318
3319   if (conv)
3320     ;
3321   else if (expr != NULL_TREE
3322            && (IS_AGGR_TYPE (non_reference (from))
3323             || IS_AGGR_TYPE (non_reference (to)))
3324            && (flags & LOOKUP_NO_CONVERSION) == 0)
3325     {
3326       cand = build_user_type_conversion_1
3327         (to, expr, LOOKUP_ONLYCONVERTING);
3328       if (cand)
3329         conv = cand->second_conv;
3330       if ((! conv || ICS_BAD_FLAG (conv))
3331           && TREE_CODE (to) == REFERENCE_TYPE
3332           && (flags & LOOKUP_NO_TEMP_BIND) == 0)
3333         {
3334           cand = build_user_type_conversion_1
3335             (TYPE_MAIN_VARIANT (TREE_TYPE (to)), expr, LOOKUP_ONLYCONVERTING);
3336           if (cand)
3337             {
3338               if (! TYPE_READONLY (TREE_TYPE (to))
3339                   || TYPE_VOLATILE (TREE_TYPE (to)))
3340                 ICS_BAD_FLAG (cand->second_conv) = 1;
3341               if (!conv || (ICS_BAD_FLAG (conv)
3342                             > ICS_BAD_FLAG (cand->second_conv)))
3343                 conv = build_conv (REF_BIND, to, cand->second_conv);
3344             }
3345         }
3346     }
3347
3348   return conv;
3349 }
3350
3351 /* Create an overload candidate for the function or method FN called with
3352    the argument list ARGLIST and add it to CANDIDATES.  FLAGS is passed on
3353    to implicit_conversion.  */
3354
3355 static struct z_candidate *
3356 add_function_candidate (candidates, fn, arglist, flags)
3357      struct z_candidate *candidates;
3358      tree fn, arglist;
3359      int flags;
3360 {
3361   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
3362   int i, len;
3363   tree convs;
3364   tree parmnode = parmlist;
3365   tree argnode = arglist;
3366   int viable = 1;
3367   struct z_candidate *cand;
3368
3369   /* The `this' and `in_chrg' arguments to constructors are not considered
3370      in overload resolution.  */
3371   if (DECL_CONSTRUCTOR_P (fn))
3372     {
3373       parmnode = TREE_CHAIN (parmnode);
3374       argnode = TREE_CHAIN (argnode);
3375       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
3376         {
3377           parmnode = TREE_CHAIN (parmnode);
3378           argnode = TREE_CHAIN (argnode);
3379         }
3380     }
3381
3382   len = list_length (argnode);
3383   convs = make_scratch_vec (len);
3384
3385   for (i = 0; i < len; ++i)
3386     {
3387       tree arg = TREE_VALUE (argnode);
3388       tree argtype = TREE_TYPE (arg);
3389       tree t;
3390
3391       argtype = cp_build_type_variant
3392         (argtype, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg));
3393
3394       if (parmnode == void_list_node)
3395         break;
3396       else if (parmnode)
3397         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3398       else
3399         {
3400           t = build1 (IDENTITY_CONV, argtype, arg);
3401           ICS_ELLIPSIS_FLAG (t) = 1;
3402         }
3403
3404       if (i == 0 && t && TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
3405           && ! DECL_CONSTRUCTOR_P (fn))
3406         ICS_THIS_FLAG (t) = 1;
3407
3408       TREE_VEC_ELT (convs, i) = t;
3409       if (! t)
3410         break;
3411
3412       if (ICS_BAD_FLAG (t))
3413         viable = -1;
3414
3415       if (parmnode)
3416         parmnode = TREE_CHAIN (parmnode);
3417       argnode = TREE_CHAIN (argnode);
3418     }
3419
3420   if (i < len)
3421     viable = 0;
3422
3423   /* Make sure there are default args for the rest of the parms.  */
3424   for (; parmnode && parmnode != void_list_node;
3425        parmnode = TREE_CHAIN (parmnode))
3426     if (! TREE_PURPOSE (parmnode))
3427       {
3428         viable = 0;
3429         break;
3430       }
3431
3432   cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3433
3434   cand->fn = fn;
3435   cand->convs = convs;
3436   cand->second_conv = NULL_TREE;
3437   cand->viable = viable;
3438   cand->basetype_path = NULL_TREE;
3439   cand->template = NULL_TREE;
3440   cand->next = candidates;
3441
3442   return cand;
3443 }
3444
3445 /* Create an overload candidate for the conversion function FN which will
3446    be invoked for expression OBJ, producing a pointer-to-function which
3447    will in turn be called with the argument list ARGLIST, and add it to
3448    CANDIDATES.  FLAGS is passed on to implicit_conversion.  */
3449
3450 static struct z_candidate *
3451 add_conv_candidate (candidates, fn, obj, arglist)
3452      struct z_candidate *candidates;
3453      tree fn, obj, arglist;
3454 {
3455   tree totype = TREE_TYPE (TREE_TYPE (fn));
3456   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
3457   int i, len = list_length (arglist) + 1;
3458   tree convs = make_scratch_vec (len);
3459   tree parmnode = parmlist;
3460   tree argnode = arglist;
3461   int viable = 1;
3462   struct z_candidate *cand;
3463   int flags = LOOKUP_NORMAL;
3464
3465   for (i = 0; i < len; ++i)
3466     {
3467       tree arg = i == 0 ? obj : TREE_VALUE (argnode);
3468       tree argtype = lvalue_type (arg);
3469       tree t;
3470
3471       if (i == 0)
3472         t = implicit_conversion (totype, argtype, arg, flags);
3473       else if (parmnode == void_list_node)
3474         break;
3475       else if (parmnode)
3476         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3477       else
3478         {
3479           t = build1 (IDENTITY_CONV, argtype, arg);
3480           ICS_ELLIPSIS_FLAG (t) = 1;
3481         }
3482
3483       TREE_VEC_ELT (convs, i) = t;
3484       if (! t)
3485         break;
3486
3487       if (ICS_BAD_FLAG (t))
3488         viable = -1;
3489
3490       if (i == 0)
3491         continue;
3492
3493       if (parmnode)
3494         parmnode = TREE_CHAIN (parmnode);
3495       argnode = TREE_CHAIN (argnode);
3496     }
3497
3498   if (i < len)
3499     viable = 0;
3500
3501   for (; parmnode && parmnode != void_list_node;
3502        parmnode = TREE_CHAIN (parmnode))
3503     if (! TREE_PURPOSE (parmnode))
3504       {
3505         viable = 0;
3506         break;
3507       }
3508
3509   cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3510
3511   cand->fn = fn;
3512   cand->convs = convs;
3513   cand->second_conv = NULL_TREE;
3514   cand->viable = viable;
3515   cand->basetype_path = NULL_TREE;
3516   cand->template = NULL_TREE;
3517   cand->next = candidates;
3518
3519   return cand;
3520 }
3521
3522 static struct z_candidate *
3523 build_builtin_candidate (candidates, fnname, type1, type2,
3524                          args, argtypes, flags)
3525      struct z_candidate *candidates;
3526      tree fnname, type1, type2, *args, *argtypes;
3527      int flags;
3528
3529 {
3530   tree t, convs;
3531   int viable = 1, i;
3532   struct z_candidate *cand;
3533   tree types[2];
3534
3535   types[0] = type1;
3536   types[1] = type2;
3537
3538   convs = make_scratch_vec (args[2] ? 3 : (args[1] ? 2 : 1));
3539
3540   for (i = 0; i < 2; ++i)
3541     {
3542       if (! args[i])
3543         break;
3544
3545       t = implicit_conversion (types[i], argtypes[i], args[i], flags);
3546       if (! t)
3547         {
3548           viable = 0;
3549           /* We need something for printing the candidate.  */
3550           t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
3551         }
3552       else if (ICS_BAD_FLAG (t))
3553         viable = 0;
3554       TREE_VEC_ELT (convs, i) = t;
3555     }
3556
3557   /* For COND_EXPR we rearranged the arguments; undo that now.  */
3558   if (args[2])
3559     {
3560       TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
3561       TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
3562       t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
3563       if (t)
3564         TREE_VEC_ELT (convs, 0) = t;
3565       else
3566         viable = 0;
3567     }      
3568
3569   cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3570
3571   cand->fn = fnname;
3572   cand->convs = convs;
3573   cand->second_conv = NULL_TREE;
3574   cand->viable = viable;
3575   cand->basetype_path = NULL_TREE;
3576   cand->template = NULL_TREE;
3577   cand->next = candidates;
3578
3579   return cand;
3580 }
3581
3582 static int
3583 is_complete (t)
3584      tree t;
3585 {
3586   return TYPE_SIZE (complete_type (t)) != NULL_TREE;
3587 }
3588
3589 /* Create any builtin operator overload candidates for the operator in
3590    question given the converted operand types TYPE1 and TYPE2.  The other
3591    args are passed through from add_builtin_candidates to
3592    build_builtin_candidate.  */
3593
3594 static struct z_candidate *
3595 add_builtin_candidate (candidates, code, code2, fnname, type1, type2,
3596                        args, argtypes, flags)
3597      struct z_candidate *candidates;
3598      enum tree_code code, code2;
3599      tree fnname, type1, type2, *args, *argtypes;
3600      int flags;
3601 {
3602   switch (code)
3603     {
3604     case POSTINCREMENT_EXPR:
3605     case POSTDECREMENT_EXPR:
3606       args[1] = integer_zero_node;
3607       type2 = integer_type_node;
3608       break;
3609     default:
3610       break;
3611     }
3612
3613   switch (code)
3614     {
3615
3616 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
3617      and  VQ  is  either  volatile or empty, there exist candidate operator
3618      functions of the form
3619              VQ T&   operator++(VQ T&);
3620              T       operator++(VQ T&, int);
3621    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
3622      type  other than bool, and VQ is either volatile or empty, there exist
3623      candidate operator functions of the form
3624              VQ T&   operator--(VQ T&);
3625              T       operator--(VQ T&, int);
3626    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
3627      complete  object type, and VQ is either volatile or empty, there exist
3628      candidate operator functions of the form
3629              T*VQ&   operator++(T*VQ&);
3630              T*VQ&   operator--(T*VQ&);
3631              T*      operator++(T*VQ&, int);
3632              T*      operator--(T*VQ&, int);  */
3633
3634     case POSTDECREMENT_EXPR:
3635     case PREDECREMENT_EXPR:
3636       if (TREE_CODE (type1) == BOOLEAN_TYPE)
3637         return candidates;
3638     case POSTINCREMENT_EXPR:
3639     case PREINCREMENT_EXPR:
3640       if ((ARITHMETIC_TYPE_P (type1) && TREE_CODE (type1) != ENUMERAL_TYPE)
3641           || TYPE_PTROB_P (type1))
3642         {
3643           type1 = build_reference_type (type1);
3644           break;
3645         }
3646       return candidates;
3647
3648 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
3649      exist candidate operator functions of the form
3650
3651              T&      operator*(T*);
3652
3653    8 For every function type T, there exist candidate operator functions of
3654      the form
3655              T&      operator*(T*);  */
3656
3657     case INDIRECT_REF:
3658       if (TREE_CODE (type1) == POINTER_TYPE
3659           && (TYPE_PTROB_P (type1)
3660               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
3661         break;
3662       return candidates;
3663
3664 /* 9 For every type T, there exist candidate operator functions of the form
3665              T*      operator+(T*);
3666
3667    10For  every  promoted arithmetic type T, there exist candidate operator
3668      functions of the form
3669              T       operator+(T);
3670              T       operator-(T);  */
3671
3672     case CONVERT_EXPR: /* unary + */
3673       if (TREE_CODE (type1) == POINTER_TYPE
3674           && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
3675         break;
3676     case NEGATE_EXPR:
3677       if (ARITHMETIC_TYPE_P (type1))
3678         break;
3679       return candidates;
3680
3681 /* 11For every promoted integral type T,  there  exist  candidate  operator
3682      functions of the form
3683              T       operator~(T);  */
3684
3685     case BIT_NOT_EXPR:
3686       if (INTEGRAL_TYPE_P (type1))
3687         break;
3688       return candidates;
3689
3690 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
3691      is the same type as C2 or is a derived class of C2, T  is  a  complete
3692      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3693      there exist candidate operator functions of the form
3694              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3695      where CV12 is the union of CV1 and CV2.  */
3696
3697     case MEMBER_REF:
3698       if (TREE_CODE (type1) == POINTER_TYPE
3699           && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
3700         {
3701           tree c1 = TREE_TYPE (type1);
3702           tree c2 = (TYPE_PTRMEMFUNC_P (type2)
3703                      ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
3704                      : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
3705
3706           if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
3707               && (TYPE_PTRMEMFUNC_P (type2)
3708                   || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
3709             break;
3710         }
3711       return candidates;
3712
3713 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
3714      didate operator functions of the form
3715              LR      operator*(L, R);
3716              LR      operator/(L, R);
3717              LR      operator+(L, R);
3718              LR      operator-(L, R);
3719              bool    operator<(L, R);
3720              bool    operator>(L, R);
3721              bool    operator<=(L, R);
3722              bool    operator>=(L, R);
3723              bool    operator==(L, R);
3724              bool    operator!=(L, R);
3725      where  LR  is  the  result of the usual arithmetic conversions between
3726      types L and R.
3727
3728    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
3729      unqualified  complete  object  type and I is a promoted integral type,
3730      there exist candidate operator functions of the form
3731              T*      operator+(T*, I);
3732              T&      operator[](T*, I);
3733              T*      operator-(T*, I);
3734              T*      operator+(I, T*);
3735              T&      operator[](I, T*);
3736
3737    15For every T, where T is a pointer to complete object type, there exist
3738      candidate operator functions of the form112)
3739              ptrdiff_t operator-(T, T);
3740
3741    16For  every pointer type T, there exist candidate operator functions of
3742      the form
3743              bool    operator<(T, T);
3744              bool    operator>(T, T);
3745              bool    operator<=(T, T);
3746              bool    operator>=(T, T);
3747              bool    operator==(T, T);
3748              bool    operator!=(T, T);
3749
3750    17For every pointer to member type T,  there  exist  candidate  operator
3751      functions of the form
3752              bool    operator==(T, T);
3753              bool    operator!=(T, T);  */
3754
3755     case MINUS_EXPR:
3756       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
3757         break;
3758       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3759         {
3760           type2 = ptrdiff_type_node;
3761           break;
3762         }
3763     case MULT_EXPR:
3764     case TRUNC_DIV_EXPR:
3765       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3766         break;
3767       return candidates;
3768
3769     case EQ_EXPR:
3770     case NE_EXPR:
3771       if (TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2)
3772           || TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3773         break;
3774       if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
3775           && null_ptr_cst_p (args[1]))
3776         {
3777           type2 = type1;
3778           break;
3779         }
3780       if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
3781           && null_ptr_cst_p (args[0]))
3782         {
3783           type1 = type2;
3784           break;
3785         }
3786     case LT_EXPR:
3787     case GT_EXPR:
3788     case LE_EXPR:
3789     case GE_EXPR:
3790     case MAX_EXPR:
3791     case MIN_EXPR:
3792       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2)
3793           || TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3794         break;
3795       if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
3796         {
3797           type2 = type1;
3798           break;
3799         }
3800       if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
3801         {
3802           type1 = type2;
3803           break;
3804         }
3805       return candidates;
3806
3807     case PLUS_EXPR:
3808       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3809         break;
3810     case ARRAY_REF:
3811       if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
3812         {
3813           type1 = ptrdiff_type_node;
3814           break;
3815         }
3816       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3817         {
3818           type2 = ptrdiff_type_node;
3819           break;
3820         }
3821       return candidates;
3822
3823 /* 18For  every pair of promoted integral types L and R, there exist candi-
3824      date operator functions of the form
3825              LR      operator%(L, R);
3826              LR      operator&(L, R);
3827              LR      operator^(L, R);
3828              LR      operator|(L, R);
3829              L       operator<<(L, R);
3830              L       operator>>(L, R);
3831      where LR is the result of the  usual  arithmetic  conversions  between
3832      types L and R.  */
3833
3834     case TRUNC_MOD_EXPR:
3835     case BIT_AND_EXPR:
3836     case BIT_IOR_EXPR:
3837     case BIT_XOR_EXPR:
3838     case LSHIFT_EXPR:
3839     case RSHIFT_EXPR:
3840       if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3841         break;
3842       return candidates;
3843
3844 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
3845      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
3846      type, there exist candidate operator functions of the form
3847              VQ L&   operator=(VQ L&, R);
3848              VQ L&   operator*=(VQ L&, R);
3849              VQ L&   operator/=(VQ L&, R);
3850              VQ L&   operator+=(VQ L&, R);
3851              VQ L&   operator-=(VQ L&, R);
3852
3853    20For  every  pair T, VQ), where T is any type and VQ is either volatile
3854      or empty, there exist candidate operator functions of the form
3855              T*VQ&   operator=(T*VQ&, T*);
3856
3857    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
3858      either  volatile or empty, there exist candidate operator functions of
3859      the form
3860              VQ T&   operator=(VQ T&, T);
3861
3862    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
3863      unqualified  complete object type, VQ is either volatile or empty, and
3864      I is a promoted integral type, there exist  candidate  operator  func-
3865      tions of the form
3866              T*VQ&   operator+=(T*VQ&, I);
3867              T*VQ&   operator-=(T*VQ&, I);
3868
3869    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
3870      type, VQ is either volatile or empty, and R  is  a  promoted  integral
3871      type, there exist candidate operator functions of the form
3872
3873              VQ L&   operator%=(VQ L&, R);
3874              VQ L&   operator<<=(VQ L&, R);
3875              VQ L&   operator>>=(VQ L&, R);
3876              VQ L&   operator&=(VQ L&, R);
3877              VQ L&   operator^=(VQ L&, R);
3878              VQ L&   operator|=(VQ L&, R);  */
3879
3880     case MODIFY_EXPR:
3881       switch (code2)
3882         {
3883         case PLUS_EXPR:
3884         case MINUS_EXPR:
3885           if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3886             {
3887               type2 = ptrdiff_type_node;
3888               break;
3889             }
3890         case MULT_EXPR:
3891         case TRUNC_DIV_EXPR:
3892           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3893             break;
3894           return candidates;
3895
3896         case TRUNC_MOD_EXPR:
3897         case BIT_AND_EXPR:
3898         case BIT_IOR_EXPR:
3899         case BIT_XOR_EXPR:
3900         case LSHIFT_EXPR:
3901         case RSHIFT_EXPR:
3902           if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3903             break;
3904           return candidates;
3905
3906         case NOP_EXPR:
3907           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3908             break;
3909           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
3910               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3911               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3912               || ((TYPE_PTRMEMFUNC_P (type1)
3913                    || TREE_CODE (type1) == POINTER_TYPE)
3914                   && null_ptr_cst_p (args[1])))
3915             {
3916               type2 = type1;
3917               break;
3918             }
3919           return candidates;
3920
3921         default:
3922           my_friendly_abort (367);
3923         }
3924       type1 = build_reference_type (type1);
3925       break;
3926
3927     case COND_EXPR:
3928       /* Kludge around broken overloading rules whereby
3929          bool ? const char& : enum is ambiguous
3930          (between int and const char&).  */
3931       flags |= LOOKUP_NO_TEMP_BIND;
3932
3933       /* Extension: Support ?: of enumeral type.  Hopefully this will not
3934          be an extension for long.  */
3935       if (TREE_CODE (type1) == ENUMERAL_TYPE && type1 == type2)
3936         break;
3937       else if (TREE_CODE (type1) == ENUMERAL_TYPE
3938                || TREE_CODE (type2) == ENUMERAL_TYPE)
3939         return candidates;
3940       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3941         break;
3942       if (TREE_CODE (type1) == TREE_CODE (type2)
3943           && (TREE_CODE (type1) == REFERENCE_TYPE
3944               || TREE_CODE (type1) == POINTER_TYPE
3945               || TYPE_PTRMEMFUNC_P (type1)
3946               || IS_AGGR_TYPE (type1)))
3947         break;
3948       if (TREE_CODE (type1) == REFERENCE_TYPE
3949           || TREE_CODE (type2) == REFERENCE_TYPE)
3950         return candidates;
3951       if (((TYPE_PTRMEMFUNC_P (type1) || TREE_CODE (type1) == POINTER_TYPE)
3952            && null_ptr_cst_p (args[1]))
3953           || IS_AGGR_TYPE (type1))
3954         {
3955           type2 = type1;
3956           break;
3957         }
3958       if (((TYPE_PTRMEMFUNC_P (type2) || TREE_CODE (type2) == POINTER_TYPE)
3959            && null_ptr_cst_p (args[0]))
3960           || IS_AGGR_TYPE (type2))
3961         {
3962           type1 = type2;
3963           break;
3964         }
3965       return candidates;
3966
3967     default:
3968       my_friendly_abort (367);
3969     }
3970
3971   /* If we're dealing with two pointer types, we need candidates
3972      for both of them.  */
3973   if (type2 && type1 != type2
3974       && TREE_CODE (type1) == TREE_CODE (type2)
3975       && (TREE_CODE (type1) == REFERENCE_TYPE
3976           || (TREE_CODE (type1) == POINTER_TYPE
3977               && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
3978           || TYPE_PTRMEMFUNC_P (type1)
3979           || IS_AGGR_TYPE (type1)))
3980     {
3981       candidates = build_builtin_candidate
3982         (candidates, fnname, type1, type1, args, argtypes, flags);
3983       return build_builtin_candidate
3984         (candidates, fnname, type2, type2, args, argtypes, flags);
3985     }
3986
3987   return build_builtin_candidate
3988     (candidates, fnname, type1, type2, args, argtypes, flags);
3989 }
3990
3991 tree
3992 type_decays_to (type)
3993      tree type;
3994 {
3995   if (TREE_CODE (type) == ARRAY_TYPE)
3996     return build_pointer_type (TREE_TYPE (type));
3997   if (TREE_CODE (type) == FUNCTION_TYPE)
3998     return build_pointer_type (type);
3999   return type;
4000 }
4001
4002 /* There are three conditions of builtin candidates:
4003
4004    1) bool-taking candidates.  These are the same regardless of the input.
4005    2) pointer-pair taking candidates.  These are generated for each type
4006       one of the input types converts to.
4007    3) arithmetic candidates.  According to the WP, we should generate
4008       all of these, but I'm trying not to... */
4009
4010 static struct z_candidate *
4011 add_builtin_candidates (candidates, code, code2, fnname, args, flags)
4012      struct z_candidate *candidates;
4013      enum tree_code code, code2;
4014      tree fnname, *args;
4015      int flags;
4016 {
4017   int ref1, i;
4018   tree type, argtypes[3], types[2];
4019
4020   for (i = 0; i < 3; ++i)
4021     {
4022       if (args[i])
4023         argtypes[i]  = lvalue_type (args[i]);
4024       else
4025         argtypes[i] = NULL_TREE;
4026     }
4027
4028   switch (code)
4029     {
4030 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
4031      and  VQ  is  either  volatile or empty, there exist candidate operator
4032      functions of the form
4033                  VQ T&   operator++(VQ T&);  */
4034
4035     case POSTINCREMENT_EXPR:
4036     case PREINCREMENT_EXPR:
4037     case POSTDECREMENT_EXPR:
4038     case PREDECREMENT_EXPR:
4039     case MODIFY_EXPR:
4040       ref1 = 1;
4041       break;
4042
4043 /* 24There also exist candidate operator functions of the form
4044              bool    operator!(bool);
4045              bool    operator&&(bool, bool);
4046              bool    operator||(bool, bool);  */
4047
4048     case TRUTH_NOT_EXPR:
4049       return build_builtin_candidate
4050         (candidates, fnname, boolean_type_node,
4051          NULL_TREE, args, argtypes, flags);
4052
4053     case TRUTH_ORIF_EXPR:
4054     case TRUTH_ANDIF_EXPR:
4055       return build_builtin_candidate
4056         (candidates, fnname, boolean_type_node,
4057          boolean_type_node, args, argtypes, flags);
4058
4059     case ADDR_EXPR:
4060     case COMPOUND_EXPR:
4061     case COMPONENT_REF:
4062       return candidates;
4063
4064     default:
4065       ref1 = 0;
4066     }
4067
4068   types[0] = types[1] = NULL_TREE;
4069
4070   for (i = 0; i < 2; ++i)
4071     {
4072       if (! args[i])
4073         ;
4074       else if (IS_AGGR_TYPE (argtypes[i]))
4075         {
4076           tree convs = lookup_conversions (argtypes[i]);
4077
4078           if (code == COND_EXPR)
4079             {
4080               if (real_lvalue_p (args[i]))
4081                 types[i] = scratch_tree_cons
4082                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4083
4084               types[i] = scratch_tree_cons
4085                 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
4086             }
4087                 
4088           else if (! convs || (i == 0 && code == MODIFY_EXPR
4089                                && code2 == NOP_EXPR))
4090             return candidates;
4091
4092           for (; convs; convs = TREE_CHAIN (convs))
4093             {
4094               type = TREE_TYPE (TREE_TYPE (TREE_VALUE (convs)));
4095
4096               if (i == 0 && ref1
4097                   && (TREE_CODE (type) != REFERENCE_TYPE
4098                       || TYPE_READONLY (TREE_TYPE (type))))
4099                 continue;
4100
4101               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
4102                 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4103
4104               type = non_reference (type);
4105               if (i != 0 || ! ref1)
4106                 {
4107                   type = TYPE_MAIN_VARIANT (type_decays_to (type));
4108                   if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4109                     types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4110                   if (INTEGRAL_TYPE_P (type))
4111                     type = type_promotes_to (type);
4112                 }
4113
4114               if (! value_member (type, types[i]))
4115                 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4116             }
4117         }
4118       else
4119         {
4120           if (code == COND_EXPR && real_lvalue_p (args[i]))
4121             types[i] = scratch_tree_cons
4122               (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4123           type = non_reference (argtypes[i]);
4124           if (i != 0 || ! ref1)
4125             {
4126               type = TYPE_MAIN_VARIANT (type_decays_to (type));
4127               if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4128                 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4129               if (INTEGRAL_TYPE_P (type))
4130                 type = type_promotes_to (type);
4131             }
4132           types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4133         }
4134     }
4135
4136   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
4137     {
4138       if (types[1])
4139         for (type = types[1]; type; type = TREE_CHAIN (type))
4140           candidates = add_builtin_candidate
4141             (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4142              TREE_VALUE (type), args, argtypes, flags);
4143       else
4144         candidates = add_builtin_candidate
4145           (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4146            NULL_TREE, args, argtypes, flags);
4147     }
4148
4149   return candidates;
4150 }
4151
4152 /* If TMPL can be successfully instantiated as indicated by
4153    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
4154
4155    TMPL is the template.  EXPLICIT_TARGS are any explicit template arguments.
4156    ARGLIST is the arguments provided at the call-site.  The RETURN_TYPE
4157    is the desired type for conversion operators.  FLAGS are as for
4158    add_function_candidate.  */
4159
4160 static struct z_candidate *
4161 add_template_candidate (candidates, tmpl, explicit_targs, 
4162                         arglist, return_type, flags)
4163      struct z_candidate *candidates;
4164      tree tmpl, explicit_targs, arglist, return_type;
4165      int flags;
4166 {
4167   int ntparms = DECL_NTPARMS (tmpl);
4168   tree targs = make_scratch_vec (ntparms);
4169   struct z_candidate *cand;
4170   int i;
4171   tree fn;
4172
4173   i = fn_type_unification (tmpl, explicit_targs, targs, arglist,
4174                            return_type, 0); 
4175
4176   if (i != 0)
4177     return candidates;
4178
4179   fn = instantiate_template (tmpl, targs);
4180   if (fn == error_mark_node)
4181     return candidates;
4182
4183   cand = add_function_candidate (candidates, fn, arglist, flags);
4184   cand->template = DECL_TEMPLATE_INFO (fn);
4185   return cand;
4186 }
4187
4188
4189 static struct z_candidate *
4190 add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type)
4191      struct z_candidate *candidates;
4192      tree tmpl, obj, arglist, return_type;
4193 {
4194   int ntparms = DECL_NTPARMS (tmpl);
4195   tree targs = make_scratch_vec (ntparms);
4196   struct z_candidate *cand;
4197   int i;
4198   tree fn;
4199
4200   i = fn_type_unification (tmpl, NULL_TREE, targs, arglist, return_type, 0);
4201
4202   if (i != 0)
4203     return candidates;
4204
4205   fn = instantiate_template (tmpl, targs);
4206   if (fn == error_mark_node)
4207     return candidates;
4208
4209   cand = add_conv_candidate (candidates, fn, obj, arglist);
4210   cand->template = DECL_TEMPLATE_INFO (fn);
4211   return cand;
4212 }
4213
4214
4215 static int
4216 any_viable (cands)
4217      struct z_candidate *cands;
4218 {
4219   for (; cands; cands = cands->next)
4220     if (pedantic ? cands->viable == 1 : cands->viable)
4221       return 1;
4222   return 0;
4223 }
4224
4225 static struct z_candidate *
4226 splice_viable (cands)
4227      struct z_candidate *cands;
4228 {
4229   struct z_candidate **p = &cands;
4230
4231   for (; *p; )
4232     {
4233       if (pedantic ? (*p)->viable == 1 : (*p)->viable)
4234         p = &((*p)->next);
4235       else
4236         *p = (*p)->next;
4237     }
4238
4239   return cands;
4240 }
4241
4242 static tree
4243 build_this (obj)
4244      tree obj;
4245 {
4246   /* Fix this to work on non-lvalues.  */
4247   if (IS_SIGNATURE_POINTER (TREE_TYPE (obj))
4248       || IS_SIGNATURE_REFERENCE (TREE_TYPE (obj)))
4249     return obj;
4250   else
4251     return build_unary_op (ADDR_EXPR, obj, 0);
4252 }
4253
4254 static void
4255 print_z_candidates (candidates)
4256      struct z_candidate *candidates;
4257 {
4258   char *str = "candidates are:";
4259   for (; candidates; candidates = candidates->next)
4260     {
4261       if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
4262         {
4263           if (candidates->fn == ansi_opname [COND_EXPR])
4264             cp_error ("%s %D(%T, %T, %T) <builtin>", str, candidates->fn,
4265                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4266                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
4267                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
4268           else if (TREE_VEC_LENGTH (candidates->convs) == 2)
4269             cp_error ("%s %D(%T, %T) <builtin>", str, candidates->fn,
4270                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4271                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
4272           else
4273             cp_error ("%s %D(%T) <builtin>", str, candidates->fn,
4274                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
4275         }
4276       else
4277         cp_error_at ("%s %+D%s", str, candidates->fn,
4278                      candidates->viable == -1 ? " <near match>" : "");
4279       str = "               "; 
4280     }
4281 }
4282
4283 /* Returns the best overload candidate to perform the requested
4284    conversion.  This function is used for three the overloading situations
4285    described in [over.match.copy], [over.match.conv], and [over.match.ref].
4286    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
4287    per [dcl.init.ref], so we ignore temporary bindings.  */
4288
4289 static struct z_candidate *
4290 build_user_type_conversion_1 (totype, expr, flags)
4291      tree totype, expr;
4292      int flags;
4293 {
4294   struct z_candidate *candidates, *cand;
4295   tree fromtype = TREE_TYPE (expr);
4296   tree ctors = NULL_TREE, convs = NULL_TREE, *p;
4297   tree args;
4298   tree templates = NULL_TREE;
4299
4300   if (IS_AGGR_TYPE (totype))
4301     ctors = lookup_fnfields (TYPE_BINFO (totype), ctor_identifier, 0);
4302   if (IS_AGGR_TYPE (fromtype)
4303       && (! IS_AGGR_TYPE (totype) || ! DERIVED_FROM_P (totype, fromtype)))
4304     convs = lookup_conversions (fromtype);
4305
4306   candidates = 0;
4307   flags |= LOOKUP_NO_CONVERSION;
4308
4309   if (ctors)
4310     {
4311       tree t = build_int_2 (0, 0);
4312       TREE_TYPE (t) = build_pointer_type (totype);
4313       args = build_scratch_list (NULL_TREE, expr);
4314       if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
4315         args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
4316       args = scratch_tree_cons (NULL_TREE, t, args);
4317
4318       ctors = TREE_VALUE (ctors);
4319     }
4320   for (; ctors; ctors = DECL_CHAIN (ctors))
4321     {
4322       if (DECL_NONCONVERTING_P (ctors))
4323         continue;
4324
4325       if (TREE_CODE (ctors) == TEMPLATE_DECL) 
4326         {
4327           templates = scratch_tree_cons (NULL_TREE, ctors, templates);
4328           candidates = 
4329             add_template_candidate (candidates, ctors,
4330                                     NULL_TREE, args, NULL_TREE, flags);
4331         } 
4332       else 
4333         candidates = add_function_candidate (candidates, ctors,
4334                                              args, flags); 
4335
4336       if (candidates) 
4337         {
4338           candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
4339           candidates->basetype_path = TYPE_BINFO (totype);
4340         } 
4341     }
4342
4343   if (convs)
4344     args = build_scratch_list (NULL_TREE, build_this (expr));
4345
4346   for (; convs; convs = TREE_CHAIN (convs))
4347     {
4348       tree fn = TREE_VALUE (convs);
4349       int convflags = LOOKUP_NO_CONVERSION;
4350       tree ics;
4351
4352       /* If we are called to convert to a reference type, we are trying to
4353          find an lvalue binding, so don't even consider temporaries.  If
4354          we don't find an lvalue binding, the caller will try again to
4355          look for a temporary binding.  */
4356       if (TREE_CODE (totype) == REFERENCE_TYPE)
4357         convflags |= LOOKUP_NO_TEMP_BIND;
4358
4359       if (TREE_CODE (fn) != TEMPLATE_DECL)
4360         ics = implicit_conversion
4361           (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
4362       else
4363         ics = implicit_conversion (totype, totype, 0, convflags);
4364
4365       if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
4366         /* ignore the near match.  */;
4367       else if (ics)
4368         for (; fn; fn = DECL_CHAIN (fn))
4369           {
4370             if (TREE_CODE (fn) == TEMPLATE_DECL)
4371               {
4372                 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4373                 candidates = 
4374                   add_template_candidate (candidates, fn, NULL_TREE,
4375                                           args, totype, flags);
4376               } 
4377             else 
4378               candidates = add_function_candidate (candidates, fn,
4379                                                    args, flags); 
4380
4381             if (candidates) 
4382               {
4383                 candidates->second_conv = ics;
4384                 candidates->basetype_path = TREE_PURPOSE (convs);
4385                 if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
4386                   candidates->viable = -1;
4387               }
4388           }
4389     }
4390
4391   if (! any_viable (candidates))
4392     {
4393 #if 0
4394       if (flags & LOOKUP_COMPLAIN)
4395         {
4396           if (candidates && ! candidates->next)
4397             /* say why this one won't work or try to be loose */;
4398           else
4399             cp_error ("no viable candidates");
4400         }
4401 #endif
4402
4403       return 0;
4404     }
4405
4406   candidates = splice_viable (candidates);
4407   cand = tourney (candidates);
4408
4409   if (cand == 0)
4410     {
4411       if (flags & LOOKUP_COMPLAIN)
4412         {
4413           cp_error ("conversion from `%T' to `%T' is ambiguous",
4414                     fromtype, totype);
4415           print_z_candidates (candidates);
4416         }
4417
4418       cand = candidates;        /* any one will do */
4419       cand->second_conv = build1 (AMBIG_CONV, totype, expr);
4420       ICS_USER_FLAG (cand->second_conv) = 1;
4421       ICS_BAD_FLAG (cand->second_conv) = 1;
4422
4423       return cand;
4424     }
4425
4426   for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
4427     p = &(TREE_OPERAND (*p, 0));
4428
4429   /* Pedantically, normal function declarations are never considered
4430      to refer to template instantiations, so we only do this with
4431      -fguiding-decls.  */ 
4432   if (flag_guiding_decls && templates && ! cand->template 
4433       && !DECL_INITIAL (cand->fn) 
4434       && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4435     add_maybe_template (cand->fn, templates);
4436
4437   *p = build
4438     (USER_CONV,
4439      (DECL_CONSTRUCTOR_P (cand->fn)
4440       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
4441      expr, cand->fn, cand->convs, cand->basetype_path);
4442   ICS_USER_FLAG (cand->second_conv) = 1;
4443   if (cand->viable == -1)
4444     ICS_BAD_FLAG (cand->second_conv) = 1;
4445
4446   return cand;
4447 }
4448
4449 tree
4450 build_user_type_conversion (totype, expr, flags)
4451      tree totype, expr;
4452      int flags;
4453 {
4454   struct z_candidate *cand
4455     = build_user_type_conversion_1 (totype, expr, flags);
4456
4457   if (cand)
4458     {
4459       if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
4460         return error_mark_node;
4461       return convert_from_reference (convert_like (cand->second_conv, expr));
4462     }
4463   return NULL_TREE;
4464 }
4465
4466 /* Do any initial processing on the arguments to a function call.  */
4467
4468 static tree
4469 resolve_args (args)
4470      tree args;
4471 {
4472   tree t;
4473   for (t = args; t; t = TREE_CHAIN (t))
4474     {
4475       if (TREE_VALUE (t) == error_mark_node)
4476         return error_mark_node;
4477       else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
4478         {
4479           error ("invalid use of void expression");
4480           return error_mark_node;
4481         }
4482       else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
4483         TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
4484     }
4485   return args;
4486 }
4487       
4488 tree
4489 build_new_function_call (fn, args)
4490      tree fn, args;
4491 {
4492   struct z_candidate *candidates = 0, *cand;
4493   tree explicit_targs = NULL_TREE;
4494   int template_only = 0;
4495
4496   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4497     {
4498       explicit_targs = TREE_OPERAND (fn, 1);
4499       fn = TREE_OPERAND (fn, 0);
4500       template_only = 1;
4501     }
4502
4503   if (really_overloaded_fn (fn))
4504     {
4505       tree t;
4506       tree templates = NULL_TREE;
4507
4508       args = resolve_args (args);
4509
4510       if (args == error_mark_node)
4511         return error_mark_node;
4512
4513       for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
4514         {
4515           if (TREE_CODE (t) == TEMPLATE_DECL)
4516             {
4517               templates = scratch_tree_cons (NULL_TREE, t, templates);
4518               candidates = add_template_candidate
4519                 (candidates, t, explicit_targs, args, NULL_TREE,
4520                  LOOKUP_NORMAL);  
4521             }
4522           else if (! template_only)
4523             candidates = add_function_candidate
4524               (candidates, t, args, LOOKUP_NORMAL);
4525         }
4526
4527       if (! any_viable (candidates))
4528         {
4529           if (candidates && ! candidates->next)
4530             return build_function_call (candidates->fn, args);
4531           cp_error ("no matching function for call to `%D (%A)'",
4532                     TREE_PURPOSE (fn), args);
4533           if (candidates)
4534             print_z_candidates (candidates);
4535           return error_mark_node;
4536         }
4537       candidates = splice_viable (candidates);
4538       cand = tourney (candidates);
4539
4540       if (cand == 0)
4541         {
4542           cp_error ("call of overloaded `%D (%A)' is ambiguous",
4543                     TREE_PURPOSE (fn), args);
4544           print_z_candidates (candidates);
4545           return error_mark_node;
4546         }
4547
4548       /* Pedantically, normal function declarations are never considered
4549          to refer to template instantiations, so we only do this with
4550          -fguiding-decls.  */
4551       if (flag_guiding_decls && templates && ! cand->template 
4552           && ! DECL_INITIAL (cand->fn))
4553         add_maybe_template (cand->fn, templates);
4554
4555       return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
4556     }
4557
4558   return build_function_call (fn, args);
4559 }
4560
4561 static tree
4562 build_object_call (obj, args)
4563      tree obj, args;
4564 {
4565   struct z_candidate *candidates = 0, *cand;
4566   tree fns, convs, mem_args;
4567   tree type = TREE_TYPE (obj);
4568   tree templates = NULL_TREE;
4569
4570   fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
4571
4572   args = resolve_args (args);
4573
4574   if (args == error_mark_node)
4575     return error_mark_node;
4576
4577   if (fns)
4578     {
4579       tree fn = TREE_VALUE (fns);
4580       mem_args = scratch_tree_cons (NULL_TREE, build_this (obj), args);
4581
4582       for (; fn; fn = DECL_CHAIN (fn))
4583         {
4584           if (TREE_CODE (fn) == TEMPLATE_DECL)
4585             {
4586               templates = scratch_tree_cons (NULL_TREE, fn, templates);
4587               candidates 
4588                 = add_template_candidate (candidates, fn, NULL_TREE,
4589                                           mem_args, NULL_TREE, 
4590                                           LOOKUP_NORMAL);
4591             }
4592           else
4593             candidates = add_function_candidate
4594               (candidates, fn, mem_args, LOOKUP_NORMAL);
4595
4596           if (candidates)
4597             candidates->basetype_path = TREE_PURPOSE (fns);
4598         }
4599     }
4600
4601   convs = lookup_conversions (type);
4602
4603   for (; convs; convs = TREE_CHAIN (convs))
4604     {
4605       tree fn = TREE_VALUE (convs);
4606       tree totype = TREE_TYPE (TREE_TYPE (fn));
4607
4608       if (TREE_CODE (totype) == POINTER_TYPE
4609           && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4610         for (; fn; fn = DECL_CHAIN (fn))
4611           {
4612             if (TREE_CODE (fn) == TEMPLATE_DECL) 
4613               {
4614                 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4615                 candidates = add_template_conv_candidate (candidates,
4616                                                           fn,
4617                                                           obj,
4618                                                           args,
4619                                                           totype);
4620               }
4621             else
4622               candidates = add_conv_candidate (candidates, fn, obj, args);
4623
4624             if (candidates)
4625               candidates->basetype_path = TREE_PURPOSE (convs);
4626           }
4627     }
4628
4629   if (! any_viable (candidates))
4630     {
4631       cp_error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
4632       print_z_candidates (candidates);
4633       return error_mark_node;
4634     }
4635
4636   candidates = splice_viable (candidates);
4637   cand = tourney (candidates);
4638
4639   if (cand == 0)
4640     {
4641       cp_error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
4642       print_z_candidates (candidates);
4643       return error_mark_node;
4644     }
4645
4646   if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
4647     return build_over_call (cand->fn, cand->convs, mem_args, LOOKUP_NORMAL);
4648
4649   obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
4650
4651   /* FIXME */
4652   return build_function_call (obj, args);
4653 }
4654
4655 static void
4656 op_error (code, code2, arg1, arg2, arg3, problem)
4657      enum tree_code code, code2;
4658      tree arg1, arg2, arg3;
4659      char *problem;
4660 {
4661   char * opname
4662     = (code == MODIFY_EXPR ? assignop_tab [code2] : opname_tab [code]);
4663
4664   switch (code)
4665     {
4666     case COND_EXPR:
4667       cp_error ("%s for `%T ? %T : %T'", problem,
4668                 error_type (arg1), error_type (arg2), error_type (arg3));
4669       break;
4670     case POSTINCREMENT_EXPR:
4671     case POSTDECREMENT_EXPR:
4672       cp_error ("%s for `%T%s'", problem, error_type (arg1), opname);
4673       break;
4674     case ARRAY_REF:
4675       cp_error ("%s for `%T[%T]'", problem,
4676                 error_type (arg1), error_type (arg2));
4677       break;
4678     default:
4679       if (arg2)
4680         cp_error ("%s for `%T %s %T'", problem,
4681                   error_type (arg1), opname, error_type (arg2));
4682       else
4683         cp_error ("%s for `%s%T'", problem, opname, error_type (arg1));
4684     }
4685 }
4686
4687 tree
4688 build_new_op (code, flags, arg1, arg2, arg3)
4689      enum tree_code code;
4690      int flags;
4691      tree arg1, arg2, arg3;
4692 {
4693   struct z_candidate *candidates = 0, *cand;
4694   tree fns, mem_arglist, arglist, fnname;
4695   enum tree_code code2 = NOP_EXPR;
4696   tree templates = NULL_TREE;
4697   tree conv;
4698
4699   if (arg1 == error_mark_node
4700       || arg2 == error_mark_node
4701       || arg3 == error_mark_node)
4702     return error_mark_node;
4703
4704   /* This can happen if a template takes all non-type parameters, e.g.
4705      undeclared_template<1, 5, 72>a;  */
4706   if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
4707     {
4708       cp_error ("`%D' must be declared before use", arg1);
4709       return error_mark_node;
4710     }
4711
4712   if (code == MODIFY_EXPR)
4713     {
4714       code2 = TREE_CODE (arg3);
4715       arg3 = NULL_TREE;
4716       fnname = ansi_assopname[code2];
4717     }
4718   else
4719     fnname = ansi_opname[code];
4720
4721   switch (code)
4722     {
4723     case NEW_EXPR:
4724     case VEC_NEW_EXPR:
4725       {
4726         tree rval;
4727
4728         arglist = scratch_tree_cons (NULL_TREE, arg2, arg3);
4729         if (flags & LOOKUP_GLOBAL)
4730           return build_new_function_call
4731             (lookup_name_nonclass (fnname), arglist);
4732
4733         /* FIXME */
4734         rval = build_method_call
4735           (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node),
4736                                "new"),
4737            fnname, arglist, NULL_TREE, flags);
4738         if (rval == error_mark_node)
4739           /* User might declare fancy operator new, but invoke it
4740              like standard one.  */
4741           return rval;
4742
4743         TREE_TYPE (rval) = arg1;
4744         return rval;
4745       }
4746
4747     case VEC_DELETE_EXPR:
4748     case DELETE_EXPR:
4749       {
4750         tree rval;
4751
4752         if (flags & LOOKUP_GLOBAL)
4753           return build_new_function_call
4754             (lookup_name_nonclass (fnname),
4755              build_scratch_list (NULL_TREE, arg1));
4756
4757         arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4758
4759         arg1 = TREE_TYPE (arg1);
4760
4761         /* This handles the case where we're trying to delete
4762            X (*a)[10];
4763            a=new X[5][10];
4764            delete[] a; */
4765            
4766         if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
4767           {
4768             /* Strip off the pointer and the array.  */
4769             arg1 = TREE_TYPE (TREE_TYPE (arg1));
4770
4771             while (TREE_CODE (arg1) == ARRAY_TYPE)
4772                 arg1 = (TREE_TYPE (arg1));
4773
4774             arg1 = build_pointer_type (arg1);
4775           }
4776
4777         /* FIXME */
4778         rval = build_method_call
4779           (build_indirect_ref (build1 (NOP_EXPR, arg1,
4780                                        error_mark_node),
4781                                NULL_PTR),
4782            fnname, arglist, NULL_TREE, flags);
4783 #if 0
4784         /* This can happen when operator delete is protected.  */
4785         my_friendly_assert (rval != error_mark_node, 250);
4786         TREE_TYPE (rval) = void_type_node;
4787 #endif
4788         return rval;
4789       }
4790
4791     case CALL_EXPR:
4792       return build_object_call (arg1, arg2);
4793
4794     default:
4795       break;
4796     }
4797
4798   /* The comma operator can have void args.  */
4799   if (TREE_CODE (arg1) == OFFSET_REF)
4800     arg1 = resolve_offset_ref (arg1);
4801   if (arg2 && TREE_CODE (arg2) == OFFSET_REF)
4802     arg2 = resolve_offset_ref (arg2);
4803   if (arg3 && TREE_CODE (arg3) == OFFSET_REF)
4804     arg3 = resolve_offset_ref (arg3);
4805
4806   if (code == COND_EXPR)
4807     {
4808       if (arg2 == NULL_TREE
4809           || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4810           || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4811           || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4812               && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4813         goto builtin;
4814     }
4815   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4816            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4817     goto builtin;
4818
4819   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4820     arg2 = integer_zero_node;
4821
4822   if (arg2 && arg3)
4823     arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons
4824                       (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3)));
4825   else if (arg2)
4826     arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4827   else
4828     arglist = build_scratch_list (NULL_TREE, arg1);
4829
4830   fns = lookup_name_nonclass (fnname);
4831   /* + Koenig lookup */
4832
4833   if (fns && TREE_CODE (fns) == TREE_LIST)
4834     fns = TREE_VALUE (fns);
4835   for (; fns; fns = DECL_CHAIN (fns))
4836     {
4837       if (TREE_CODE (fns) == TEMPLATE_DECL)
4838         {
4839           templates = scratch_tree_cons (NULL_TREE, fns, templates);
4840           candidates 
4841             = add_template_candidate (candidates, fns, NULL_TREE,
4842                                       arglist, TREE_TYPE (fnname),
4843                                       flags); 
4844         }
4845       else
4846         candidates = add_function_candidate (candidates, fns, arglist, flags);
4847     }
4848
4849   if (IS_AGGR_TYPE (TREE_TYPE (arg1)))
4850     fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 0);
4851   else
4852     fns = NULL_TREE;
4853
4854   if (fns)
4855     {
4856       tree fn = TREE_VALUE (fns);
4857       mem_arglist = scratch_tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
4858       for (; fn; fn = DECL_CHAIN (fn))
4859         {
4860           tree this_arglist;
4861
4862           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4863             this_arglist = mem_arglist;
4864           else
4865             this_arglist = arglist;
4866
4867           if (TREE_CODE (fn) == TEMPLATE_DECL)
4868             {
4869               /* A member template. */
4870               templates = scratch_tree_cons (NULL_TREE, fn, templates);
4871               candidates 
4872                 = add_template_candidate (candidates, fn, NULL_TREE,
4873                                           this_arglist,  TREE_TYPE (fnname),
4874                                           flags); 
4875             }
4876           else
4877             candidates = add_function_candidate
4878               (candidates, fn, this_arglist, flags);
4879
4880           if (candidates) 
4881             candidates->basetype_path = TREE_PURPOSE (fns);
4882         }
4883     }
4884
4885   {
4886     tree args[3];
4887
4888     /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4889        to know about two args; a builtin candidate will always have a first
4890        parameter of type bool.  We'll handle that in
4891        build_builtin_candidate.  */
4892     if (code == COND_EXPR)
4893       {
4894         args[0] = arg2;
4895         args[1] = arg3;
4896         args[2] = arg1;
4897       }
4898     else
4899       {
4900         args[0] = arg1;
4901         args[1] = arg2;
4902         args[2] = NULL_TREE;
4903       }
4904
4905     candidates = add_builtin_candidates
4906       (candidates, code, code2, fnname, args, flags);
4907   }
4908
4909   if (! any_viable (candidates))
4910     {
4911       switch (code)
4912         {
4913         case POSTINCREMENT_EXPR:
4914         case POSTDECREMENT_EXPR:
4915           /* Look for an `operator++ (int)'.  If they didn't have
4916              one, then we fall back to the old way of doing things.  */
4917           if (flags & LOOKUP_COMPLAIN)
4918             cp_pedwarn ("no `%D (int)' declared for postfix `%s', trying prefix operator instead",
4919                         fnname, opname_tab [code]);
4920           if (code == POSTINCREMENT_EXPR)
4921             code = PREINCREMENT_EXPR;
4922           else
4923             code = PREDECREMENT_EXPR;   
4924           return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
4925           
4926           /* The caller will deal with these.  */
4927         case ADDR_EXPR:
4928         case COMPOUND_EXPR:
4929         case COMPONENT_REF:
4930           return NULL_TREE;
4931
4932         default:
4933           break;
4934         }
4935       if (flags & LOOKUP_COMPLAIN)
4936         {
4937           op_error (code, code2, arg1, arg2, arg3, "no match");
4938           print_z_candidates (candidates);
4939         }
4940       return error_mark_node;
4941     }
4942   candidates = splice_viable (candidates);
4943   cand = tourney (candidates);
4944
4945   if (cand == 0)
4946     {
4947       if (flags & LOOKUP_COMPLAIN)
4948         {
4949           op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4950           print_z_candidates (candidates);
4951         }
4952       return error_mark_node;
4953     }
4954
4955   if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4956     {
4957       extern int warn_synth;
4958       if (warn_synth
4959           && fnname == ansi_opname[MODIFY_EXPR]
4960           && DECL_ARTIFICIAL (cand->fn)
4961           && candidates->next
4962           && ! candidates->next->next)
4963         {
4964           cp_warning ("using synthesized `%#D' for copy assignment",
4965                       cand->fn);
4966           cp_warning_at ("  where cfront would use `%#D'",
4967                          cand == candidates
4968                          ? candidates->next->fn
4969                          : candidates->fn);
4970         }
4971
4972       if (DECL_FUNCTION_MEMBER_P (cand->fn))
4973         enforce_access (cand->basetype_path, cand->fn);
4974
4975       /* Pedantically, normal function declarations are never considered
4976          to refer to template instantiations, so we only do this with
4977          -fguiding-decls.  */ 
4978       if (flag_guiding_decls && templates && ! cand->template 
4979           && ! DECL_INITIAL (cand->fn)
4980           && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4981         add_maybe_template (cand->fn, templates);
4982
4983       return build_over_call
4984         (cand->fn, cand->convs,
4985          TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
4986          ? mem_arglist : arglist,
4987          LOOKUP_NORMAL);
4988     }
4989
4990   /* Check for comparison of different enum types.  */
4991   switch (code)
4992     {
4993     case GT_EXPR:
4994     case LT_EXPR:
4995     case GE_EXPR:
4996     case LE_EXPR:
4997     case EQ_EXPR:
4998     case NE_EXPR:
4999       if (flag_int_enum_equivalence == 0 
5000           && TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE 
5001           && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE 
5002           && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5003               != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
5004         {
5005           cp_warning ("comparison between `%#T' and `%#T'", 
5006                       TREE_TYPE (arg1), TREE_TYPE (arg2));
5007         }
5008       break;
5009     default:
5010       break;
5011     }
5012
5013   /* We need to strip any leading REF_BIND so that bitfields don't cause
5014      errors.  This should not remove any important conversions, because
5015      builtins don't apply to class objects directly.  */
5016   conv = TREE_VEC_ELT (cand->convs, 0);
5017   if (TREE_CODE (conv) == REF_BIND)
5018     conv = TREE_OPERAND (conv, 0);
5019   arg1 = convert_like (conv, arg1);
5020   if (arg2)
5021     arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
5022   if (arg3)
5023     arg3 = convert_like (TREE_VEC_ELT (cand->convs, 2), arg3);
5024
5025 builtin:
5026   switch (code)
5027     {
5028     case MODIFY_EXPR:
5029       return build_modify_expr (arg1, code2, arg2);
5030
5031     case INDIRECT_REF:
5032       return build_indirect_ref (arg1, "unary *");
5033
5034     case PLUS_EXPR:
5035     case MINUS_EXPR:
5036     case MULT_EXPR:
5037     case TRUNC_DIV_EXPR:
5038     case GT_EXPR:
5039     case LT_EXPR:
5040     case GE_EXPR:
5041     case LE_EXPR:
5042     case EQ_EXPR:
5043     case NE_EXPR:
5044     case MAX_EXPR:
5045     case MIN_EXPR:
5046     case LSHIFT_EXPR:
5047     case RSHIFT_EXPR:
5048     case TRUNC_MOD_EXPR:
5049     case BIT_AND_EXPR:
5050     case BIT_IOR_EXPR:
5051     case BIT_XOR_EXPR:
5052     case TRUTH_ANDIF_EXPR:
5053     case TRUTH_ORIF_EXPR:
5054       return build_binary_op_nodefault (code, arg1, arg2, code);
5055
5056     case CONVERT_EXPR:
5057     case NEGATE_EXPR:
5058     case BIT_NOT_EXPR:
5059     case TRUTH_NOT_EXPR:
5060     case PREINCREMENT_EXPR:
5061     case POSTINCREMENT_EXPR:
5062     case PREDECREMENT_EXPR:
5063     case POSTDECREMENT_EXPR:
5064     case REALPART_EXPR:
5065     case IMAGPART_EXPR:
5066       return build_unary_op (code, arg1, candidates != 0);
5067
5068     case ARRAY_REF:
5069       return build_array_ref (arg1, arg2);
5070
5071     case COND_EXPR:
5072       return build_conditional_expr (arg1, arg2, arg3);
5073
5074     case MEMBER_REF:
5075       return build_m_component_ref
5076         (build_indirect_ref (arg1, NULL_PTR), arg2);
5077
5078       /* The caller will deal with these.  */
5079     case ADDR_EXPR:
5080     case COMPONENT_REF:
5081     case COMPOUND_EXPR:
5082       return NULL_TREE;
5083
5084     default:
5085       my_friendly_abort (367);
5086     }
5087 }
5088
5089 /* Build up a call to operator new.  This has to be handled differently
5090    from other operators in the way lookup is handled; first members are
5091    considered, then globals.  CODE is either NEW_EXPR or VEC_NEW_EXPR.
5092    TYPE is the type to be created.  ARGS are any new-placement args.
5093    FLAGS are the usual overloading flags.  */
5094
5095 tree
5096 build_op_new_call (code, type, args, flags)
5097      enum tree_code code;
5098      tree type, args;
5099      int flags;
5100 {
5101   tree fnname = ansi_opname[code];
5102
5103   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL)
5104       && (TYPE_GETS_NEW (type) & (1 << (code == VEC_NEW_EXPR))))
5105     {
5106       tree dummy = build1 (NOP_EXPR, build_pointer_type (type),
5107                            error_mark_node);
5108       dummy = build_indirect_ref (dummy, "new");
5109       return build_method_call (dummy, fnname, args, NULL_TREE, flags);
5110     }
5111   else
5112     return build_new_function_call (lookup_name_nonclass (fnname), args);
5113 }
5114
5115 /* Build a call to operator delete.  This has to be handled very specially,
5116    because the restrictions on what signatures match are different from all
5117    other call instances.  For a normal delete, only a delete taking (void *)
5118    or (void *, size_t) is accepted.  For a placement delete, only an exact
5119    match with the placement new is accepted.
5120
5121    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5122    ADDR is the pointer to be deleted.  For placement delete, it is also
5123      used to determine what the corresponding new looked like.
5124    SIZE is the size of the memory block to be deleted.
5125    FLAGS are the usual overloading flags.  */
5126
5127 tree
5128 build_op_delete_call (code, addr, size, flags)
5129      enum tree_code code;
5130      tree addr, size;
5131      int flags;
5132 {
5133   tree fn, fns, fnname, fntype, argtypes, args, type;
5134   int placement;
5135
5136   if (addr == error_mark_node)
5137     return error_mark_node;
5138
5139   type = TREE_TYPE (TREE_TYPE (addr));
5140   fnname = ansi_opname[code];
5141
5142   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
5143     fns = lookup_fnfields (TYPE_BINFO (type), fnname, 0);
5144   else
5145     fns = NULL_TREE;
5146
5147   if (fns)
5148     {
5149       /* Build this up like build_offset_ref does.  */
5150       fns = build_tree_list (error_mark_node, fns);
5151       TREE_TYPE (fns) = build_offset_type (type, unknown_type_node);
5152     }
5153   else
5154     fns = lookup_name_nonclass (fnname);
5155
5156   /* We can recognize a placement delete because of LOOKUP_SPECULATIVELY;
5157      if we are doing placement delete we do nothing if we don't find a
5158      matching op delete.  */
5159   placement = !!(flags & LOOKUP_SPECULATIVELY);
5160   if (placement)
5161     {
5162       /* If placement, we are coming from build_new, and we know that addr
5163          is the allocation expression, so extract the info we need from it.
5164          Obviously, if the build_new process changes this may have to
5165          change as well.  */
5166
5167       /* The NOP_EXPR.  */
5168       tree t = TREE_OPERAND (addr, 1);
5169       /* The CALL_EXPR.  */
5170       t = TREE_OPERAND (t, 0);
5171       /* The function.  */
5172       argtypes = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
5173       /* The second parm type.  */
5174       argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (argtypes)));
5175       /* The second argument.  */
5176       args = TREE_CHAIN (TREE_OPERAND (t, 1));
5177
5178       /* Pull the dummy var out of the TARGET_EXPR for use in our call.  */
5179       addr = TREE_OPERAND (addr, 0);
5180     }
5181   else
5182     {
5183       /* First try it without the size argument.  */
5184       argtypes = void_list_node;
5185       args = NULL_TREE;
5186     }
5187
5188   argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
5189   fntype = build_function_type (void_type_node, argtypes);
5190
5191   /* Strip const and volatile from addr.  */
5192   if (type != TYPE_MAIN_VARIANT (type))
5193     addr = cp_convert (build_pointer_type (TYPE_MAIN_VARIANT (type)), addr);
5194
5195   /* instantiate_type will always return a plain function; pretend it's
5196      overloaded.  */
5197   if (TREE_CODE (fns) == FUNCTION_DECL)
5198     fns = scratch_tree_cons (NULL_TREE, fns, NULL_TREE);
5199
5200   fn = instantiate_type (fntype, fns, 0);
5201
5202   if (fn != error_mark_node)
5203     {
5204       if (TREE_CODE (TREE_VALUE (fns)) == TREE_LIST)
5205         /* Member functions.  */
5206         enforce_access (TREE_PURPOSE (TREE_VALUE (fns)), fn);
5207       return build_function_call (fn, expr_tree_cons (NULL_TREE, addr, args));
5208     }
5209
5210   if (placement)
5211     return NULL_TREE;
5212
5213   /* Normal delete; now try to find a match including the size argument.  */
5214   argtypes = tree_cons (NULL_TREE, ptr_type_node,
5215                         tree_cons (NULL_TREE, sizetype, void_list_node));
5216   fntype = build_function_type (void_type_node, argtypes);
5217
5218   fn = instantiate_type (fntype, fns, 0);
5219
5220   if (fn != error_mark_node)
5221     return build_function_call
5222       (fn, expr_tree_cons (NULL_TREE, addr,
5223                            build_expr_list (NULL_TREE, size)));
5224
5225   cp_error ("no suitable operator delete for `%T'", type);
5226   return error_mark_node;
5227 }
5228
5229 /* If the current scope isn't allowed to access FUNCTION along
5230    BASETYPE_PATH, give an error.  */
5231
5232 static void
5233 enforce_access (basetype_path, function)
5234      tree basetype_path, function;
5235 {
5236   tree access = compute_access (basetype_path, function);
5237
5238   if (access == access_private_node)
5239     {
5240       cp_error_at ("`%+#D' is %s", function, 
5241                    TREE_PRIVATE (function) ? "private"
5242                    : "from private base class");
5243       error ("within this context");
5244     }
5245   else if (access == access_protected_node)
5246     {
5247       cp_error_at ("`%+#D' %s", function,
5248                    TREE_PROTECTED (function) ? "is protected"
5249                    : "has protected accessibility");
5250       error ("within this context");
5251     }
5252 }
5253
5254 /* Perform the conversions in CONVS on the expression EXPR.  */
5255
5256 static tree
5257 convert_like (convs, expr)
5258      tree convs, expr;
5259 {
5260   if (ICS_BAD_FLAG (convs)
5261       && TREE_CODE (convs) != USER_CONV
5262       && TREE_CODE (convs) != AMBIG_CONV)
5263     {
5264       tree t = convs; 
5265       for (; t; t = TREE_OPERAND (t, 0))
5266         {
5267           if (TREE_CODE (t) == USER_CONV)
5268             {
5269               expr = convert_like (t, expr);
5270               break;
5271             }
5272           else if (TREE_CODE (t) == AMBIG_CONV)
5273             return convert_like (t, expr);
5274           else if (TREE_CODE (t) == IDENTITY_CONV)
5275             break;
5276         }
5277       return convert_for_initialization
5278         (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
5279          "conversion", NULL_TREE, 0);
5280     }
5281
5282   switch (TREE_CODE (convs))
5283     {
5284     case USER_CONV:
5285       {
5286         tree fn = TREE_OPERAND (convs, 1);
5287         tree args;
5288         enforce_access (TREE_OPERAND (convs, 3), fn);
5289
5290         if (DECL_CONSTRUCTOR_P (fn))
5291           {
5292             tree t = build_int_2 (0, 0);
5293             TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
5294
5295             args = build_scratch_list (NULL_TREE, expr);
5296             if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5297               args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5298             args = scratch_tree_cons (NULL_TREE, t, args);
5299           }
5300         else
5301           args = build_this (expr);
5302         expr = build_over_call
5303           (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
5304            args, LOOKUP_NORMAL);
5305
5306         /* If this is a constructor or a function returning an aggr type,
5307            we need to build up a TARGET_EXPR.  */
5308         if (DECL_CONSTRUCTOR_P (fn))
5309           expr = build_cplus_new (TREE_TYPE (convs), expr);
5310
5311         return expr;
5312       }
5313     case IDENTITY_CONV:
5314       if (type_unknown_p (expr))
5315         expr = instantiate_type (TREE_TYPE (convs), expr, 1);
5316       if (TREE_READONLY_DECL_P (expr))
5317         expr = decl_constant_value (expr);
5318       return expr;
5319     case AMBIG_CONV:
5320       /* Call build_user_type_conversion again for the error.  */
5321       return build_user_type_conversion
5322         (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
5323
5324     default:
5325       break;
5326     };
5327
5328   expr = convert_like (TREE_OPERAND (convs, 0), expr);
5329   if (expr == error_mark_node)
5330     return error_mark_node;
5331
5332   switch (TREE_CODE (convs))
5333     {
5334     case RVALUE_CONV:
5335       if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
5336         return expr;
5337       /* else fall through */
5338     case BASE_CONV:
5339       return build_user_type_conversion
5340         (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
5341     case REF_BIND:
5342       return convert_to_reference
5343         (TREE_TYPE (convs), expr,
5344          CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
5345          error_mark_node);
5346     case LVALUE_CONV:
5347       return decay_conversion (expr);
5348
5349     default:
5350       break;
5351     }
5352   return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5353                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5354 }
5355
5356 static tree
5357 convert_default_arg (type, arg)
5358      tree type, arg;
5359 {
5360   arg = break_out_target_exprs (arg);
5361
5362   if (TREE_CODE (arg) == CONSTRUCTOR)
5363     {
5364       arg = digest_init (type, arg, 0);
5365       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5366                                         "default argument", 0, 0);
5367     }
5368   else
5369     {
5370       /* This could get clobbered by the following call.  */
5371       if (TREE_HAS_CONSTRUCTOR (arg))
5372         arg = copy_node (arg);
5373
5374       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5375                                         "default argument", 0, 0);
5376 #ifdef PROMOTE_PROTOTYPES
5377       if ((TREE_CODE (type) == INTEGER_TYPE
5378            || TREE_CODE (type) == ENUMERAL_TYPE)
5379           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5380         arg = default_conversion (arg);
5381 #endif
5382     }
5383
5384   return arg;
5385 }
5386
5387 static tree
5388 build_over_call (fn, convs, args, flags)
5389      tree fn, convs, args;
5390      int flags;
5391 {
5392   tree converted_args = NULL_TREE;
5393   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5394   tree conv, arg, val;
5395   int i = 0;
5396   int is_method = 0;
5397
5398   if (args && TREE_CODE (args) != TREE_LIST)
5399     args = build_scratch_list (NULL_TREE, args);
5400   arg = args;
5401
5402   /* The implicit parameters to a constructor are not considered by overload
5403      resolution, and must be of the proper type.  */
5404   if (DECL_CONSTRUCTOR_P (fn))
5405     {
5406       converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5407       arg = TREE_CHAIN (arg);
5408       parm = TREE_CHAIN (parm);
5409       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5410         {
5411           converted_args = expr_tree_cons
5412             (NULL_TREE, TREE_VALUE (arg), converted_args);
5413           arg = TREE_CHAIN (arg);
5414           parm = TREE_CHAIN (parm);
5415         }
5416     }      
5417   /* Bypass access control for 'this' parameter.  */
5418   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5419     {
5420       tree parmtype = TREE_VALUE (parm);
5421       tree argtype = TREE_TYPE (TREE_VALUE (arg));
5422       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5423         {
5424           int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5425                     < TYPE_VOLATILE (TREE_TYPE (argtype)));
5426           int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5427                     < TYPE_READONLY (TREE_TYPE (argtype)));
5428           char *p = (dv && dc ? "const and volatile"
5429                               : dc ? "const" : dv ? "volatile" : "");
5430
5431           cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5432                       TREE_TYPE (argtype), fn, p);
5433         }
5434       converted_args = expr_tree_cons
5435         (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5436          converted_args);
5437       parm = TREE_CHAIN (parm);
5438       arg = TREE_CHAIN (arg);
5439       ++i;
5440       is_method = 1;
5441     }
5442
5443   for (; arg && parm;
5444        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5445     {
5446       tree type = TREE_VALUE (parm);
5447
5448       conv = TREE_VEC_ELT (convs, i);
5449       if (ICS_BAD_FLAG (conv))
5450         {
5451           tree t = conv;
5452           val = TREE_VALUE (arg);
5453
5454           for (; t; t = TREE_OPERAND (t, 0))
5455             {
5456               if (TREE_CODE (t) == USER_CONV
5457                   || TREE_CODE (t) == AMBIG_CONV)
5458                 {
5459                   val = convert_like (t, val);
5460                   break;
5461                 }
5462               else if (TREE_CODE (t) == IDENTITY_CONV)
5463                 break;
5464             }
5465           val = convert_for_initialization
5466             (NULL_TREE, type, val, LOOKUP_NORMAL,
5467              "argument passing", fn, i - is_method);
5468         }
5469       else
5470         val = convert_like (conv, TREE_VALUE (arg));
5471
5472 #ifdef PROMOTE_PROTOTYPES
5473       if ((TREE_CODE (type) == INTEGER_TYPE
5474            || TREE_CODE (type) == ENUMERAL_TYPE)
5475           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5476         val = default_conversion (val);
5477 #endif
5478       converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5479     }
5480
5481   /* Default arguments */
5482   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5483     {
5484       tree arg = TREE_PURPOSE (parm);
5485
5486       if (DECL_TEMPLATE_INFO (fn))
5487         /* This came from a template.  Instantiate the default arg here,
5488            not in tsubst.  */
5489         arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5490                            TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5491       converted_args = expr_tree_cons
5492         (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5493          converted_args);
5494     }
5495
5496   /* Ellipsis */
5497   for (; arg; arg = TREE_CHAIN (arg))
5498     {
5499       val = TREE_VALUE (arg);
5500
5501       if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5502           && (TYPE_PRECISION (TREE_TYPE (val))
5503               < TYPE_PRECISION (double_type_node)))
5504         /* Convert `float' to `double'.  */
5505         val = cp_convert (double_type_node, val);
5506       else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5507                && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5508         cp_warning ("cannot pass objects of type `%T' through `...'",
5509                     TREE_TYPE (val));
5510       else
5511         /* Convert `short' and `char' to full-size `int'.  */
5512         val = default_conversion (val);
5513
5514       converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5515     }
5516
5517   converted_args = nreverse (converted_args);
5518
5519   /* Avoid actually calling copy constructors and copy assignment operators,
5520      if possible.  */
5521   if (DECL_CONSTRUCTOR_P (fn)
5522       && TREE_VEC_LENGTH (convs) == 1
5523       && copy_args_p (fn))
5524     {
5525       tree targ;
5526       arg = TREE_CHAIN (converted_args);
5527       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5528         arg = TREE_CHAIN (arg);
5529       arg = TREE_VALUE (arg);
5530
5531       /* Pull out the real argument, disregarding const-correctness.  */
5532       targ = arg;
5533       while (TREE_CODE (targ) == NOP_EXPR
5534              || TREE_CODE (targ) == NON_LVALUE_EXPR
5535              || TREE_CODE (targ) == CONVERT_EXPR)
5536         targ = TREE_OPERAND (targ, 0);
5537       if (TREE_CODE (targ) == ADDR_EXPR)
5538         {
5539           targ = TREE_OPERAND (targ, 0);
5540           if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5541                            TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5542             targ = NULL_TREE;
5543         }
5544       else
5545         targ = NULL_TREE;
5546
5547       if (targ)
5548         arg = targ;
5549       else
5550         arg = build_indirect_ref (arg, 0);
5551
5552       /* [class.copy]: the copy constructor is implicitly defined even if
5553          the implementation elided its use.  */
5554       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5555         mark_used (fn);
5556
5557       /* If we're creating a temp and we already have one, don't create a
5558          new one.  If we're not creating a temp but we get one, use
5559          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
5560          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5561          temp or an INIT_EXPR otherwise.  */
5562       if (integer_zerop (TREE_VALUE (args)))
5563         {
5564           if (! real_lvalue_p (arg))
5565             return arg;
5566           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5567             {
5568               val = build (VAR_DECL, DECL_CONTEXT (fn));
5569               layout_decl (val, 0);
5570               val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5571               TREE_SIDE_EFFECTS (val) = 1;
5572               return val;
5573             }
5574         }
5575       else if (! real_lvalue_p (arg)
5576                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5577         {
5578           tree to = stabilize_reference
5579             (build_indirect_ref (TREE_VALUE (args), 0));
5580           val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5581           TREE_SIDE_EFFECTS (val) = 1;
5582           return build_unary_op (ADDR_EXPR, val, 0);
5583         }
5584     }
5585   else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5586            && copy_args_p (fn)
5587            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5588     {
5589       tree to = stabilize_reference
5590         (build_indirect_ref (TREE_VALUE (converted_args), 0));
5591       arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5592       val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5593       TREE_SIDE_EFFECTS (val) = 1;
5594       return val;
5595     }
5596
5597   mark_used (fn);
5598
5599   if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5600     return build_signature_method_call (fn, converted_args);
5601   else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5602     {
5603       tree t, *p = &TREE_VALUE (converted_args);
5604       tree binfo = get_binfo
5605         (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5606       *p = convert_pointer_to_real (binfo, *p);
5607       if (TREE_SIDE_EFFECTS (*p))
5608         *p = save_expr (*p);
5609       t = build_pointer_type (TREE_TYPE (fn));
5610       fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5611       TREE_TYPE (fn) = t;
5612     }
5613   else if (DECL_INLINE (fn))
5614     fn = inline_conversion (fn);
5615   else
5616     fn = build_addr_func (fn);
5617
5618   fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5619   if (TREE_TYPE (fn) == void_type_node)
5620     return fn;
5621   fn = require_complete_type (fn);
5622   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5623     fn = build_cplus_new (TREE_TYPE (fn), fn);
5624   return convert_from_reference (fn);
5625 }
5626
5627 static tree
5628 build_new_method_call (instance, name, args, basetype_path, flags)
5629      tree instance, name, args, basetype_path;
5630      int flags;
5631 {
5632   struct z_candidate *candidates = 0, *cand;
5633   tree explicit_targs = NULL_TREE;
5634   tree basetype, mem_args, fns, instance_ptr;
5635   tree pretty_name;
5636   tree user_args = args;
5637   tree templates = NULL_TREE;
5638   int template_only = 0;
5639
5640   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5641     {
5642       explicit_targs = TREE_OPERAND (name, 1);
5643       name = TREE_OPERAND (name, 0);
5644       if (TREE_CODE (name) == TEMPLATE_DECL)
5645         name = DECL_NAME (name);
5646       template_only = 1;
5647     }
5648
5649   /* If there is an extra argument for controlling virtual bases,
5650      remove it for error reporting.  */
5651   if (flags & LOOKUP_HAS_IN_CHARGE)
5652     user_args = TREE_CHAIN (args);
5653
5654   args = resolve_args (args);
5655
5656   if (args == error_mark_node)
5657     return error_mark_node;
5658
5659   if (instance == NULL_TREE)
5660     basetype = BINFO_TYPE (basetype_path);
5661   else
5662     {
5663       if (TREE_CODE (instance) == OFFSET_REF)
5664         instance = resolve_offset_ref (instance);
5665       if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5666         instance = convert_from_reference (instance);
5667       basetype = TREE_TYPE (instance);
5668
5669       /* XXX this should be handled before we get here.  */
5670       if (! IS_AGGR_TYPE (basetype)
5671           && ! (TYPE_LANG_SPECIFIC (basetype)
5672                 && (IS_SIGNATURE_POINTER (basetype)
5673                     || IS_SIGNATURE_REFERENCE (basetype))))
5674         {
5675           if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5676             cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5677                       name, instance, basetype);
5678
5679           return error_mark_node;
5680         }
5681
5682       /* If `instance' is a signature pointer/reference and `name' is
5683          not a constructor, we are calling a signature member function.
5684          In that case set the `basetype' to the signature type.  */
5685       if ((IS_SIGNATURE_POINTER (basetype)
5686            || IS_SIGNATURE_REFERENCE (basetype))
5687           && TYPE_IDENTIFIER (basetype) != name)
5688         basetype = SIGNATURE_TYPE (basetype);
5689     }
5690
5691   if (basetype_path == NULL_TREE)
5692     basetype_path = TYPE_BINFO (basetype);
5693
5694   if (instance)
5695     {
5696       instance_ptr = build_this (instance);
5697
5698       if (! template_only)
5699         {
5700           /* XXX this should be handled before we get here.  */
5701           fns = build_field_call (basetype_path, instance_ptr, name, args);
5702           if (fns)
5703             return fns;
5704         }
5705     }
5706   else
5707     {
5708       instance_ptr = build_int_2 (0, 0);
5709       TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5710     }
5711
5712   pretty_name
5713     = (name == ctor_identifier ? constructor_name (basetype) : name);
5714
5715   fns = lookup_fnfields (basetype_path, name, 1);
5716
5717   if (fns == error_mark_node)
5718     return error_mark_node;
5719   if (fns)
5720     {
5721       tree t = TREE_VALUE (fns);
5722       if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5723           && ! (flags & LOOKUP_HAS_IN_CHARGE))
5724         {
5725           flags |= LOOKUP_HAS_IN_CHARGE;
5726           args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5727         }
5728       mem_args = scratch_tree_cons (NULL_TREE, instance_ptr, args);
5729       for (; t; t = DECL_CHAIN (t))
5730         {
5731           tree this_arglist;
5732
5733           /* We can end up here for copy-init of same or base class.  */
5734           if (name == ctor_identifier
5735               && (flags & LOOKUP_ONLYCONVERTING)
5736               && DECL_NONCONVERTING_P (t))
5737             continue;
5738           if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5739             this_arglist = mem_args;
5740           else
5741             this_arglist = args;
5742
5743           if (TREE_CODE (t) == TEMPLATE_DECL)
5744             {
5745               /* A member template. */
5746               templates = scratch_tree_cons (NULL_TREE, t, templates);
5747               candidates = 
5748                 add_template_candidate (candidates, t, explicit_targs,
5749                                         this_arglist,
5750                                         TREE_TYPE (name), flags); 
5751             }
5752           else if (! template_only)
5753             candidates = add_function_candidate (candidates, t,
5754                                                  this_arglist, flags);
5755
5756           if (candidates)
5757             candidates->basetype_path = TREE_PURPOSE (fns);
5758         }
5759     }
5760
5761   if (! any_viable (candidates))
5762     {
5763       /* XXX will LOOKUP_SPECULATIVELY be needed when this is done?  */
5764       if (flags & LOOKUP_SPECULATIVELY)
5765         return NULL_TREE;
5766       cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5767                 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5768       print_z_candidates (candidates);
5769       return error_mark_node;
5770     }
5771   candidates = splice_viable (candidates);
5772   cand = tourney (candidates);
5773
5774   if (cand == 0)
5775     {
5776       cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5777                 user_args);
5778       print_z_candidates (candidates);
5779       return error_mark_node;
5780     }
5781
5782   enforce_access (cand->basetype_path, cand->fn);
5783   if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5784       && instance == current_class_ref
5785       && DECL_CONSTRUCTOR_P (current_function_decl)
5786       && ! (flags & LOOKUP_NONVIRTUAL)
5787       && value_member (cand->fn, get_abstract_virtuals (basetype)))
5788     cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5789   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5790       && TREE_CODE (instance_ptr) == NOP_EXPR
5791       && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5792     cp_error ("cannot call member function `%D' without object", cand->fn);
5793
5794   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5795       && ((instance == current_class_ref && (dtor_label || ctor_label))
5796           || resolves_to_fixed_type_p (instance, 0)))
5797     flags |= LOOKUP_NONVIRTUAL;
5798
5799   /* Pedantically, normal function declarations are never considered
5800      to refer to template instantiations, so we only do this with
5801      -fguiding-decls.  */ 
5802   if (flag_guiding_decls && templates && ! cand->template 
5803       && ! DECL_INITIAL (cand->fn))
5804     add_maybe_template (cand->fn, templates);
5805
5806   return build_over_call
5807     (cand->fn, cand->convs,
5808      TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5809      flags);
5810 }
5811
5812 /* Compare two implicit conversion sequences that differ only in their
5813    qualification conversion.  Subroutine of compare_ics.  */
5814
5815 static int
5816 compare_qual (ics1, ics2)
5817      tree ics1, ics2;
5818 {
5819   tree to1 = TREE_TYPE (ics1);
5820   tree to2 = TREE_TYPE (ics2);
5821
5822   if (TYPE_PTRMEMFUNC_P (to1))
5823     to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1);
5824   if (TYPE_PTRMEMFUNC_P (to2))
5825     to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2);
5826
5827   to1 = TREE_TYPE (to1);
5828   to2 = TREE_TYPE (to2);
5829
5830   if (TREE_CODE (to1) == OFFSET_TYPE)
5831     {
5832       to1 = TREE_TYPE (to1);
5833       to2 = TREE_TYPE (to2);
5834     }
5835
5836   if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5837       && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5838     return -1;
5839   else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5840            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5841     return -1;
5842   else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5843            && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5844     return 1;
5845   else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5846            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5847     return 1;
5848   return 0;
5849 }
5850
5851 /* Determine whether standard conversion sequence ICS1 is a proper
5852    subsequence of ICS2.  We assume that a conversion of the same code
5853    between the same types indicates a subsequence.  */
5854
5855 static int
5856 is_subseq (ics1, ics2)
5857      tree ics1, ics2;
5858 {
5859   /* Do not consider lvalue transformations here.  */
5860   if (TREE_CODE (ics2) == RVALUE_CONV
5861       || TREE_CODE (ics2) == LVALUE_CONV)
5862     return 0;
5863
5864   for (;; ics2 = TREE_OPERAND (ics2, 0))
5865     {
5866       if (TREE_CODE (ics2) == TREE_CODE (ics1)
5867           && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
5868           && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5869                         TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
5870         return 1;
5871
5872       if (TREE_CODE (ics2) == USER_CONV
5873           || TREE_CODE (ics2) == AMBIG_CONV
5874           || TREE_CODE (ics2) == IDENTITY_CONV)
5875         return 0;
5876     }
5877 }
5878
5879 /* Compare two implicit conversion sequences according to the rules set out in
5880    [over.ics.rank].  Return values:
5881
5882       1: ics1 is better than ics2
5883      -1: ics2 is better than ics1
5884       0: ics1 and ics2 are indistinguishable */
5885
5886 static int
5887 compare_ics (ics1, ics2)
5888      tree ics1, ics2;
5889 {
5890   tree main1, main2;
5891
5892   if (TREE_CODE (ics1) == QUAL_CONV)
5893     main1 = TREE_OPERAND (ics1, 0);
5894   else
5895     main1 = ics1;
5896
5897   if (TREE_CODE (ics2) == QUAL_CONV)
5898     main2 = TREE_OPERAND (ics2, 0);
5899   else
5900     main2 = ics2;
5901
5902   /* Conversions for `this' are PTR_CONVs, but we compare them as though
5903      they were REF_BINDs.  */
5904   if (ICS_THIS_FLAG (ics1))
5905     {
5906       tree t = main1;
5907       if (TREE_CODE (t) == PTR_CONV)
5908         t = TREE_OPERAND (t, 0);
5909       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5910       t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5911       ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5912       main1 = ics1 = t;
5913     }
5914   if (ICS_THIS_FLAG (ics2))
5915     {
5916       tree t = main2;
5917       if (TREE_CODE (t) == PTR_CONV)
5918         t = TREE_OPERAND (t, 0);
5919       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5920       t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5921       ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5922       main2 = ics2 = t;
5923     }
5924
5925   if (ICS_RANK (ics1) > ICS_RANK (ics2))
5926     return -1;
5927   else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5928     return 1;
5929
5930   if (ICS_RANK (ics1) == BAD_RANK)
5931     {
5932       if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5933           || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5934         return -1;
5935       else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5936                || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5937         return 1;
5938
5939       /* else fall through */
5940     }
5941
5942   /* User-defined  conversion sequence U1 is a better conversion sequence
5943      than another user-defined conversion sequence U2 if they contain the
5944      same user-defined conversion operator or constructor and if the sec-
5945      ond standard conversion sequence of U1 is  better  than  the  second
5946      standard conversion sequence of U2.  */
5947
5948   if (ICS_USER_FLAG (ics1))
5949     {
5950       tree t1, t2;
5951
5952       for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5953         if (TREE_CODE (t1) == AMBIG_CONV)
5954           return 0;
5955       for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5956         if (TREE_CODE (t2) == AMBIG_CONV)
5957           return 0;
5958
5959       if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5960         return 0;
5961       else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5962         return -1;
5963       else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5964         return 1;
5965
5966       /* else fall through */
5967     }
5968
5969 #if 0 /* Handled by ranking */
5970   /* A conversion that is not a conversion of a pointer,  or  pointer  to
5971      member,  to  bool  is  better than another conversion that is such a
5972      conversion.  */
5973 #endif
5974
5975   if (TREE_CODE (main1) != TREE_CODE (main2))
5976     {
5977       /* ...if S1  is  a  proper  subsequence  of  S2  */
5978       if (is_subseq (main1, main2))
5979         return 1;
5980       if (is_subseq (main2, main1))
5981         return -1;
5982       return 0;
5983     }
5984
5985   if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5986       || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5987     {
5988       tree to1 = TREE_TYPE (main1);
5989       tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5990       tree to2 = TREE_TYPE (main2);
5991       tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5992       int distf, distt;
5993
5994       /* Standard conversion sequence S1 is a better conversion sequence than
5995          standard conversion sequence S2 if...
5996
5997          S1 and S2 differ only in their qualification conversion  and  they
5998          yield types identical except for cv-qualifiers and S2 adds all the
5999          qualifiers that S1 adds (and in the same places) and S2  adds  yet
6000          more  cv-qualifiers  than  S1,  or the similar case with reference
6001          binding15).  */
6002       if (TREE_CODE (main1) == REF_BIND)
6003         {
6004           if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
6005               == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
6006             return compare_qual (ics1, ics2);
6007         }
6008       else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
6009         return compare_qual (ics1, ics2);
6010         
6011       if (TYPE_PTRMEMFUNC_P (to1))
6012         {
6013           to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
6014           from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
6015         }
6016       else if (TREE_CODE (main1) != BASE_CONV)
6017         {
6018           to1 = TREE_TYPE (to1);
6019           if (TREE_CODE (main1) != REF_BIND)
6020             from1 = TREE_TYPE (from1);
6021
6022           if (TREE_CODE (to1) == OFFSET_TYPE)
6023             {
6024               to1 = TYPE_OFFSET_BASETYPE (to1);
6025               from1 = TYPE_OFFSET_BASETYPE (from1);
6026             }
6027         }
6028
6029       if (TYPE_PTRMEMFUNC_P (to2))
6030         {
6031           to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
6032           from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
6033         }
6034       else if (TREE_CODE (main1) != BASE_CONV)
6035         {
6036           to2 = TREE_TYPE (to2);
6037           if (TREE_CODE (main1) != REF_BIND)
6038             from2 = TREE_TYPE (from2);
6039
6040           if (TREE_CODE (to2) == OFFSET_TYPE)
6041             {
6042               to2 = TYPE_OFFSET_BASETYPE (to2);
6043               from2 = TYPE_OFFSET_BASETYPE (from2);
6044             }
6045         }
6046
6047       if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
6048         return 0;
6049
6050       /* The sense of pmem conversions is reversed from that of the other
6051          conversions.  */
6052       if (TREE_CODE (main1) == PMEM_CONV)
6053         {
6054           tree t = from1; from1 = from2; from2 = t;
6055           t = to1; to1 = to2; to2 = t;
6056         }
6057
6058       distf = get_base_distance (from1, from2, 0, 0);
6059       if (distf == -1)
6060         {
6061           distf = -get_base_distance (from2, from1, 0, 0);
6062           if (distf == 1)
6063             return 0;
6064         }
6065
6066       /* If class B is derived directly or indirectly from class A,
6067          conver- sion of B* to A* is better than conversion of B* to
6068          void*, and conversion of A* to void* is better than
6069          conversion of B* to void*.  */
6070
6071       if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
6072         {
6073           if (distf > 0)
6074             return 1;
6075           else if (distf < 0)
6076             return -1;
6077         }
6078       else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
6079                && get_base_distance (to1, from1, 0, 0) != -1)
6080         return 1;
6081       else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
6082                && get_base_distance (to2, from2, 0, 0) != -1)
6083         return -1;
6084
6085       if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
6086         return 0;
6087
6088       /* If  class B is derived directly or indirectly from class A and class
6089          C is derived directly or indirectly from B */
6090
6091       distt = get_base_distance (to1, to2, 0, 0);
6092       if (distt == -1)
6093         {
6094           distt = -get_base_distance (to2, to1, 0, 0);
6095           if (distt == 1)
6096             return 0;
6097         }
6098
6099       /* --conversion of C* to B* is better than conversion of C* to A*, */
6100       if (distf == 0)
6101         {
6102           if (distt > 0)
6103             return -1;
6104           else if (distt < 0)
6105             return 1;
6106         }
6107       /* --conversion of B* to A* is better than conversion of C* to A*, */
6108       else if (distt == 0)
6109         {
6110           if (distf > 0)
6111             return 1;
6112           else if (distf < 0)
6113             return -1;
6114         }
6115     }
6116   else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
6117            || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
6118     {
6119       if (TREE_TYPE (main1) == TREE_TYPE (main2))
6120         return compare_qual (ics1, ics2);
6121
6122 #if 0 /* This is now handled by making identity better than anything else.  */
6123       /* existing practice, not WP-endorsed: const char * -> const char *
6124          is better than char * -> const char *.  (jason 6/29/96) */
6125       if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
6126         return -compare_qual (main1, main2);
6127 #endif
6128     }
6129
6130   return 0;
6131 }
6132
6133 /* The source type for this standard conversion sequence.  */
6134
6135 static tree
6136 source_type (t)
6137      tree t;
6138 {
6139   for (;; t = TREE_OPERAND (t, 0))
6140     {
6141       if (TREE_CODE (t) == USER_CONV
6142           || TREE_CODE (t) == AMBIG_CONV
6143           || TREE_CODE (t) == IDENTITY_CONV)
6144         return TREE_TYPE (t);
6145     }
6146   my_friendly_abort (1823);
6147 }
6148
6149 /* Compare two candidates for overloading as described in
6150    [over.match.best].  Return values:
6151
6152       1: cand1 is better than cand2
6153      -1: cand2 is better than cand1
6154       0: cand1 and cand2 are indistinguishable */
6155
6156 static int
6157 joust (cand1, cand2)
6158      struct z_candidate *cand1, *cand2;
6159 {
6160   int winner = 0;
6161   int i, off1 = 0, off2 = 0, len;
6162
6163   /* Candidates that involve bad conversions are always worse than those
6164      that don't.  */
6165   if (cand1->viable > cand2->viable)
6166     return 1;
6167   if (cand1->viable < cand2->viable)
6168     return -1;
6169
6170   /* a viable function F1
6171      is defined to be a better function than another viable function F2  if
6172      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
6173      ICSi(F2), and then */
6174
6175   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
6176      ICSj(F2) */
6177
6178   /* For comparing static and non-static member functions, we ignore the
6179      implicit object parameter of the non-static function.  The WP says to
6180      pretend that the static function has an object parm, but that won't
6181      work with operator overloading.  */
6182   len = TREE_VEC_LENGTH (cand1->convs);
6183   if (len != TREE_VEC_LENGTH (cand2->convs))
6184     {
6185       if (DECL_STATIC_FUNCTION_P (cand1->fn)
6186           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
6187         off2 = 1;
6188       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
6189                && DECL_STATIC_FUNCTION_P (cand2->fn))
6190         {
6191           off1 = 1;
6192           --len;
6193         }
6194       else
6195         my_friendly_abort (42);
6196     }
6197
6198   for (i = 0; i < len; ++i)
6199     {
6200       tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
6201       tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
6202       int comp = compare_ics (t1, t2);
6203
6204       if (comp != 0)
6205         {
6206 #if 0 /* move this warning to tourney.  */
6207           if (warn_sign_promo
6208               && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
6209               && TREE_CODE (t1) == STD_CONV
6210               && TREE_CODE (t2) == STD_CONV
6211               && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
6212               && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
6213               && (TYPE_PRECISION (TREE_TYPE (t1))
6214                   == TYPE_PRECISION (TREE_TYPE (t2)))
6215               && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
6216                   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
6217                       == ENUMERAL_TYPE)))
6218             {
6219               tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
6220               tree type1, type2;
6221               if (comp > 0)
6222                 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
6223               else
6224                 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
6225
6226               cp_warning ("passing `%T' chooses `%T' over `%T'",
6227                           type, type1, type2);
6228               cp_warning ("  in call to `%D'", DECL_NAME (cand1->fn));
6229             }
6230 #endif
6231
6232           if (winner && comp != winner)
6233             {
6234               winner = 0;
6235               goto tweak;
6236             }
6237           winner = comp;
6238         }
6239     }
6240
6241 #if 0 /* move this warning to tourney.  */
6242   /* warn about confusing overload resolution */
6243   if (winner && cand1->second_conv
6244       && ! DECL_CONSTRUCTOR_P (cand1->fn)
6245       && ! DECL_CONSTRUCTOR_P (cand2->fn))
6246     {
6247       int comp = compare_ics (cand1->second_conv, cand2->second_conv);
6248       if (comp && comp != winner)
6249         {
6250           struct z_candidate *w, *l;
6251           if (winner == 1)
6252             w = cand1, l = cand2;
6253           else
6254             w = cand2, l = cand1;
6255           cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
6256           cp_warning ("  for conversion from `%T' to `%T'",
6257                       TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
6258                       TREE_TYPE (w->second_conv));
6259           cp_warning ("  because conversion sequence for `this' argument is better");
6260         }
6261     }
6262 #endif
6263
6264   if (winner)
6265     return winner;
6266
6267   /* or, if not that,
6268      F1 is a non-template function and F2 is a template function */
6269
6270   if (! cand1->template && cand2->template)
6271     return 1;
6272   else if (cand1->template && ! cand2->template)
6273     return -1;
6274   else if (cand1->template && cand2->template)
6275     winner = more_specialized
6276       (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
6277
6278   /* or, if not that,
6279      the  context  is  an  initialization by user-defined conversion (see
6280      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
6281      sequence  from  the return type of F1 to the destination type (i.e.,
6282      the type of the entity being initialized)  is  a  better  conversion
6283      sequence  than the standard conversion sequence from the return type
6284      of F2 to the destination type.  */
6285
6286   if (! winner && cand1->second_conv)
6287     winner = compare_ics (cand1->second_conv, cand2->second_conv);
6288
6289   /* If the built-in candidates are the same, arbitrarily pick one.  */
6290   if (! winner && cand1->fn == cand2->fn
6291       && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6292     {
6293       for (i = 0; i < len; ++i)
6294         if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
6295                          TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
6296           break;
6297       if (i == TREE_VEC_LENGTH (cand1->convs))
6298         return 1;
6299
6300       /* Kludge around broken overloading rules whereby
6301          Integer a, b; test ? a : b; is ambiguous, since there's a builtin
6302          that takes references and another that takes values.  */
6303       if (cand1->fn == ansi_opname[COND_EXPR])
6304         {
6305           tree c1 = TREE_VEC_ELT (cand1->convs, 1);
6306           tree c2 = TREE_VEC_ELT (cand2->convs, 1);
6307           tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
6308           tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
6309
6310           if (comptypes (t1, t2, 1))
6311             {
6312               if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
6313                 return 1;
6314               if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
6315                 return -1;
6316             }
6317         }
6318     }
6319
6320 tweak:
6321
6322   /* Extension: If the worst conversion for one candidate is worse than the
6323      worst conversion for the other, take the first.  */
6324   if (! winner && ! pedantic)
6325     {
6326       int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
6327
6328       for (i = 0; i < len; ++i)
6329         {
6330           if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
6331             rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
6332           if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
6333             rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
6334         }
6335
6336       if (rank1 < rank2)
6337         return 1;
6338       if (rank1 > rank2)
6339         return -1;
6340     }
6341
6342   return winner;
6343 }
6344
6345 /* Given a list of candidates for overloading, find the best one, if any.
6346    This algorithm has a worst case of O(2n) (winner is last), and a best
6347    case of O(n/2) (totally ambiguous); much better than a sorting
6348    algorithm.  */
6349
6350 static struct z_candidate *
6351 tourney (candidates)
6352      struct z_candidate *candidates;
6353 {
6354   struct z_candidate *champ = candidates, *challenger;
6355   int fate;
6356
6357   /* Walk through the list once, comparing each current champ to the next
6358      candidate, knocking out a candidate or two with each comparison.  */
6359
6360   for (challenger = champ->next; challenger; )
6361     {
6362       fate = joust (champ, challenger);
6363       if (fate == 1)
6364         challenger = challenger->next;
6365       else
6366         {
6367           if (fate == 0)
6368             {
6369               champ = challenger->next;
6370               if (champ == 0)
6371                 return 0;
6372             }
6373           else
6374             champ = challenger;
6375
6376           challenger = champ->next;
6377         }
6378     }
6379
6380   /* Make sure the champ is better than all the candidates it hasn't yet
6381      been compared to.  This may do one more comparison than necessary.  Oh
6382      well.  */
6383
6384   for (challenger = candidates; challenger != champ;
6385        challenger = challenger->next)
6386     {
6387       fate = joust (champ, challenger);
6388       if (fate != 1)
6389         return 0;
6390     }
6391
6392   return champ;
6393 }
6394
6395 int
6396 can_convert (to, from)
6397      tree to, from;
6398 {
6399   if (flag_ansi_overloading)
6400     {
6401       tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
6402       return (t && ! ICS_BAD_FLAG (t));
6403     }
6404   else
6405     {
6406       struct harshness_code h;
6407       h = convert_harshness (to, from, NULL_TREE);
6408       return (h.code < USER_CODE) && (h.distance >= 0);
6409     }
6410 }
6411
6412 int
6413 can_convert_arg (to, from, arg)
6414      tree to, from, arg;
6415 {
6416   if (flag_ansi_overloading)
6417     {
6418       tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6419       return (t && ! ICS_BAD_FLAG (t));
6420     }
6421   else
6422     {
6423       struct harshness_code h;
6424       h = convert_harshness (to, from, arg);
6425       return (h.code < USER_CODE) && (h.distance >= 0);
6426     }
6427 }