OSDN Git Service

* call.c (add_builtin_candidate): Add default case in enumeration
[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       ics = implicit_conversion
4360         (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
4361
4362       if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
4363         /* ignore the near match.  */;
4364       else if (ics)
4365         for (; fn; fn = DECL_CHAIN (fn))
4366           {
4367             if (TREE_CODE (fn) == TEMPLATE_DECL)
4368               {
4369                 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4370                 candidates = 
4371                   add_template_candidate (candidates, fn, NULL_TREE,
4372                                           args, totype, flags);
4373               } 
4374             else 
4375               candidates = add_function_candidate (candidates, fn,
4376                                                    args, flags); 
4377
4378             if (candidates) 
4379               {
4380                 candidates->second_conv = ics;
4381                 candidates->basetype_path = TREE_PURPOSE (convs);
4382                 if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
4383                   candidates->viable = -1;
4384               }
4385           }
4386     }
4387
4388   if (! any_viable (candidates))
4389     {
4390 #if 0
4391       if (flags & LOOKUP_COMPLAIN)
4392         {
4393           if (candidates && ! candidates->next)
4394             /* say why this one won't work or try to be loose */;
4395           else
4396             cp_error ("no viable candidates");
4397         }
4398 #endif
4399
4400       return 0;
4401     }
4402
4403   candidates = splice_viable (candidates);
4404   cand = tourney (candidates);
4405
4406   if (cand == 0)
4407     {
4408       if (flags & LOOKUP_COMPLAIN)
4409         {
4410           cp_error ("conversion from `%T' to `%T' is ambiguous",
4411                     fromtype, totype);
4412           print_z_candidates (candidates);
4413         }
4414
4415       cand = candidates;        /* any one will do */
4416       cand->second_conv = build1 (AMBIG_CONV, totype, expr);
4417       ICS_USER_FLAG (cand->second_conv) = 1;
4418       ICS_BAD_FLAG (cand->second_conv) = 1;
4419
4420       return cand;
4421     }
4422
4423   for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
4424     p = &(TREE_OPERAND (*p, 0));
4425
4426   /* Pedantically, normal function declarations are never considered
4427      to refer to template instantiations, so we only do this with
4428      -fguiding-decls.  */ 
4429   if (flag_guiding_decls && templates && ! cand->template 
4430       && !DECL_INITIAL (cand->fn) 
4431       && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4432     add_maybe_template (cand->fn, templates);
4433
4434   *p = build
4435     (USER_CONV,
4436      (DECL_CONSTRUCTOR_P (cand->fn)
4437       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
4438      expr, cand->fn, cand->convs, cand->basetype_path);
4439   ICS_USER_FLAG (cand->second_conv) = 1;
4440   if (cand->viable == -1)
4441     ICS_BAD_FLAG (cand->second_conv) = 1;
4442
4443   return cand;
4444 }
4445
4446 tree
4447 build_user_type_conversion (totype, expr, flags)
4448      tree totype, expr;
4449      int flags;
4450 {
4451   struct z_candidate *cand
4452     = build_user_type_conversion_1 (totype, expr, flags);
4453
4454   if (cand)
4455     {
4456       if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
4457         return error_mark_node;
4458       return convert_from_reference (convert_like (cand->second_conv, expr));
4459     }
4460   return NULL_TREE;
4461 }
4462
4463 /* Do any initial processing on the arguments to a function call.  */
4464
4465 static tree
4466 resolve_args (args)
4467      tree args;
4468 {
4469   tree t;
4470   for (t = args; t; t = TREE_CHAIN (t))
4471     {
4472       if (TREE_VALUE (t) == error_mark_node)
4473         return error_mark_node;
4474       else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
4475         {
4476           error ("invalid use of void expression");
4477           return error_mark_node;
4478         }
4479       else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
4480         TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
4481     }
4482   return args;
4483 }
4484       
4485 tree
4486 build_new_function_call (fn, args)
4487      tree fn, args;
4488 {
4489   struct z_candidate *candidates = 0, *cand;
4490   tree explicit_targs = NULL_TREE;
4491   int template_only = 0;
4492
4493   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4494     {
4495       explicit_targs = TREE_OPERAND (fn, 1);
4496       fn = TREE_OPERAND (fn, 0);
4497       template_only = 1;
4498     }
4499
4500   if (really_overloaded_fn (fn))
4501     {
4502       tree t;
4503       tree templates = NULL_TREE;
4504
4505       args = resolve_args (args);
4506
4507       if (args == error_mark_node)
4508         return error_mark_node;
4509
4510       for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
4511         {
4512           if (TREE_CODE (t) == TEMPLATE_DECL)
4513             {
4514               templates = scratch_tree_cons (NULL_TREE, t, templates);
4515               candidates = add_template_candidate
4516                 (candidates, t, explicit_targs, args, NULL_TREE,
4517                  LOOKUP_NORMAL);  
4518             }
4519           else if (! template_only)
4520             candidates = add_function_candidate
4521               (candidates, t, args, LOOKUP_NORMAL);
4522         }
4523
4524       if (! any_viable (candidates))
4525         {
4526           if (candidates && ! candidates->next)
4527             return build_function_call (candidates->fn, args);
4528           cp_error ("no matching function for call to `%D (%A)'",
4529                     TREE_PURPOSE (fn), args);
4530           if (candidates)
4531             print_z_candidates (candidates);
4532           return error_mark_node;
4533         }
4534       candidates = splice_viable (candidates);
4535       cand = tourney (candidates);
4536
4537       if (cand == 0)
4538         {
4539           cp_error ("call of overloaded `%D (%A)' is ambiguous",
4540                     TREE_PURPOSE (fn), args);
4541           print_z_candidates (candidates);
4542           return error_mark_node;
4543         }
4544
4545       /* Pedantically, normal function declarations are never considered
4546          to refer to template instantiations, so we only do this with
4547          -fguiding-decls.  */
4548       if (flag_guiding_decls && templates && ! cand->template 
4549           && ! DECL_INITIAL (cand->fn))
4550         add_maybe_template (cand->fn, templates);
4551
4552       return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
4553     }
4554
4555   return build_function_call (fn, args);
4556 }
4557
4558 static tree
4559 build_object_call (obj, args)
4560      tree obj, args;
4561 {
4562   struct z_candidate *candidates = 0, *cand;
4563   tree fns, convs, mem_args;
4564   tree type = TREE_TYPE (obj);
4565   tree templates = NULL_TREE;
4566
4567   fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
4568
4569   args = resolve_args (args);
4570
4571   if (args == error_mark_node)
4572     return error_mark_node;
4573
4574   if (fns)
4575     {
4576       tree fn = TREE_VALUE (fns);
4577       mem_args = scratch_tree_cons (NULL_TREE, build_this (obj), args);
4578
4579       for (; fn; fn = DECL_CHAIN (fn))
4580         {
4581           if (TREE_CODE (fn) == TEMPLATE_DECL)
4582             {
4583               templates = scratch_tree_cons (NULL_TREE, fn, templates);
4584               candidates 
4585                 = add_template_candidate (candidates, fn, NULL_TREE,
4586                                           mem_args, NULL_TREE, 
4587                                           LOOKUP_NORMAL);
4588             }
4589           else
4590             candidates = add_function_candidate
4591               (candidates, fn, mem_args, LOOKUP_NORMAL);
4592
4593           if (candidates)
4594             candidates->basetype_path = TREE_PURPOSE (fns);
4595         }
4596     }
4597
4598   convs = lookup_conversions (type);
4599
4600   for (; convs; convs = TREE_CHAIN (convs))
4601     {
4602       tree fn = TREE_VALUE (convs);
4603       tree totype = TREE_TYPE (TREE_TYPE (fn));
4604
4605       if (TREE_CODE (totype) == POINTER_TYPE
4606           && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4607         for (; fn; fn = DECL_CHAIN (fn))
4608           {
4609             if (TREE_CODE (fn) == TEMPLATE_DECL) 
4610               {
4611                 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4612                 candidates = add_template_conv_candidate (candidates,
4613                                                           fn,
4614                                                           obj,
4615                                                           args,
4616                                                           totype);
4617               }
4618             else
4619               candidates = add_conv_candidate (candidates, fn, obj, args);
4620
4621             if (candidates)
4622               candidates->basetype_path = TREE_PURPOSE (convs);
4623           }
4624     }
4625
4626   if (! any_viable (candidates))
4627     {
4628       cp_error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
4629       print_z_candidates (candidates);
4630       return error_mark_node;
4631     }
4632
4633   candidates = splice_viable (candidates);
4634   cand = tourney (candidates);
4635
4636   if (cand == 0)
4637     {
4638       cp_error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
4639       print_z_candidates (candidates);
4640       return error_mark_node;
4641     }
4642
4643   if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
4644     return build_over_call (cand->fn, cand->convs, mem_args, LOOKUP_NORMAL);
4645
4646   obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
4647
4648   /* FIXME */
4649   return build_function_call (obj, args);
4650 }
4651
4652 static void
4653 op_error (code, code2, arg1, arg2, arg3, problem)
4654      enum tree_code code, code2;
4655      tree arg1, arg2, arg3;
4656      char *problem;
4657 {
4658   char * opname
4659     = (code == MODIFY_EXPR ? assignop_tab [code2] : opname_tab [code]);
4660
4661   switch (code)
4662     {
4663     case COND_EXPR:
4664       cp_error ("%s for `%T ? %T : %T'", problem,
4665                 error_type (arg1), error_type (arg2), error_type (arg3));
4666       break;
4667     case POSTINCREMENT_EXPR:
4668     case POSTDECREMENT_EXPR:
4669       cp_error ("%s for `%T%s'", problem, error_type (arg1), opname);
4670       break;
4671     case ARRAY_REF:
4672       cp_error ("%s for `%T[%T]'", problem,
4673                 error_type (arg1), error_type (arg2));
4674       break;
4675     default:
4676       if (arg2)
4677         cp_error ("%s for `%T %s %T'", problem,
4678                   error_type (arg1), opname, error_type (arg2));
4679       else
4680         cp_error ("%s for `%s%T'", problem, opname, error_type (arg1));
4681     }
4682 }
4683
4684 tree
4685 build_new_op (code, flags, arg1, arg2, arg3)
4686      enum tree_code code;
4687      int flags;
4688      tree arg1, arg2, arg3;
4689 {
4690   struct z_candidate *candidates = 0, *cand;
4691   tree fns, mem_arglist, arglist, fnname;
4692   enum tree_code code2 = NOP_EXPR;
4693   tree templates = NULL_TREE;
4694   tree conv;
4695
4696   if (arg1 == error_mark_node
4697       || arg2 == error_mark_node
4698       || arg3 == error_mark_node)
4699     return error_mark_node;
4700
4701   /* This can happen if a template takes all non-type parameters, e.g.
4702      undeclared_template<1, 5, 72>a;  */
4703   if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
4704     {
4705       cp_error ("`%D' must be declared before use", arg1);
4706       return error_mark_node;
4707     }
4708
4709   if (code == MODIFY_EXPR)
4710     {
4711       code2 = TREE_CODE (arg3);
4712       arg3 = NULL_TREE;
4713       fnname = ansi_assopname[code2];
4714     }
4715   else
4716     fnname = ansi_opname[code];
4717
4718   switch (code)
4719     {
4720     case NEW_EXPR:
4721     case VEC_NEW_EXPR:
4722       {
4723         tree rval;
4724
4725         arglist = scratch_tree_cons (NULL_TREE, arg2, arg3);
4726         if (flags & LOOKUP_GLOBAL)
4727           return build_new_function_call
4728             (lookup_name_nonclass (fnname), arglist);
4729
4730         /* FIXME */
4731         rval = build_method_call
4732           (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node),
4733                                "new"),
4734            fnname, arglist, NULL_TREE, flags);
4735         if (rval == error_mark_node)
4736           /* User might declare fancy operator new, but invoke it
4737              like standard one.  */
4738           return rval;
4739
4740         TREE_TYPE (rval) = arg1;
4741         TREE_CALLS_NEW (rval) = 1;
4742         return rval;
4743       }
4744
4745     case VEC_DELETE_EXPR:
4746     case DELETE_EXPR:
4747       {
4748         tree rval;
4749
4750         if (flags & LOOKUP_GLOBAL)
4751           return build_new_function_call
4752             (lookup_name_nonclass (fnname),
4753              build_scratch_list (NULL_TREE, arg1));
4754
4755         arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4756
4757         arg1 = TREE_TYPE (arg1);
4758
4759         /* This handles the case where we're trying to delete
4760            X (*a)[10];
4761            a=new X[5][10];
4762            delete[] a; */
4763            
4764         if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
4765           {
4766             /* Strip off the pointer and the array.  */
4767             arg1 = TREE_TYPE (TREE_TYPE (arg1));
4768
4769             while (TREE_CODE (arg1) == ARRAY_TYPE)
4770                 arg1 = (TREE_TYPE (arg1));
4771
4772             arg1 = build_pointer_type (arg1);
4773           }
4774
4775         /* FIXME */
4776         rval = build_method_call
4777           (build_indirect_ref (build1 (NOP_EXPR, arg1,
4778                                        error_mark_node),
4779                                NULL_PTR),
4780            fnname, arglist, NULL_TREE, flags);
4781 #if 0
4782         /* This can happen when operator delete is protected.  */
4783         my_friendly_assert (rval != error_mark_node, 250);
4784         TREE_TYPE (rval) = void_type_node;
4785 #endif
4786         return rval;
4787       }
4788
4789     case CALL_EXPR:
4790       return build_object_call (arg1, arg2);
4791
4792     default:
4793       break;
4794     }
4795
4796   /* The comma operator can have void args.  */
4797   if (TREE_CODE (arg1) == OFFSET_REF)
4798     arg1 = resolve_offset_ref (arg1);
4799   if (arg2 && TREE_CODE (arg2) == OFFSET_REF)
4800     arg2 = resolve_offset_ref (arg2);
4801   if (arg3 && TREE_CODE (arg3) == OFFSET_REF)
4802     arg3 = resolve_offset_ref (arg3);
4803
4804   if (code == COND_EXPR)
4805     {
4806       if (arg2 == NULL_TREE
4807           || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4808           || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4809           || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4810               && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4811         goto builtin;
4812     }
4813   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4814            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4815     goto builtin;
4816
4817   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4818     arg2 = integer_zero_node;
4819
4820   if (arg2 && arg3)
4821     arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons
4822                       (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3)));
4823   else if (arg2)
4824     arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4825   else
4826     arglist = build_scratch_list (NULL_TREE, arg1);
4827
4828   fns = lookup_name_nonclass (fnname);
4829   /* + Koenig lookup */
4830
4831   if (fns && TREE_CODE (fns) == TREE_LIST)
4832     fns = TREE_VALUE (fns);
4833   for (; fns; fns = DECL_CHAIN (fns))
4834     {
4835       if (TREE_CODE (fns) == TEMPLATE_DECL)
4836         {
4837           templates = scratch_tree_cons (NULL_TREE, fns, templates);
4838           candidates 
4839             = add_template_candidate (candidates, fns, NULL_TREE,
4840                                       arglist, TREE_TYPE (fnname),
4841                                       flags); 
4842         }
4843       else
4844         candidates = add_function_candidate (candidates, fns, arglist, flags);
4845     }
4846
4847   if (IS_AGGR_TYPE (TREE_TYPE (arg1)))
4848     fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 0);
4849   else
4850     fns = NULL_TREE;
4851
4852   if (fns)
4853     {
4854       tree fn = TREE_VALUE (fns);
4855       mem_arglist = scratch_tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
4856       for (; fn; fn = DECL_CHAIN (fn))
4857         {
4858           tree this_arglist;
4859
4860           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4861             this_arglist = mem_arglist;
4862           else
4863             this_arglist = arglist;
4864
4865           if (TREE_CODE (fn) == TEMPLATE_DECL)
4866             {
4867               /* A member template. */
4868               templates = scratch_tree_cons (NULL_TREE, fn, templates);
4869               candidates 
4870                 = add_template_candidate (candidates, fn, NULL_TREE,
4871                                           this_arglist,  TREE_TYPE (fnname),
4872                                           flags); 
4873             }
4874           else
4875             candidates = add_function_candidate
4876               (candidates, fn, this_arglist, flags);
4877
4878           if (candidates) 
4879             candidates->basetype_path = TREE_PURPOSE (fns);
4880         }
4881     }
4882
4883   {
4884     tree args[3];
4885
4886     /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4887        to know about two args; a builtin candidate will always have a first
4888        parameter of type bool.  We'll handle that in
4889        build_builtin_candidate.  */
4890     if (code == COND_EXPR)
4891       {
4892         args[0] = arg2;
4893         args[1] = arg3;
4894         args[2] = arg1;
4895       }
4896     else
4897       {
4898         args[0] = arg1;
4899         args[1] = arg2;
4900         args[2] = NULL_TREE;
4901       }
4902
4903     candidates = add_builtin_candidates
4904       (candidates, code, code2, fnname, args, flags);
4905   }
4906
4907   if (! any_viable (candidates))
4908     {
4909       switch (code)
4910         {
4911         case POSTINCREMENT_EXPR:
4912         case POSTDECREMENT_EXPR:
4913           /* Look for an `operator++ (int)'.  If they didn't have
4914              one, then we fall back to the old way of doing things.  */
4915           if (flags & LOOKUP_COMPLAIN)
4916             cp_pedwarn ("no `%D (int)' declared for postfix `%s', trying prefix operator instead",
4917                         fnname, opname_tab [code]);
4918           if (code == POSTINCREMENT_EXPR)
4919             code = PREINCREMENT_EXPR;
4920           else
4921             code = PREDECREMENT_EXPR;   
4922           return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
4923           
4924           /* The caller will deal with these.  */
4925         case ADDR_EXPR:
4926         case COMPOUND_EXPR:
4927         case COMPONENT_REF:
4928           return NULL_TREE;
4929
4930         default:
4931           break;
4932         }
4933       if (flags & LOOKUP_COMPLAIN)
4934         {
4935           op_error (code, code2, arg1, arg2, arg3, "no match");
4936           print_z_candidates (candidates);
4937         }
4938       return error_mark_node;
4939     }
4940   candidates = splice_viable (candidates);
4941   cand = tourney (candidates);
4942
4943   if (cand == 0)
4944     {
4945       if (flags & LOOKUP_COMPLAIN)
4946         {
4947           op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4948           print_z_candidates (candidates);
4949         }
4950       return error_mark_node;
4951     }
4952
4953   if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4954     {
4955       extern int warn_synth;
4956       if (warn_synth
4957           && fnname == ansi_opname[MODIFY_EXPR]
4958           && DECL_ARTIFICIAL (cand->fn)
4959           && candidates->next
4960           && ! candidates->next->next)
4961         {
4962           cp_warning ("using synthesized `%#D' for copy assignment",
4963                       cand->fn);
4964           cp_warning_at ("  where cfront would use `%#D'",
4965                          cand == candidates
4966                          ? candidates->next->fn
4967                          : candidates->fn);
4968         }
4969
4970       if (DECL_FUNCTION_MEMBER_P (cand->fn))
4971         enforce_access (cand->basetype_path, cand->fn);
4972
4973       /* Pedantically, normal function declarations are never considered
4974          to refer to template instantiations, so we only do this with
4975          -fguiding-decls.  */ 
4976       if (flag_guiding_decls && templates && ! cand->template 
4977           && ! DECL_INITIAL (cand->fn)
4978           && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4979         add_maybe_template (cand->fn, templates);
4980
4981       return build_over_call
4982         (cand->fn, cand->convs,
4983          TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
4984          ? mem_arglist : arglist,
4985          LOOKUP_NORMAL);
4986     }
4987
4988   /* Check for comparison of different enum types.  */
4989   switch (code)
4990     {
4991     case GT_EXPR:
4992     case LT_EXPR:
4993     case GE_EXPR:
4994     case LE_EXPR:
4995     case EQ_EXPR:
4996     case NE_EXPR:
4997       if (flag_int_enum_equivalence == 0 
4998           && TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE 
4999           && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE 
5000           && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5001               != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
5002         {
5003           cp_warning ("comparison between `%#T' and `%#T'", 
5004                       TREE_TYPE (arg1), TREE_TYPE (arg2));
5005         }
5006       break;
5007     default:
5008       break;
5009     }
5010
5011   /* We need to strip any leading REF_BIND so that bitfields don't cause
5012      errors.  This should not remove any important conversions, because
5013      builtins don't apply to class objects directly.  */
5014   conv = TREE_VEC_ELT (cand->convs, 0);
5015   if (TREE_CODE (conv) == REF_BIND)
5016     conv = TREE_OPERAND (conv, 0);
5017   arg1 = convert_like (conv, arg1);
5018   if (arg2)
5019     arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
5020   if (arg3)
5021     arg3 = convert_like (TREE_VEC_ELT (cand->convs, 2), arg3);
5022
5023 builtin:
5024   switch (code)
5025     {
5026     case MODIFY_EXPR:
5027       return build_modify_expr (arg1, code2, arg2);
5028
5029     case INDIRECT_REF:
5030       return build_indirect_ref (arg1, "unary *");
5031
5032     case PLUS_EXPR:
5033     case MINUS_EXPR:
5034     case MULT_EXPR:
5035     case TRUNC_DIV_EXPR:
5036     case GT_EXPR:
5037     case LT_EXPR:
5038     case GE_EXPR:
5039     case LE_EXPR:
5040     case EQ_EXPR:
5041     case NE_EXPR:
5042     case MAX_EXPR:
5043     case MIN_EXPR:
5044     case LSHIFT_EXPR:
5045     case RSHIFT_EXPR:
5046     case TRUNC_MOD_EXPR:
5047     case BIT_AND_EXPR:
5048     case BIT_IOR_EXPR:
5049     case BIT_XOR_EXPR:
5050     case TRUTH_ANDIF_EXPR:
5051     case TRUTH_ORIF_EXPR:
5052       return build_binary_op_nodefault (code, arg1, arg2, code);
5053
5054     case CONVERT_EXPR:
5055     case NEGATE_EXPR:
5056     case BIT_NOT_EXPR:
5057     case TRUTH_NOT_EXPR:
5058     case PREINCREMENT_EXPR:
5059     case POSTINCREMENT_EXPR:
5060     case PREDECREMENT_EXPR:
5061     case POSTDECREMENT_EXPR:
5062     case REALPART_EXPR:
5063     case IMAGPART_EXPR:
5064       return build_unary_op (code, arg1, candidates != 0);
5065
5066     case ARRAY_REF:
5067       return build_array_ref (arg1, arg2);
5068
5069     case COND_EXPR:
5070       return build_conditional_expr (arg1, arg2, arg3);
5071
5072     case MEMBER_REF:
5073       return build_m_component_ref
5074         (build_indirect_ref (arg1, NULL_PTR), arg2);
5075
5076       /* The caller will deal with these.  */
5077     case ADDR_EXPR:
5078     case COMPONENT_REF:
5079     case COMPOUND_EXPR:
5080       return NULL_TREE;
5081
5082     default:
5083       my_friendly_abort (367);
5084     }
5085 }
5086
5087 /* Build up a call to operator new.  This has to be handled differently
5088    from other operators in the way lookup is handled; first members are
5089    considered, then globals.  CODE is either NEW_EXPR or VEC_NEW_EXPR.
5090    TYPE is the type to be created.  ARGS are any new-placement args.
5091    FLAGS are the usual overloading flags.  */
5092
5093 tree
5094 build_op_new_call (code, type, args, flags)
5095      enum tree_code code;
5096      tree type, args;
5097      int flags;
5098 {
5099   tree fnname = ansi_opname[code];
5100
5101   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL)
5102       && (TYPE_GETS_NEW (type) & (1 << (code == VEC_NEW_EXPR))))
5103     {
5104       tree dummy = build1 (NOP_EXPR, build_pointer_type (type),
5105                            error_mark_node);
5106       dummy = build_indirect_ref (dummy, "new");
5107       return build_method_call (dummy, fnname, args, NULL_TREE, flags);
5108     }
5109   else
5110     return build_new_function_call (lookup_name_nonclass (fnname), args);
5111 }
5112
5113 /* Build a call to operator delete.  This has to be handled very specially,
5114    because the restrictions on what signatures match are different from all
5115    other call instances.  For a normal delete, only a delete taking (void *)
5116    or (void *, size_t) is accepted.  For a placement delete, only an exact
5117    match with the placement new is accepted.
5118
5119    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5120    ADDR is the pointer to be deleted.  For placement delete, it is also
5121      used to determine what the corresponding new looked like.
5122    SIZE is the size of the memory block to be deleted.
5123    FLAGS are the usual overloading flags.  */
5124
5125 tree
5126 build_op_delete_call (code, addr, size, flags)
5127      enum tree_code code;
5128      tree addr, size;
5129      int flags;
5130 {
5131   tree fn, fns, fnname, fntype, argtypes, args, type;
5132   int placement;
5133
5134   if (addr == error_mark_node)
5135     return error_mark_node;
5136
5137   type = TREE_TYPE (TREE_TYPE (addr));
5138   fnname = ansi_opname[code];
5139
5140   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
5141     fns = lookup_fnfields (TYPE_BINFO (type), fnname, 0);
5142   else
5143     fns = NULL_TREE;
5144
5145   if (fns)
5146     {
5147       /* Build this up like build_offset_ref does.  */
5148       fns = build_tree_list (error_mark_node, fns);
5149       TREE_TYPE (fns) = build_offset_type (type, unknown_type_node);
5150     }
5151   else
5152     fns = lookup_name_nonclass (fnname);
5153
5154   /* We can recognize a placement delete because of LOOKUP_SPECULATIVELY;
5155      if we are doing placement delete we do nothing if we don't find a
5156      matching op delete.  */
5157   placement = !!(flags & LOOKUP_SPECULATIVELY);
5158   if (placement)
5159     {
5160       /* If placement, we are coming from build_new, and we know that addr
5161          is the allocation expression, so extract the info we need from it.
5162          Obviously, if the build_new process changes this may have to
5163          change as well.  */
5164
5165       /* The NOP_EXPR.  */
5166       tree t = TREE_OPERAND (addr, 1);
5167       /* The CALL_EXPR.  */
5168       t = TREE_OPERAND (t, 0);
5169       /* The function.  */
5170       argtypes = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
5171       /* The second parm type.  */
5172       argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (argtypes)));
5173       /* The second argument.  */
5174       args = TREE_CHAIN (TREE_OPERAND (t, 1));
5175
5176       /* Pull the dummy var out of the TARGET_EXPR for use in our call.  */
5177       addr = TREE_OPERAND (addr, 0);
5178     }
5179   else
5180     {
5181       /* First try it without the size argument.  */
5182       argtypes = void_list_node;
5183       args = NULL_TREE;
5184     }
5185
5186   argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
5187   fntype = build_function_type (void_type_node, argtypes);
5188
5189   /* Strip const and volatile from addr.  */
5190   if (type != TYPE_MAIN_VARIANT (type))
5191     addr = cp_convert (build_pointer_type (TYPE_MAIN_VARIANT (type)), addr);
5192
5193   /* instantiate_type will always return a plain function; pretend it's
5194      overloaded.  */
5195   if (TREE_CODE (fns) == FUNCTION_DECL)
5196     fns = scratch_tree_cons (NULL_TREE, fns, NULL_TREE);
5197
5198   fn = instantiate_type (fntype, fns, 0);
5199
5200   if (fn != error_mark_node)
5201     {
5202       if (TREE_CODE (TREE_VALUE (fns)) == TREE_LIST)
5203         /* Member functions.  */
5204         enforce_access (TREE_PURPOSE (TREE_VALUE (fns)), fn);
5205       return build_function_call (fn, expr_tree_cons (NULL_TREE, addr, args));
5206     }
5207
5208   if (placement)
5209     return NULL_TREE;
5210
5211   /* Normal delete; now try to find a match including the size argument.  */
5212   argtypes = tree_cons (NULL_TREE, ptr_type_node,
5213                         tree_cons (NULL_TREE, sizetype, void_list_node));
5214   fntype = build_function_type (void_type_node, argtypes);
5215
5216   fn = instantiate_type (fntype, fns, 0);
5217
5218   if (fn != error_mark_node)
5219     return build_function_call
5220       (fn, expr_tree_cons (NULL_TREE, addr,
5221                            build_expr_list (NULL_TREE, size)));
5222
5223   cp_error ("no suitable operator delete for `%T'", type);
5224   return error_mark_node;
5225 }
5226
5227 /* If the current scope isn't allowed to access FUNCTION along
5228    BASETYPE_PATH, give an error.  */
5229
5230 static void
5231 enforce_access (basetype_path, function)
5232      tree basetype_path, function;
5233 {
5234   tree access = compute_access (basetype_path, function);
5235
5236   if (access == access_private_node)
5237     {
5238       cp_error_at ("`%+#D' is %s", function, 
5239                    TREE_PRIVATE (function) ? "private"
5240                    : "from private base class");
5241       error ("within this context");
5242     }
5243   else if (access == access_protected_node)
5244     {
5245       cp_error_at ("`%+#D' %s", function,
5246                    TREE_PROTECTED (function) ? "is protected"
5247                    : "has protected accessibility");
5248       error ("within this context");
5249     }
5250 }
5251
5252 /* Perform the conversions in CONVS on the expression EXPR.  */
5253
5254 static tree
5255 convert_like (convs, expr)
5256      tree convs, expr;
5257 {
5258   if (ICS_BAD_FLAG (convs)
5259       && TREE_CODE (convs) != USER_CONV
5260       && TREE_CODE (convs) != AMBIG_CONV)
5261     {
5262       tree t = convs; 
5263       for (; t; t = TREE_OPERAND (t, 0))
5264         {
5265           if (TREE_CODE (t) == USER_CONV)
5266             {
5267               expr = convert_like (t, expr);
5268               break;
5269             }
5270           else if (TREE_CODE (t) == AMBIG_CONV)
5271             return convert_like (t, expr);
5272           else if (TREE_CODE (t) == IDENTITY_CONV)
5273             break;
5274         }
5275       return convert_for_initialization
5276         (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
5277          "conversion", NULL_TREE, 0);
5278     }
5279
5280   switch (TREE_CODE (convs))
5281     {
5282     case USER_CONV:
5283       {
5284         tree fn = TREE_OPERAND (convs, 1);
5285         tree args;
5286         enforce_access (TREE_OPERAND (convs, 3), fn);
5287
5288         if (DECL_CONSTRUCTOR_P (fn))
5289           {
5290             tree t = build_int_2 (0, 0);
5291             TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
5292
5293             args = build_scratch_list (NULL_TREE, expr);
5294             if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5295               args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5296             args = scratch_tree_cons (NULL_TREE, t, args);
5297           }
5298         else
5299           args = build_this (expr);
5300         expr = build_over_call
5301           (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
5302            args, LOOKUP_NORMAL);
5303
5304         /* If this is a constructor or a function returning an aggr type,
5305            we need to build up a TARGET_EXPR.  */
5306         if (DECL_CONSTRUCTOR_P (fn))
5307           expr = build_cplus_new (TREE_TYPE (convs), expr);
5308
5309         return expr;
5310       }
5311     case IDENTITY_CONV:
5312       if (type_unknown_p (expr))
5313         expr = instantiate_type (TREE_TYPE (convs), expr, 1);
5314       if (TREE_READONLY_DECL_P (expr))
5315         expr = decl_constant_value (expr);
5316       return expr;
5317     case AMBIG_CONV:
5318       /* Call build_user_type_conversion again for the error.  */
5319       return build_user_type_conversion
5320         (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
5321
5322     default:
5323       break;
5324     };
5325
5326   expr = convert_like (TREE_OPERAND (convs, 0), expr);
5327   if (expr == error_mark_node)
5328     return error_mark_node;
5329
5330   switch (TREE_CODE (convs))
5331     {
5332     case RVALUE_CONV:
5333       if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
5334         return expr;
5335       /* else fall through */
5336     case BASE_CONV:
5337       return build_user_type_conversion
5338         (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
5339     case REF_BIND:
5340       return convert_to_reference
5341         (TREE_TYPE (convs), expr,
5342          CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
5343          error_mark_node);
5344     case LVALUE_CONV:
5345       return decay_conversion (expr);
5346
5347     default:
5348       break;
5349     }
5350   return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5351                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5352 }
5353
5354 static tree
5355 convert_default_arg (type, arg)
5356      tree type, arg;
5357 {
5358   arg = break_out_target_exprs (arg);
5359
5360   if (TREE_CODE (arg) == CONSTRUCTOR)
5361     {
5362       arg = digest_init (type, arg, 0);
5363       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5364                                         "default argument", 0, 0);
5365     }
5366   else
5367     {
5368       /* This could get clobbered by the following call.  */
5369       if (TREE_HAS_CONSTRUCTOR (arg))
5370         arg = copy_node (arg);
5371
5372       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5373                                         "default argument", 0, 0);
5374 #ifdef PROMOTE_PROTOTYPES
5375       if ((TREE_CODE (type) == INTEGER_TYPE
5376            || TREE_CODE (type) == ENUMERAL_TYPE)
5377           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5378         arg = default_conversion (arg);
5379 #endif
5380     }
5381
5382   return arg;
5383 }
5384
5385 static tree
5386 build_over_call (fn, convs, args, flags)
5387      tree fn, convs, args;
5388      int flags;
5389 {
5390   tree converted_args = NULL_TREE;
5391   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5392   tree conv, arg, val;
5393   int i = 0;
5394   int is_method = 0;
5395
5396   if (args && TREE_CODE (args) != TREE_LIST)
5397     args = build_scratch_list (NULL_TREE, args);
5398   arg = args;
5399
5400   /* The implicit parameters to a constructor are not considered by overload
5401      resolution, and must be of the proper type.  */
5402   if (DECL_CONSTRUCTOR_P (fn))
5403     {
5404       converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5405       arg = TREE_CHAIN (arg);
5406       parm = TREE_CHAIN (parm);
5407       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5408         {
5409           converted_args = expr_tree_cons
5410             (NULL_TREE, TREE_VALUE (arg), converted_args);
5411           arg = TREE_CHAIN (arg);
5412           parm = TREE_CHAIN (parm);
5413         }
5414     }      
5415   /* Bypass access control for 'this' parameter.  */
5416   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5417     {
5418       tree parmtype = TREE_VALUE (parm);
5419       tree argtype = TREE_TYPE (TREE_VALUE (arg));
5420       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5421         {
5422           int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5423                     < TYPE_VOLATILE (TREE_TYPE (argtype)));
5424           int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5425                     < TYPE_READONLY (TREE_TYPE (argtype)));
5426           char *p = (dv && dc ? "const and volatile"
5427                               : dc ? "const" : dv ? "volatile" : "");
5428
5429           cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5430                       TREE_TYPE (argtype), fn, p);
5431         }
5432       converted_args = expr_tree_cons
5433         (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5434          converted_args);
5435       parm = TREE_CHAIN (parm);
5436       arg = TREE_CHAIN (arg);
5437       ++i;
5438       is_method = 1;
5439     }
5440
5441   for (; arg && parm;
5442        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5443     {
5444       tree type = TREE_VALUE (parm);
5445
5446       conv = TREE_VEC_ELT (convs, i);
5447       if (ICS_BAD_FLAG (conv))
5448         {
5449           tree t = conv;
5450           val = TREE_VALUE (arg);
5451
5452           for (; t; t = TREE_OPERAND (t, 0))
5453             {
5454               if (TREE_CODE (t) == USER_CONV
5455                   || TREE_CODE (t) == AMBIG_CONV)
5456                 {
5457                   val = convert_like (t, val);
5458                   break;
5459                 }
5460               else if (TREE_CODE (t) == IDENTITY_CONV)
5461                 break;
5462             }
5463           val = convert_for_initialization
5464             (NULL_TREE, type, val, LOOKUP_NORMAL,
5465              "argument passing", fn, i - is_method);
5466         }
5467       else
5468         val = convert_like (conv, TREE_VALUE (arg));
5469
5470 #ifdef PROMOTE_PROTOTYPES
5471       if ((TREE_CODE (type) == INTEGER_TYPE
5472            || TREE_CODE (type) == ENUMERAL_TYPE)
5473           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5474         val = default_conversion (val);
5475 #endif
5476       converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5477     }
5478
5479   /* Default arguments */
5480   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5481     {
5482       tree arg = TREE_PURPOSE (parm);
5483
5484       if (DECL_TEMPLATE_INFO (fn))
5485         /* This came from a template.  Instantiate the default arg here,
5486            not in tsubst.  */
5487         arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5488                            TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5489       converted_args = expr_tree_cons
5490         (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5491          converted_args);
5492     }
5493
5494   /* Ellipsis */
5495   for (; arg; arg = TREE_CHAIN (arg))
5496     {
5497       val = TREE_VALUE (arg);
5498
5499       if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5500           && (TYPE_PRECISION (TREE_TYPE (val))
5501               < TYPE_PRECISION (double_type_node)))
5502         /* Convert `float' to `double'.  */
5503         val = cp_convert (double_type_node, val);
5504       else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5505                && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5506         cp_warning ("cannot pass objects of type `%T' through `...'",
5507                     TREE_TYPE (val));
5508       else
5509         /* Convert `short' and `char' to full-size `int'.  */
5510         val = default_conversion (val);
5511
5512       converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5513     }
5514
5515   converted_args = nreverse (converted_args);
5516
5517   /* Avoid actually calling copy constructors and copy assignment operators,
5518      if possible.  */
5519   if (DECL_CONSTRUCTOR_P (fn)
5520       && TREE_VEC_LENGTH (convs) == 1
5521       && copy_args_p (fn))
5522     {
5523       tree targ;
5524       arg = TREE_CHAIN (converted_args);
5525       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5526         arg = TREE_CHAIN (arg);
5527       arg = TREE_VALUE (arg);
5528
5529       /* Pull out the real argument, disregarding const-correctness.  */
5530       targ = arg;
5531       while (TREE_CODE (targ) == NOP_EXPR
5532              || TREE_CODE (targ) == NON_LVALUE_EXPR
5533              || TREE_CODE (targ) == CONVERT_EXPR)
5534         targ = TREE_OPERAND (targ, 0);
5535       if (TREE_CODE (targ) == ADDR_EXPR)
5536         {
5537           targ = TREE_OPERAND (targ, 0);
5538           if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5539                            TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5540             targ = NULL_TREE;
5541         }
5542       else
5543         targ = NULL_TREE;
5544
5545       if (targ)
5546         arg = targ;
5547       else
5548         arg = build_indirect_ref (arg, 0);
5549
5550       /* [class.copy]: the copy constructor is implicitly defined even if
5551          the implementation elided its use.  */
5552       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5553         mark_used (fn);
5554
5555       /* If we're creating a temp and we already have one, don't create a
5556          new one.  If we're not creating a temp but we get one, use
5557          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
5558          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5559          temp or an INIT_EXPR otherwise.  */
5560       if (integer_zerop (TREE_VALUE (args)))
5561         {
5562           if (! real_lvalue_p (arg))
5563             return arg;
5564           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5565             {
5566               val = build (VAR_DECL, DECL_CONTEXT (fn));
5567               layout_decl (val, 0);
5568               val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5569               TREE_SIDE_EFFECTS (val) = 1;
5570               return val;
5571             }
5572         }
5573       else if (! real_lvalue_p (arg)
5574                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5575         {
5576           tree to = stabilize_reference
5577             (build_indirect_ref (TREE_VALUE (args), 0));
5578           val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5579           TREE_SIDE_EFFECTS (val) = 1;
5580           return build_unary_op (ADDR_EXPR, val, 0);
5581         }
5582     }
5583   else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5584            && copy_args_p (fn)
5585            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5586     {
5587       tree to = stabilize_reference
5588         (build_indirect_ref (TREE_VALUE (converted_args), 0));
5589       arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5590       val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5591       TREE_SIDE_EFFECTS (val) = 1;
5592       return val;
5593     }
5594
5595   mark_used (fn);
5596
5597   if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5598     return build_signature_method_call (fn, converted_args);
5599   else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5600     {
5601       tree t, *p = &TREE_VALUE (converted_args);
5602       tree binfo = get_binfo
5603         (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5604       *p = convert_pointer_to_real (binfo, *p);
5605       if (TREE_SIDE_EFFECTS (*p))
5606         *p = save_expr (*p);
5607       t = build_pointer_type (TREE_TYPE (fn));
5608       fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5609       TREE_TYPE (fn) = t;
5610     }
5611   else if (DECL_INLINE (fn))
5612     fn = inline_conversion (fn);
5613   else
5614     fn = build_addr_func (fn);
5615
5616   fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5617   if (TREE_TYPE (fn) == void_type_node)
5618     return fn;
5619   fn = require_complete_type (fn);
5620   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5621     fn = build_cplus_new (TREE_TYPE (fn), fn);
5622   return convert_from_reference (fn);
5623 }
5624
5625 static tree
5626 build_new_method_call (instance, name, args, basetype_path, flags)
5627      tree instance, name, args, basetype_path;
5628      int flags;
5629 {
5630   struct z_candidate *candidates = 0, *cand;
5631   tree explicit_targs = NULL_TREE;
5632   tree basetype, mem_args, fns, instance_ptr;
5633   tree pretty_name;
5634   tree user_args = args;
5635   tree templates = NULL_TREE;
5636   int template_only = 0;
5637
5638   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5639     {
5640       explicit_targs = TREE_OPERAND (name, 1);
5641       name = TREE_OPERAND (name, 0);
5642       if (TREE_CODE (name) == TEMPLATE_DECL)
5643         name = DECL_NAME (name);
5644       template_only = 1;
5645     }
5646
5647   /* If there is an extra argument for controlling virtual bases,
5648      remove it for error reporting.  */
5649   if (flags & LOOKUP_HAS_IN_CHARGE)
5650     user_args = TREE_CHAIN (args);
5651
5652   args = resolve_args (args);
5653
5654   if (args == error_mark_node)
5655     return error_mark_node;
5656
5657   if (instance == NULL_TREE)
5658     basetype = BINFO_TYPE (basetype_path);
5659   else
5660     {
5661       if (TREE_CODE (instance) == OFFSET_REF)
5662         instance = resolve_offset_ref (instance);
5663       if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5664         instance = convert_from_reference (instance);
5665       basetype = TREE_TYPE (instance);
5666
5667       /* XXX this should be handled before we get here.  */
5668       if (! IS_AGGR_TYPE (basetype)
5669           && ! (TYPE_LANG_SPECIFIC (basetype)
5670                 && (IS_SIGNATURE_POINTER (basetype)
5671                     || IS_SIGNATURE_REFERENCE (basetype))))
5672         {
5673           if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5674             cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5675                       name, instance, basetype);
5676
5677           return error_mark_node;
5678         }
5679
5680       /* If `instance' is a signature pointer/reference and `name' is
5681          not a constructor, we are calling a signature member function.
5682          In that case set the `basetype' to the signature type.  */
5683       if ((IS_SIGNATURE_POINTER (basetype)
5684            || IS_SIGNATURE_REFERENCE (basetype))
5685           && TYPE_IDENTIFIER (basetype) != name)
5686         basetype = SIGNATURE_TYPE (basetype);
5687     }
5688
5689   if (basetype_path == NULL_TREE)
5690     basetype_path = TYPE_BINFO (basetype);
5691
5692   if (instance)
5693     {
5694       instance_ptr = build_this (instance);
5695
5696       if (! template_only)
5697         {
5698           /* XXX this should be handled before we get here.  */
5699           fns = build_field_call (basetype_path, instance_ptr, name, args);
5700           if (fns)
5701             return fns;
5702         }
5703     }
5704   else
5705     {
5706       instance_ptr = build_int_2 (0, 0);
5707       TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5708     }
5709
5710   pretty_name
5711     = (name == ctor_identifier ? constructor_name (basetype) : name);
5712
5713   fns = lookup_fnfields (basetype_path, name, 1);
5714
5715   if (fns == error_mark_node)
5716     return error_mark_node;
5717   if (fns)
5718     {
5719       tree t = TREE_VALUE (fns);
5720       if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5721           && ! (flags & LOOKUP_HAS_IN_CHARGE))
5722         {
5723           flags |= LOOKUP_HAS_IN_CHARGE;
5724           args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5725         }
5726       mem_args = scratch_tree_cons (NULL_TREE, instance_ptr, args);
5727       for (; t; t = DECL_CHAIN (t))
5728         {
5729           tree this_arglist;
5730
5731           /* We can end up here for copy-init of same or base class.  */
5732           if (name == ctor_identifier
5733               && (flags & LOOKUP_ONLYCONVERTING)
5734               && DECL_NONCONVERTING_P (t))
5735             continue;
5736           if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5737             this_arglist = mem_args;
5738           else
5739             this_arglist = args;
5740
5741           if (TREE_CODE (t) == TEMPLATE_DECL)
5742             {
5743               /* A member template. */
5744               templates = scratch_tree_cons (NULL_TREE, t, templates);
5745               candidates = 
5746                 add_template_candidate (candidates, t, explicit_targs,
5747                                         this_arglist,
5748                                         TREE_TYPE (name), flags); 
5749             }
5750           else if (! template_only)
5751             candidates = add_function_candidate (candidates, t,
5752                                                  this_arglist, flags);
5753
5754           if (candidates)
5755             candidates->basetype_path = TREE_PURPOSE (fns);
5756         }
5757     }
5758
5759   if (! any_viable (candidates))
5760     {
5761       /* XXX will LOOKUP_SPECULATIVELY be needed when this is done?  */
5762       if (flags & LOOKUP_SPECULATIVELY)
5763         return NULL_TREE;
5764       cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5765                 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5766       print_z_candidates (candidates);
5767       return error_mark_node;
5768     }
5769   candidates = splice_viable (candidates);
5770   cand = tourney (candidates);
5771
5772   if (cand == 0)
5773     {
5774       cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5775                 user_args);
5776       print_z_candidates (candidates);
5777       return error_mark_node;
5778     }
5779
5780   enforce_access (cand->basetype_path, cand->fn);
5781   if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5782       && instance == current_class_ref
5783       && DECL_CONSTRUCTOR_P (current_function_decl)
5784       && ! (flags & LOOKUP_NONVIRTUAL)
5785       && value_member (cand->fn, get_abstract_virtuals (basetype)))
5786     cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5787   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5788       && TREE_CODE (instance_ptr) == NOP_EXPR
5789       && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5790     cp_error ("cannot call member function `%D' without object", cand->fn);
5791
5792   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5793       && ((instance == current_class_ref && (dtor_label || ctor_label))
5794           || resolves_to_fixed_type_p (instance, 0)))
5795     flags |= LOOKUP_NONVIRTUAL;
5796
5797   /* Pedantically, normal function declarations are never considered
5798      to refer to template instantiations, so we only do this with
5799      -fguiding-decls.  */ 
5800   if (flag_guiding_decls && templates && ! cand->template 
5801       && ! DECL_INITIAL (cand->fn))
5802     add_maybe_template (cand->fn, templates);
5803
5804   return build_over_call
5805     (cand->fn, cand->convs,
5806      TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5807      flags);
5808 }
5809
5810 /* Compare two implicit conversion sequences that differ only in their
5811    qualification conversion.  Subroutine of compare_ics.  */
5812
5813 static int
5814 compare_qual (ics1, ics2)
5815      tree ics1, ics2;
5816 {
5817   tree to1 = TREE_TYPE (ics1);
5818   tree to2 = TREE_TYPE (ics2);
5819
5820   if (TYPE_PTRMEMFUNC_P (to1))
5821     to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1);
5822   if (TYPE_PTRMEMFUNC_P (to2))
5823     to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2);
5824
5825   to1 = TREE_TYPE (to1);
5826   to2 = TREE_TYPE (to2);
5827
5828   if (TREE_CODE (to1) == OFFSET_TYPE)
5829     {
5830       to1 = TREE_TYPE (to1);
5831       to2 = TREE_TYPE (to2);
5832     }
5833
5834   if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5835       && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5836     return -1;
5837   else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5838            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5839     return -1;
5840   else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5841            && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5842     return 1;
5843   else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5844            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5845     return 1;
5846   return 0;
5847 }
5848
5849 /* Determine whether standard conversion sequence ICS1 is a proper
5850    subsequence of ICS2.  We assume that a conversion of the same code
5851    between the same types indicates a subsequence.  */
5852
5853 static int
5854 is_subseq (ics1, ics2)
5855      tree ics1, ics2;
5856 {
5857   /* Do not consider lvalue transformations here.  */
5858   if (TREE_CODE (ics2) == RVALUE_CONV
5859       || TREE_CODE (ics2) == LVALUE_CONV)
5860     return 0;
5861
5862   for (;; ics2 = TREE_OPERAND (ics2, 0))
5863     {
5864       if (TREE_CODE (ics2) == TREE_CODE (ics1)
5865           && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
5866           && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5867                         TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
5868         return 1;
5869
5870       if (TREE_CODE (ics2) == USER_CONV
5871           || TREE_CODE (ics2) == AMBIG_CONV
5872           || TREE_CODE (ics2) == IDENTITY_CONV)
5873         return 0;
5874     }
5875 }
5876
5877 /* Compare two implicit conversion sequences according to the rules set out in
5878    [over.ics.rank].  Return values:
5879
5880       1: ics1 is better than ics2
5881      -1: ics2 is better than ics1
5882       0: ics1 and ics2 are indistinguishable */
5883
5884 static int
5885 compare_ics (ics1, ics2)
5886      tree ics1, ics2;
5887 {
5888   tree main1, main2;
5889
5890   if (TREE_CODE (ics1) == QUAL_CONV)
5891     main1 = TREE_OPERAND (ics1, 0);
5892   else
5893     main1 = ics1;
5894
5895   if (TREE_CODE (ics2) == QUAL_CONV)
5896     main2 = TREE_OPERAND (ics2, 0);
5897   else
5898     main2 = ics2;
5899
5900   /* Conversions for `this' are PTR_CONVs, but we compare them as though
5901      they were REF_BINDs.  */
5902   if (ICS_THIS_FLAG (ics1))
5903     {
5904       tree t = main1;
5905       if (TREE_CODE (t) == PTR_CONV)
5906         t = TREE_OPERAND (t, 0);
5907       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5908       t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5909       ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5910       main1 = ics1 = t;
5911     }
5912   if (ICS_THIS_FLAG (ics2))
5913     {
5914       tree t = main2;
5915       if (TREE_CODE (t) == PTR_CONV)
5916         t = TREE_OPERAND (t, 0);
5917       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5918       t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5919       ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5920       main2 = ics2 = t;
5921     }
5922
5923   if (ICS_RANK (ics1) > ICS_RANK (ics2))
5924     return -1;
5925   else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5926     return 1;
5927
5928   if (ICS_RANK (ics1) == BAD_RANK)
5929     {
5930       if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5931           || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5932         return -1;
5933       else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5934                || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5935         return 1;
5936
5937       /* else fall through */
5938     }
5939
5940   /* User-defined  conversion sequence U1 is a better conversion sequence
5941      than another user-defined conversion sequence U2 if they contain the
5942      same user-defined conversion operator or constructor and if the sec-
5943      ond standard conversion sequence of U1 is  better  than  the  second
5944      standard conversion sequence of U2.  */
5945
5946   if (ICS_USER_FLAG (ics1))
5947     {
5948       tree t1, t2;
5949
5950       for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5951         if (TREE_CODE (t1) == AMBIG_CONV)
5952           return 0;
5953       for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5954         if (TREE_CODE (t2) == AMBIG_CONV)
5955           return 0;
5956
5957       if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5958         return 0;
5959       else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5960         return -1;
5961       else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5962         return 1;
5963
5964       /* else fall through */
5965     }
5966
5967 #if 0 /* Handled by ranking */
5968   /* A conversion that is not a conversion of a pointer,  or  pointer  to
5969      member,  to  bool  is  better than another conversion that is such a
5970      conversion.  */
5971 #endif
5972
5973   if (TREE_CODE (main1) != TREE_CODE (main2))
5974     {
5975       /* ...if S1  is  a  proper  subsequence  of  S2  */
5976       if (is_subseq (main1, main2))
5977         return 1;
5978       if (is_subseq (main2, main1))
5979         return -1;
5980       return 0;
5981     }
5982
5983   if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5984       || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5985     {
5986       tree to1 = TREE_TYPE (main1);
5987       tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5988       tree to2 = TREE_TYPE (main2);
5989       tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5990       int distf, distt;
5991
5992       /* Standard conversion sequence S1 is a better conversion sequence than
5993          standard conversion sequence S2 if...
5994
5995          S1 and S2 differ only in their qualification conversion  and  they
5996          yield types identical except for cv-qualifiers and S2 adds all the
5997          qualifiers that S1 adds (and in the same places) and S2  adds  yet
5998          more  cv-qualifiers  than  S1,  or the similar case with reference
5999          binding15).  */
6000       if (TREE_CODE (main1) == REF_BIND)
6001         {
6002           if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
6003               == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
6004             return compare_qual (ics1, ics2);
6005         }
6006       else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
6007         return compare_qual (ics1, ics2);
6008         
6009       if (TYPE_PTRMEMFUNC_P (to1))
6010         {
6011           to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
6012           from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
6013         }
6014       else if (TREE_CODE (main1) != BASE_CONV)
6015         {
6016           to1 = TREE_TYPE (to1);
6017           if (TREE_CODE (main1) != REF_BIND)
6018             from1 = TREE_TYPE (from1);
6019
6020           if (TREE_CODE (to1) == OFFSET_TYPE)
6021             {
6022               to1 = TYPE_OFFSET_BASETYPE (to1);
6023               from1 = TYPE_OFFSET_BASETYPE (from1);
6024             }
6025         }
6026
6027       if (TYPE_PTRMEMFUNC_P (to2))
6028         {
6029           to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
6030           from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
6031         }
6032       else if (TREE_CODE (main1) != BASE_CONV)
6033         {
6034           to2 = TREE_TYPE (to2);
6035           if (TREE_CODE (main1) != REF_BIND)
6036             from2 = TREE_TYPE (from2);
6037
6038           if (TREE_CODE (to2) == OFFSET_TYPE)
6039             {
6040               to2 = TYPE_OFFSET_BASETYPE (to2);
6041               from2 = TYPE_OFFSET_BASETYPE (from2);
6042             }
6043         }
6044
6045       if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
6046         return 0;
6047
6048       /* The sense of pmem conversions is reversed from that of the other
6049          conversions.  */
6050       if (TREE_CODE (main1) == PMEM_CONV)
6051         {
6052           tree t = from1; from1 = from2; from2 = t;
6053           t = to1; to1 = to2; to2 = t;
6054         }
6055
6056       distf = get_base_distance (from1, from2, 0, 0);
6057       if (distf == -1)
6058         {
6059           distf = -get_base_distance (from2, from1, 0, 0);
6060           if (distf == 1)
6061             return 0;
6062         }
6063
6064       /* If class B is derived directly or indirectly from class A,
6065          conver- sion of B* to A* is better than conversion of B* to
6066          void*, and conversion of A* to void* is better than
6067          conversion of B* to void*.  */
6068
6069       if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
6070         {
6071           if (distf > 0)
6072             return 1;
6073           else if (distf < 0)
6074             return -1;
6075         }
6076       else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
6077                && get_base_distance (to1, from1, 0, 0) != -1)
6078         return 1;
6079       else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
6080                && get_base_distance (to2, from2, 0, 0) != -1)
6081         return -1;
6082
6083       if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
6084         return 0;
6085
6086       /* If  class B is derived directly or indirectly from class A and class
6087          C is derived directly or indirectly from B */
6088
6089       distt = get_base_distance (to1, to2, 0, 0);
6090       if (distt == -1)
6091         {
6092           distt = -get_base_distance (to2, to1, 0, 0);
6093           if (distt == 1)
6094             return 0;
6095         }
6096
6097       /* --conversion of C* to B* is better than conversion of C* to A*, */
6098       if (distf == 0)
6099         {
6100           if (distt > 0)
6101             return -1;
6102           else if (distt < 0)
6103             return 1;
6104         }
6105       /* --conversion of B* to A* is better than conversion of C* to A*, */
6106       else if (distt == 0)
6107         {
6108           if (distf > 0)
6109             return 1;
6110           else if (distf < 0)
6111             return -1;
6112         }
6113     }
6114   else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
6115            || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
6116     {
6117       if (TREE_TYPE (main1) == TREE_TYPE (main2))
6118         return compare_qual (ics1, ics2);
6119
6120 #if 0 /* This is now handled by making identity better than anything else.  */
6121       /* existing practice, not WP-endorsed: const char * -> const char *
6122          is better than char * -> const char *.  (jason 6/29/96) */
6123       if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
6124         return -compare_qual (main1, main2);
6125 #endif
6126     }
6127
6128   return 0;
6129 }
6130
6131 /* The source type for this standard conversion sequence.  */
6132
6133 static tree
6134 source_type (t)
6135      tree t;
6136 {
6137   for (;; t = TREE_OPERAND (t, 0))
6138     {
6139       if (TREE_CODE (t) == USER_CONV
6140           || TREE_CODE (t) == AMBIG_CONV
6141           || TREE_CODE (t) == IDENTITY_CONV)
6142         return TREE_TYPE (t);
6143     }
6144   my_friendly_abort (1823);
6145 }
6146
6147 /* Compare two candidates for overloading as described in
6148    [over.match.best].  Return values:
6149
6150       1: cand1 is better than cand2
6151      -1: cand2 is better than cand1
6152       0: cand1 and cand2 are indistinguishable */
6153
6154 static int
6155 joust (cand1, cand2)
6156      struct z_candidate *cand1, *cand2;
6157 {
6158   int winner = 0;
6159   int i, off1 = 0, off2 = 0, len;
6160
6161   /* Candidates that involve bad conversions are always worse than those
6162      that don't.  */
6163   if (cand1->viable > cand2->viable)
6164     return 1;
6165   if (cand1->viable < cand2->viable)
6166     return -1;
6167
6168   /* a viable function F1
6169      is defined to be a better function than another viable function F2  if
6170      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
6171      ICSi(F2), and then */
6172
6173   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
6174      ICSj(F2) */
6175
6176   /* For comparing static and non-static member functions, we ignore the
6177      implicit object parameter of the non-static function.  The WP says to
6178      pretend that the static function has an object parm, but that won't
6179      work with operator overloading.  */
6180   len = TREE_VEC_LENGTH (cand1->convs);
6181   if (len != TREE_VEC_LENGTH (cand2->convs))
6182     {
6183       if (DECL_STATIC_FUNCTION_P (cand1->fn)
6184           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
6185         off2 = 1;
6186       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
6187                && DECL_STATIC_FUNCTION_P (cand2->fn))
6188         {
6189           off1 = 1;
6190           --len;
6191         }
6192       else
6193         my_friendly_abort (42);
6194     }
6195
6196   for (i = 0; i < len; ++i)
6197     {
6198       tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
6199       tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
6200       int comp = compare_ics (t1, t2);
6201
6202       if (comp != 0)
6203         {
6204 #if 0 /* move this warning to tourney.  */
6205           if (warn_sign_promo
6206               && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
6207               && TREE_CODE (t1) == STD_CONV
6208               && TREE_CODE (t2) == STD_CONV
6209               && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
6210               && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
6211               && (TYPE_PRECISION (TREE_TYPE (t1))
6212                   == TYPE_PRECISION (TREE_TYPE (t2)))
6213               && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
6214                   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
6215                       == ENUMERAL_TYPE)))
6216             {
6217               tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
6218               tree type1, type2;
6219               if (comp > 0)
6220                 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
6221               else
6222                 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
6223
6224               cp_warning ("passing `%T' chooses `%T' over `%T'",
6225                           type, type1, type2);
6226               cp_warning ("  in call to `%D'", DECL_NAME (cand1->fn));
6227             }
6228 #endif
6229
6230           if (winner && comp != winner)
6231             {
6232               winner = 0;
6233               goto tweak;
6234             }
6235           winner = comp;
6236         }
6237     }
6238
6239 #if 0 /* move this warning to tourney.  */
6240   /* warn about confusing overload resolution */
6241   if (winner && cand1->second_conv
6242       && ! DECL_CONSTRUCTOR_P (cand1->fn)
6243       && ! DECL_CONSTRUCTOR_P (cand2->fn))
6244     {
6245       int comp = compare_ics (cand1->second_conv, cand2->second_conv);
6246       if (comp && comp != winner)
6247         {
6248           struct z_candidate *w, *l;
6249           if (winner == 1)
6250             w = cand1, l = cand2;
6251           else
6252             w = cand2, l = cand1;
6253           cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
6254           cp_warning ("  for conversion from `%T' to `%T'",
6255                       TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
6256                       TREE_TYPE (w->second_conv));
6257           cp_warning ("  because conversion sequence for `this' argument is better");
6258         }
6259     }
6260 #endif
6261
6262   if (winner)
6263     return winner;
6264
6265   /* or, if not that,
6266      F1 is a non-template function and F2 is a template function */
6267
6268   if (! cand1->template && cand2->template)
6269     return 1;
6270   else if (cand1->template && ! cand2->template)
6271     return -1;
6272   else if (cand1->template && cand2->template)
6273     winner = more_specialized
6274       (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
6275
6276   /* or, if not that,
6277      the  context  is  an  initialization by user-defined conversion (see
6278      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
6279      sequence  from  the return type of F1 to the destination type (i.e.,
6280      the type of the entity being initialized)  is  a  better  conversion
6281      sequence  than the standard conversion sequence from the return type
6282      of F2 to the destination type.  */
6283
6284   if (! winner && cand1->second_conv)
6285     winner = compare_ics (cand1->second_conv, cand2->second_conv);
6286
6287   /* If the built-in candidates are the same, arbitrarily pick one.  */
6288   if (! winner && cand1->fn == cand2->fn
6289       && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6290     {
6291       for (i = 0; i < len; ++i)
6292         if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
6293                          TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
6294           break;
6295       if (i == TREE_VEC_LENGTH (cand1->convs))
6296         return 1;
6297
6298       /* Kludge around broken overloading rules whereby
6299          Integer a, b; test ? a : b; is ambiguous, since there's a builtin
6300          that takes references and another that takes values.  */
6301       if (cand1->fn == ansi_opname[COND_EXPR])
6302         {
6303           tree c1 = TREE_VEC_ELT (cand1->convs, 1);
6304           tree c2 = TREE_VEC_ELT (cand2->convs, 1);
6305           tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
6306           tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
6307
6308           if (comptypes (t1, t2, 1))
6309             {
6310               if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
6311                 return 1;
6312               if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
6313                 return -1;
6314             }
6315         }
6316     }
6317
6318 tweak:
6319
6320   /* Extension: If the worst conversion for one candidate is worse than the
6321      worst conversion for the other, take the first.  */
6322   if (! winner && ! pedantic)
6323     {
6324       int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
6325
6326       for (i = 0; i < len; ++i)
6327         {
6328           if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
6329             rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
6330           if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
6331             rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
6332         }
6333
6334       if (rank1 < rank2)
6335         return 1;
6336       if (rank1 > rank2)
6337         return -1;
6338     }
6339
6340   return winner;
6341 }
6342
6343 /* Given a list of candidates for overloading, find the best one, if any.
6344    This algorithm has a worst case of O(2n) (winner is last), and a best
6345    case of O(n/2) (totally ambiguous); much better than a sorting
6346    algorithm.  */
6347
6348 static struct z_candidate *
6349 tourney (candidates)
6350      struct z_candidate *candidates;
6351 {
6352   struct z_candidate *champ = candidates, *challenger;
6353   int fate;
6354
6355   /* Walk through the list once, comparing each current champ to the next
6356      candidate, knocking out a candidate or two with each comparison.  */
6357
6358   for (challenger = champ->next; challenger; )
6359     {
6360       fate = joust (champ, challenger);
6361       if (fate == 1)
6362         challenger = challenger->next;
6363       else
6364         {
6365           if (fate == 0)
6366             {
6367               champ = challenger->next;
6368               if (champ == 0)
6369                 return 0;
6370             }
6371           else
6372             champ = challenger;
6373
6374           challenger = champ->next;
6375         }
6376     }
6377
6378   /* Make sure the champ is better than all the candidates it hasn't yet
6379      been compared to.  This may do one more comparison than necessary.  Oh
6380      well.  */
6381
6382   for (challenger = candidates; challenger != champ;
6383        challenger = challenger->next)
6384     {
6385       fate = joust (champ, challenger);
6386       if (fate != 1)
6387         return 0;
6388     }
6389
6390   return champ;
6391 }
6392
6393 int
6394 can_convert (to, from)
6395      tree to, from;
6396 {
6397   if (flag_ansi_overloading)
6398     {
6399       tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
6400       return (t && ! ICS_BAD_FLAG (t));
6401     }
6402   else
6403     {
6404       struct harshness_code h;
6405       h = convert_harshness (to, from, NULL_TREE);
6406       return (h.code < USER_CODE) && (h.distance >= 0);
6407     }
6408 }
6409
6410 int
6411 can_convert_arg (to, from, arg)
6412      tree to, from, arg;
6413 {
6414   if (flag_ansi_overloading)
6415     {
6416       tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6417       return (t && ! ICS_BAD_FLAG (t));
6418     }
6419   else
6420     {
6421       struct harshness_code h;
6422       h = convert_harshness (to, from, arg);
6423       return (h.code < USER_CODE) && (h.distance >= 0);
6424     }
6425 }