OSDN Git Service

* init.c (build_new): Use a TARGET_EXPR instead of SAVE_EXPR for
[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 ((IS_AGGR_TYPE (non_reference (from))
3322             || IS_AGGR_TYPE (non_reference (to)))
3323            && (flags & LOOKUP_NO_CONVERSION) == 0)
3324     {
3325       cand = build_user_type_conversion_1
3326         (to, expr, LOOKUP_ONLYCONVERTING);
3327       if (cand)
3328         conv = cand->second_conv;
3329       if ((! conv || ICS_BAD_FLAG (conv))
3330           && TREE_CODE (to) == REFERENCE_TYPE
3331           && (flags & LOOKUP_NO_TEMP_BIND) == 0)
3332         {
3333           cand = build_user_type_conversion_1
3334             (TYPE_MAIN_VARIANT (TREE_TYPE (to)), expr, LOOKUP_ONLYCONVERTING);
3335           if (cand)
3336             {
3337               if (! TYPE_READONLY (TREE_TYPE (to))
3338                   || TYPE_VOLATILE (TREE_TYPE (to)))
3339                 ICS_BAD_FLAG (cand->second_conv) = 1;
3340               if (!conv || (ICS_BAD_FLAG (conv)
3341                             > ICS_BAD_FLAG (cand->second_conv)))
3342                 conv = build_conv (REF_BIND, to, cand->second_conv);
3343             }
3344         }
3345     }
3346
3347   return conv;
3348 }
3349
3350 /* Create an overload candidate for the function or method FN called with
3351    the argument list ARGLIST and add it to CANDIDATES.  FLAGS is passed on
3352    to implicit_conversion.  */
3353
3354 static struct z_candidate *
3355 add_function_candidate (candidates, fn, arglist, flags)
3356      struct z_candidate *candidates;
3357      tree fn, arglist;
3358      int flags;
3359 {
3360   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
3361   int i, len;
3362   tree convs;
3363   tree parmnode = parmlist;
3364   tree argnode = arglist;
3365   int viable = 1;
3366   struct z_candidate *cand;
3367
3368   /* The `this' and `in_chrg' arguments to constructors are not considered
3369      in overload resolution.  */
3370   if (DECL_CONSTRUCTOR_P (fn))
3371     {
3372       parmnode = TREE_CHAIN (parmnode);
3373       argnode = TREE_CHAIN (argnode);
3374       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
3375         {
3376           parmnode = TREE_CHAIN (parmnode);
3377           argnode = TREE_CHAIN (argnode);
3378         }
3379     }
3380
3381   len = list_length (argnode);
3382   convs = make_scratch_vec (len);
3383
3384   for (i = 0; i < len; ++i)
3385     {
3386       tree arg = TREE_VALUE (argnode);
3387       tree argtype = TREE_TYPE (arg);
3388       tree t;
3389
3390       argtype = cp_build_type_variant
3391         (argtype, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg));
3392
3393       if (parmnode == void_list_node)
3394         break;
3395       else if (parmnode)
3396         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3397       else
3398         {
3399           t = build1 (IDENTITY_CONV, argtype, arg);
3400           ICS_ELLIPSIS_FLAG (t) = 1;
3401         }
3402
3403       if (i == 0 && t && TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
3404           && ! DECL_CONSTRUCTOR_P (fn))
3405         ICS_THIS_FLAG (t) = 1;
3406
3407       TREE_VEC_ELT (convs, i) = t;
3408       if (! t)
3409         break;
3410
3411       if (ICS_BAD_FLAG (t))
3412         viable = -1;
3413
3414       if (parmnode)
3415         parmnode = TREE_CHAIN (parmnode);
3416       argnode = TREE_CHAIN (argnode);
3417     }
3418
3419   if (i < len)
3420     viable = 0;
3421
3422   /* Make sure there are default args for the rest of the parms.  */
3423   for (; parmnode && parmnode != void_list_node;
3424        parmnode = TREE_CHAIN (parmnode))
3425     if (! TREE_PURPOSE (parmnode))
3426       {
3427         viable = 0;
3428         break;
3429       }
3430
3431   cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3432
3433   cand->fn = fn;
3434   cand->convs = convs;
3435   cand->second_conv = NULL_TREE;
3436   cand->viable = viable;
3437   cand->basetype_path = NULL_TREE;
3438   cand->template = NULL_TREE;
3439   cand->next = candidates;
3440
3441   return cand;
3442 }
3443
3444 /* Create an overload candidate for the conversion function FN which will
3445    be invoked for expression OBJ, producing a pointer-to-function which
3446    will in turn be called with the argument list ARGLIST, and add it to
3447    CANDIDATES.  FLAGS is passed on to implicit_conversion.  */
3448
3449 static struct z_candidate *
3450 add_conv_candidate (candidates, fn, obj, arglist)
3451      struct z_candidate *candidates;
3452      tree fn, obj, arglist;
3453 {
3454   tree totype = TREE_TYPE (TREE_TYPE (fn));
3455   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
3456   int i, len = list_length (arglist) + 1;
3457   tree convs = make_scratch_vec (len);
3458   tree parmnode = parmlist;
3459   tree argnode = arglist;
3460   int viable = 1;
3461   struct z_candidate *cand;
3462   int flags = LOOKUP_NORMAL;
3463
3464   for (i = 0; i < len; ++i)
3465     {
3466       tree arg = i == 0 ? obj : TREE_VALUE (argnode);
3467       tree argtype = lvalue_type (arg);
3468       tree t;
3469
3470       if (i == 0)
3471         t = implicit_conversion (totype, argtype, arg, flags);
3472       else if (parmnode == void_list_node)
3473         break;
3474       else if (parmnode)
3475         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3476       else
3477         {
3478           t = build1 (IDENTITY_CONV, argtype, arg);
3479           ICS_ELLIPSIS_FLAG (t) = 1;
3480         }
3481
3482       TREE_VEC_ELT (convs, i) = t;
3483       if (! t)
3484         break;
3485
3486       if (ICS_BAD_FLAG (t))
3487         viable = -1;
3488
3489       if (i == 0)
3490         continue;
3491
3492       if (parmnode)
3493         parmnode = TREE_CHAIN (parmnode);
3494       argnode = TREE_CHAIN (argnode);
3495     }
3496
3497   if (i < len)
3498     viable = 0;
3499
3500   for (; parmnode && parmnode != void_list_node;
3501        parmnode = TREE_CHAIN (parmnode))
3502     if (! TREE_PURPOSE (parmnode))
3503       {
3504         viable = 0;
3505         break;
3506       }
3507
3508   cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3509
3510   cand->fn = fn;
3511   cand->convs = convs;
3512   cand->second_conv = NULL_TREE;
3513   cand->viable = viable;
3514   cand->basetype_path = NULL_TREE;
3515   cand->template = NULL_TREE;
3516   cand->next = candidates;
3517
3518   return cand;
3519 }
3520
3521 static struct z_candidate *
3522 build_builtin_candidate (candidates, fnname, type1, type2,
3523                          args, argtypes, flags)
3524      struct z_candidate *candidates;
3525      tree fnname, type1, type2, *args, *argtypes;
3526      int flags;
3527
3528 {
3529   tree t, convs;
3530   int viable = 1, i;
3531   struct z_candidate *cand;
3532   tree types[2];
3533
3534   types[0] = type1;
3535   types[1] = type2;
3536
3537   convs = make_scratch_vec (args[2] ? 3 : (args[1] ? 2 : 1));
3538
3539   for (i = 0; i < 2; ++i)
3540     {
3541       if (! args[i])
3542         break;
3543
3544       t = implicit_conversion (types[i], argtypes[i], args[i], flags);
3545       if (! t)
3546         {
3547           viable = 0;
3548           /* We need something for printing the candidate.  */
3549           t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
3550         }
3551       else if (ICS_BAD_FLAG (t))
3552         viable = 0;
3553       TREE_VEC_ELT (convs, i) = t;
3554     }
3555
3556   /* For COND_EXPR we rearranged the arguments; undo that now.  */
3557   if (args[2])
3558     {
3559       TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
3560       TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
3561       t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
3562       if (t)
3563         TREE_VEC_ELT (convs, 0) = t;
3564       else
3565         viable = 0;
3566     }      
3567
3568   cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3569
3570   cand->fn = fnname;
3571   cand->convs = convs;
3572   cand->second_conv = NULL_TREE;
3573   cand->viable = viable;
3574   cand->basetype_path = NULL_TREE;
3575   cand->template = NULL_TREE;
3576   cand->next = candidates;
3577
3578   return cand;
3579 }
3580
3581 static int
3582 is_complete (t)
3583      tree t;
3584 {
3585   return TYPE_SIZE (complete_type (t)) != NULL_TREE;
3586 }
3587
3588 /* Create any builtin operator overload candidates for the operator in
3589    question given the converted operand types TYPE1 and TYPE2.  The other
3590    args are passed through from add_builtin_candidates to
3591    build_builtin_candidate.  */
3592
3593 static struct z_candidate *
3594 add_builtin_candidate (candidates, code, code2, fnname, type1, type2,
3595                        args, argtypes, flags)
3596      struct z_candidate *candidates;
3597      enum tree_code code, code2;
3598      tree fnname, type1, type2, *args, *argtypes;
3599      int flags;
3600 {
3601   switch (code)
3602     {
3603     case POSTINCREMENT_EXPR:
3604     case POSTDECREMENT_EXPR:
3605       args[1] = integer_zero_node;
3606       type2 = integer_type_node;
3607     }
3608
3609   switch (code)
3610     {
3611
3612 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
3613      and  VQ  is  either  volatile or empty, there exist candidate operator
3614      functions of the form
3615              VQ T&   operator++(VQ T&);
3616              T       operator++(VQ T&, int);
3617    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
3618      type  other than bool, and VQ is either volatile or empty, there exist
3619      candidate operator functions of the form
3620              VQ T&   operator--(VQ T&);
3621              T       operator--(VQ T&, int);
3622    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
3623      complete  object type, and VQ is either volatile or empty, there exist
3624      candidate operator functions of the form
3625              T*VQ&   operator++(T*VQ&);
3626              T*VQ&   operator--(T*VQ&);
3627              T*      operator++(T*VQ&, int);
3628              T*      operator--(T*VQ&, int);  */
3629
3630     case POSTDECREMENT_EXPR:
3631     case PREDECREMENT_EXPR:
3632       if (TREE_CODE (type1) == BOOLEAN_TYPE)
3633         return candidates;
3634     case POSTINCREMENT_EXPR:
3635     case PREINCREMENT_EXPR:
3636       if ((ARITHMETIC_TYPE_P (type1) && TREE_CODE (type1) != ENUMERAL_TYPE)
3637           || TYPE_PTROB_P (type1))
3638         {
3639           type1 = build_reference_type (type1);
3640           break;
3641         }
3642       return candidates;
3643
3644 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
3645      exist candidate operator functions of the form
3646
3647              T&      operator*(T*);
3648
3649    8 For every function type T, there exist candidate operator functions of
3650      the form
3651              T&      operator*(T*);  */
3652
3653     case INDIRECT_REF:
3654       if (TREE_CODE (type1) == POINTER_TYPE
3655           && (TYPE_PTROB_P (type1)
3656               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
3657         break;
3658       return candidates;
3659
3660 /* 9 For every type T, there exist candidate operator functions of the form
3661              T*      operator+(T*);
3662
3663    10For  every  promoted arithmetic type T, there exist candidate operator
3664      functions of the form
3665              T       operator+(T);
3666              T       operator-(T);  */
3667
3668     case CONVERT_EXPR: /* unary + */
3669       if (TREE_CODE (type1) == POINTER_TYPE
3670           && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
3671         break;
3672     case NEGATE_EXPR:
3673       if (ARITHMETIC_TYPE_P (type1))
3674         break;
3675       return candidates;
3676
3677 /* 11For every promoted integral type T,  there  exist  candidate  operator
3678      functions of the form
3679              T       operator~(T);  */
3680
3681     case BIT_NOT_EXPR:
3682       if (INTEGRAL_TYPE_P (type1))
3683         break;
3684       return candidates;
3685
3686 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
3687      is the same type as C2 or is a derived class of C2, T  is  a  complete
3688      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3689      there exist candidate operator functions of the form
3690              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3691      where CV12 is the union of CV1 and CV2.  */
3692
3693     case MEMBER_REF:
3694       if (TREE_CODE (type1) == POINTER_TYPE
3695           && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
3696         {
3697           tree c1 = TREE_TYPE (type1);
3698           tree c2 = (TYPE_PTRMEMFUNC_P (type2)
3699                      ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
3700                      : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
3701
3702           if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
3703               && (TYPE_PTRMEMFUNC_P (type2)
3704                   || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
3705             break;
3706         }
3707       return candidates;
3708
3709 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
3710      didate operator functions of the form
3711              LR      operator*(L, R);
3712              LR      operator/(L, R);
3713              LR      operator+(L, R);
3714              LR      operator-(L, R);
3715              bool    operator<(L, R);
3716              bool    operator>(L, R);
3717              bool    operator<=(L, R);
3718              bool    operator>=(L, R);
3719              bool    operator==(L, R);
3720              bool    operator!=(L, R);
3721      where  LR  is  the  result of the usual arithmetic conversions between
3722      types L and R.
3723
3724    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
3725      unqualified  complete  object  type and I is a promoted integral type,
3726      there exist candidate operator functions of the form
3727              T*      operator+(T*, I);
3728              T&      operator[](T*, I);
3729              T*      operator-(T*, I);
3730              T*      operator+(I, T*);
3731              T&      operator[](I, T*);
3732
3733    15For every T, where T is a pointer to complete object type, there exist
3734      candidate operator functions of the form112)
3735              ptrdiff_t operator-(T, T);
3736
3737    16For  every pointer type T, there exist candidate operator functions of
3738      the form
3739              bool    operator<(T, T);
3740              bool    operator>(T, T);
3741              bool    operator<=(T, T);
3742              bool    operator>=(T, T);
3743              bool    operator==(T, T);
3744              bool    operator!=(T, T);
3745
3746    17For every pointer to member type T,  there  exist  candidate  operator
3747      functions of the form
3748              bool    operator==(T, T);
3749              bool    operator!=(T, T);  */
3750
3751     case MINUS_EXPR:
3752       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
3753         break;
3754       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3755         {
3756           type2 = ptrdiff_type_node;
3757           break;
3758         }
3759     case MULT_EXPR:
3760     case TRUNC_DIV_EXPR:
3761       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3762         break;
3763       return candidates;
3764
3765     case EQ_EXPR:
3766     case NE_EXPR:
3767       if (TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2)
3768           || TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3769         break;
3770       if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
3771           && null_ptr_cst_p (args[1]))
3772         {
3773           type2 = type1;
3774           break;
3775         }
3776       if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
3777           && null_ptr_cst_p (args[0]))
3778         {
3779           type1 = type2;
3780           break;
3781         }
3782     case LT_EXPR:
3783     case GT_EXPR:
3784     case LE_EXPR:
3785     case GE_EXPR:
3786     case MAX_EXPR:
3787     case MIN_EXPR:
3788       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2)
3789           || TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3790         break;
3791       if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
3792         {
3793           type2 = type1;
3794           break;
3795         }
3796       if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
3797         {
3798           type1 = type2;
3799           break;
3800         }
3801       return candidates;
3802
3803     case PLUS_EXPR:
3804       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3805         break;
3806     case ARRAY_REF:
3807       if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
3808         {
3809           type1 = ptrdiff_type_node;
3810           break;
3811         }
3812       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3813         {
3814           type2 = ptrdiff_type_node;
3815           break;
3816         }
3817       return candidates;
3818
3819 /* 18For  every pair of promoted integral types L and R, there exist candi-
3820      date operator functions of the form
3821              LR      operator%(L, R);
3822              LR      operator&(L, R);
3823              LR      operator^(L, R);
3824              LR      operator|(L, R);
3825              L       operator<<(L, R);
3826              L       operator>>(L, R);
3827      where LR is the result of the  usual  arithmetic  conversions  between
3828      types L and R.  */
3829
3830     case TRUNC_MOD_EXPR:
3831     case BIT_AND_EXPR:
3832     case BIT_IOR_EXPR:
3833     case BIT_XOR_EXPR:
3834     case LSHIFT_EXPR:
3835     case RSHIFT_EXPR:
3836       if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3837         break;
3838       return candidates;
3839
3840 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
3841      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
3842      type, there exist candidate operator functions of the form
3843              VQ L&   operator=(VQ L&, R);
3844              VQ L&   operator*=(VQ L&, R);
3845              VQ L&   operator/=(VQ L&, R);
3846              VQ L&   operator+=(VQ L&, R);
3847              VQ L&   operator-=(VQ L&, R);
3848
3849    20For  every  pair T, VQ), where T is any type and VQ is either volatile
3850      or empty, there exist candidate operator functions of the form
3851              T*VQ&   operator=(T*VQ&, T*);
3852
3853    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
3854      either  volatile or empty, there exist candidate operator functions of
3855      the form
3856              VQ T&   operator=(VQ T&, T);
3857
3858    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
3859      unqualified  complete object type, VQ is either volatile or empty, and
3860      I is a promoted integral type, there exist  candidate  operator  func-
3861      tions of the form
3862              T*VQ&   operator+=(T*VQ&, I);
3863              T*VQ&   operator-=(T*VQ&, I);
3864
3865    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
3866      type, VQ is either volatile or empty, and R  is  a  promoted  integral
3867      type, there exist candidate operator functions of the form
3868
3869              VQ L&   operator%=(VQ L&, R);
3870              VQ L&   operator<<=(VQ L&, R);
3871              VQ L&   operator>>=(VQ L&, R);
3872              VQ L&   operator&=(VQ L&, R);
3873              VQ L&   operator^=(VQ L&, R);
3874              VQ L&   operator|=(VQ L&, R);  */
3875
3876     case MODIFY_EXPR:
3877       switch (code2)
3878         {
3879         case PLUS_EXPR:
3880         case MINUS_EXPR:
3881           if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3882             {
3883               type2 = ptrdiff_type_node;
3884               break;
3885             }
3886         case MULT_EXPR:
3887         case TRUNC_DIV_EXPR:
3888           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3889             break;
3890           return candidates;
3891
3892         case TRUNC_MOD_EXPR:
3893         case BIT_AND_EXPR:
3894         case BIT_IOR_EXPR:
3895         case BIT_XOR_EXPR:
3896         case LSHIFT_EXPR:
3897         case RSHIFT_EXPR:
3898           if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3899             break;
3900           return candidates;
3901
3902         case NOP_EXPR:
3903           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3904             break;
3905           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
3906               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3907               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3908               || ((TYPE_PTRMEMFUNC_P (type1)
3909                    || TREE_CODE (type1) == POINTER_TYPE)
3910                   && null_ptr_cst_p (args[1])))
3911             {
3912               type2 = type1;
3913               break;
3914             }
3915           return candidates;
3916
3917         default:
3918           my_friendly_abort (367);
3919         }
3920       type1 = build_reference_type (type1);
3921       break;
3922
3923     case COND_EXPR:
3924       /* Kludge around broken overloading rules whereby
3925          bool ? const char& : enum is ambiguous
3926          (between int and const char&).  */
3927       flags |= LOOKUP_NO_TEMP_BIND;
3928
3929       /* Extension: Support ?: of enumeral type.  Hopefully this will not
3930          be an extension for long.  */
3931       if (TREE_CODE (type1) == ENUMERAL_TYPE && type1 == type2)
3932         break;
3933       else if (TREE_CODE (type1) == ENUMERAL_TYPE
3934                || TREE_CODE (type2) == ENUMERAL_TYPE)
3935         return candidates;
3936       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3937         break;
3938       if (TREE_CODE (type1) == TREE_CODE (type2)
3939           && (TREE_CODE (type1) == REFERENCE_TYPE
3940               || TREE_CODE (type1) == POINTER_TYPE
3941               || TYPE_PTRMEMFUNC_P (type1)
3942               || IS_AGGR_TYPE (type1)))
3943         break;
3944       if (TREE_CODE (type1) == REFERENCE_TYPE
3945           || TREE_CODE (type2) == REFERENCE_TYPE)
3946         return candidates;
3947       if (((TYPE_PTRMEMFUNC_P (type1) || TREE_CODE (type1) == POINTER_TYPE)
3948            && null_ptr_cst_p (args[1]))
3949           || IS_AGGR_TYPE (type1))
3950         {
3951           type2 = type1;
3952           break;
3953         }
3954       if (((TYPE_PTRMEMFUNC_P (type2) || TREE_CODE (type2) == POINTER_TYPE)
3955            && null_ptr_cst_p (args[0]))
3956           || IS_AGGR_TYPE (type2))
3957         {
3958           type1 = type2;
3959           break;
3960         }
3961       return candidates;
3962
3963     default:
3964       my_friendly_abort (367);
3965     }
3966
3967   /* If we're dealing with two pointer types, we need candidates
3968      for both of them.  */
3969   if (type2 && type1 != type2
3970       && TREE_CODE (type1) == TREE_CODE (type2)
3971       && (TREE_CODE (type1) == REFERENCE_TYPE
3972           || (TREE_CODE (type1) == POINTER_TYPE
3973               && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
3974           || TYPE_PTRMEMFUNC_P (type1)
3975           || IS_AGGR_TYPE (type1)))
3976     {
3977       candidates = build_builtin_candidate
3978         (candidates, fnname, type1, type1, args, argtypes, flags);
3979       return build_builtin_candidate
3980         (candidates, fnname, type2, type2, args, argtypes, flags);
3981     }
3982
3983   return build_builtin_candidate
3984     (candidates, fnname, type1, type2, args, argtypes, flags);
3985 }
3986
3987 tree
3988 type_decays_to (type)
3989      tree type;
3990 {
3991   if (TREE_CODE (type) == ARRAY_TYPE)
3992     return build_pointer_type (TREE_TYPE (type));
3993   if (TREE_CODE (type) == FUNCTION_TYPE)
3994     return build_pointer_type (type);
3995   return type;
3996 }
3997
3998 /* There are three conditions of builtin candidates:
3999
4000    1) bool-taking candidates.  These are the same regardless of the input.
4001    2) pointer-pair taking candidates.  These are generated for each type
4002       one of the input types converts to.
4003    3) arithmetic candidates.  According to the WP, we should generate
4004       all of these, but I'm trying not to... */
4005
4006 static struct z_candidate *
4007 add_builtin_candidates (candidates, code, code2, fnname, args, flags)
4008      struct z_candidate *candidates;
4009      enum tree_code code, code2;
4010      tree fnname, *args;
4011      int flags;
4012 {
4013   int ref1, i;
4014   tree type, argtypes[3], types[2];
4015
4016   for (i = 0; i < 3; ++i)
4017     {
4018       if (args[i])
4019         argtypes[i]  = lvalue_type (args[i]);
4020       else
4021         argtypes[i] = NULL_TREE;
4022     }
4023
4024   switch (code)
4025     {
4026 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
4027      and  VQ  is  either  volatile or empty, there exist candidate operator
4028      functions of the form
4029                  VQ T&   operator++(VQ T&);  */
4030
4031     case POSTINCREMENT_EXPR:
4032     case PREINCREMENT_EXPR:
4033     case POSTDECREMENT_EXPR:
4034     case PREDECREMENT_EXPR:
4035     case MODIFY_EXPR:
4036       ref1 = 1;
4037       break;
4038
4039 /* 24There also exist candidate operator functions of the form
4040              bool    operator!(bool);
4041              bool    operator&&(bool, bool);
4042              bool    operator||(bool, bool);  */
4043
4044     case TRUTH_NOT_EXPR:
4045       return build_builtin_candidate
4046         (candidates, fnname, boolean_type_node,
4047          NULL_TREE, args, argtypes, flags);
4048
4049     case TRUTH_ORIF_EXPR:
4050     case TRUTH_ANDIF_EXPR:
4051       return build_builtin_candidate
4052         (candidates, fnname, boolean_type_node,
4053          boolean_type_node, args, argtypes, flags);
4054
4055     case ADDR_EXPR:
4056     case COMPOUND_EXPR:
4057     case COMPONENT_REF:
4058       return candidates;
4059
4060     default:
4061       ref1 = 0;
4062     }
4063
4064   types[0] = types[1] = NULL_TREE;
4065
4066   for (i = 0; i < 2; ++i)
4067     {
4068       if (! args[i])
4069         ;
4070       else if (IS_AGGR_TYPE (argtypes[i]))
4071         {
4072           tree convs = lookup_conversions (argtypes[i]);
4073
4074           if (code == COND_EXPR)
4075             {
4076               if (real_lvalue_p (args[i]))
4077                 types[i] = scratch_tree_cons
4078                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4079
4080               types[i] = scratch_tree_cons
4081                 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
4082             }
4083                 
4084           else if (! convs || (i == 0 && code == MODIFY_EXPR
4085                                && code2 == NOP_EXPR))
4086             return candidates;
4087
4088           for (; convs; convs = TREE_CHAIN (convs))
4089             {
4090               type = TREE_TYPE (TREE_TYPE (TREE_VALUE (convs)));
4091
4092               if (i == 0 && ref1
4093                   && (TREE_CODE (type) != REFERENCE_TYPE
4094                       || TYPE_READONLY (TREE_TYPE (type))))
4095                 continue;
4096
4097               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
4098                 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4099
4100               type = non_reference (type);
4101               if (i != 0 || ! ref1)
4102                 {
4103                   type = TYPE_MAIN_VARIANT (type_decays_to (type));
4104                   if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4105                     types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4106                   if (INTEGRAL_TYPE_P (type))
4107                     type = type_promotes_to (type);
4108                 }
4109
4110               if (! value_member (type, types[i]))
4111                 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4112             }
4113         }
4114       else
4115         {
4116           if (code == COND_EXPR && real_lvalue_p (args[i]))
4117             types[i] = scratch_tree_cons
4118               (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4119           type = non_reference (argtypes[i]);
4120           if (i != 0 || ! ref1)
4121             {
4122               type = TYPE_MAIN_VARIANT (type_decays_to (type));
4123               if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4124                 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4125               if (INTEGRAL_TYPE_P (type))
4126                 type = type_promotes_to (type);
4127             }
4128           types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4129         }
4130     }
4131
4132   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
4133     {
4134       if (types[1])
4135         for (type = types[1]; type; type = TREE_CHAIN (type))
4136           candidates = add_builtin_candidate
4137             (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4138              TREE_VALUE (type), args, argtypes, flags);
4139       else
4140         candidates = add_builtin_candidate
4141           (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4142            NULL_TREE, args, argtypes, flags);
4143     }
4144
4145   return candidates;
4146 }
4147
4148 /* If TMPL can be successfully instantiated as indicated by
4149    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
4150
4151    TMPL is the template.  EXPLICIT_TARGS are any explicit template arguments.
4152    ARGLIST is the arguments provided at the call-site.  The RETURN_TYPE
4153    is the desired type for conversion operators.  FLAGS are as for
4154    add_function_candidate.  */
4155
4156 static struct z_candidate *
4157 add_template_candidate (candidates, tmpl, explicit_targs, 
4158                         arglist, return_type, flags)
4159      struct z_candidate *candidates;
4160      tree tmpl, explicit_targs, arglist, return_type;
4161      int flags;
4162 {
4163   int ntparms = DECL_NTPARMS (tmpl);
4164   tree targs = make_scratch_vec (ntparms);
4165   struct z_candidate *cand;
4166   int i;
4167   tree fn;
4168
4169   i = fn_type_unification (tmpl, explicit_targs, targs, arglist,
4170                            return_type, 0); 
4171
4172   if (i != 0)
4173     return candidates;
4174
4175   fn = instantiate_template (tmpl, targs);
4176   if (fn == error_mark_node)
4177     return candidates;
4178
4179   cand = add_function_candidate (candidates, fn, arglist, flags);
4180   cand->template = DECL_TEMPLATE_INFO (fn);
4181   return cand;
4182 }
4183
4184
4185 static struct z_candidate *
4186 add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type)
4187      struct z_candidate *candidates;
4188      tree tmpl, obj, arglist, return_type;
4189 {
4190   int ntparms = DECL_NTPARMS (tmpl);
4191   tree targs = make_scratch_vec (ntparms);
4192   struct z_candidate *cand;
4193   int i;
4194   tree fn;
4195
4196   i = fn_type_unification (tmpl, NULL_TREE, targs, arglist, return_type, 0);
4197
4198   if (i != 0)
4199     return candidates;
4200
4201   fn = instantiate_template (tmpl, targs);
4202   if (fn == error_mark_node)
4203     return candidates;
4204
4205   cand = add_conv_candidate (candidates, fn, obj, arglist);
4206   cand->template = DECL_TEMPLATE_INFO (fn);
4207   return cand;
4208 }
4209
4210
4211 static int
4212 any_viable (cands)
4213      struct z_candidate *cands;
4214 {
4215   for (; cands; cands = cands->next)
4216     if (pedantic ? cands->viable == 1 : cands->viable)
4217       return 1;
4218   return 0;
4219 }
4220
4221 static struct z_candidate *
4222 splice_viable (cands)
4223      struct z_candidate *cands;
4224 {
4225   struct z_candidate **p = &cands;
4226
4227   for (; *p; )
4228     {
4229       if (pedantic ? (*p)->viable == 1 : (*p)->viable)
4230         p = &((*p)->next);
4231       else
4232         *p = (*p)->next;
4233     }
4234
4235   return cands;
4236 }
4237
4238 static tree
4239 build_this (obj)
4240      tree obj;
4241 {
4242   /* Fix this to work on non-lvalues.  */
4243   if (IS_SIGNATURE_POINTER (TREE_TYPE (obj))
4244       || IS_SIGNATURE_REFERENCE (TREE_TYPE (obj)))
4245     return obj;
4246   else
4247     return build_unary_op (ADDR_EXPR, obj, 0);
4248 }
4249
4250 static void
4251 print_z_candidates (candidates)
4252      struct z_candidate *candidates;
4253 {
4254   char *str = "candidates are:";
4255   for (; candidates; candidates = candidates->next)
4256     {
4257       if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
4258         {
4259           if (candidates->fn == ansi_opname [COND_EXPR])
4260             cp_error ("%s %D(%T, %T, %T) <builtin>", str, candidates->fn,
4261                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4262                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
4263                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
4264           else if (TREE_VEC_LENGTH (candidates->convs) == 2)
4265             cp_error ("%s %D(%T, %T) <builtin>", str, candidates->fn,
4266                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4267                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
4268           else
4269             cp_error ("%s %D(%T) <builtin>", str, candidates->fn,
4270                       TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
4271         }
4272       else
4273         cp_error_at ("%s %+D%s", str, candidates->fn,
4274                      candidates->viable == -1 ? " <near match>" : "");
4275       str = "               "; 
4276     }
4277 }
4278
4279 /* Returns the best overload candidate to perform the requested
4280    conversion.  This function is used for three the overloading situations
4281    described in [over.match.copy], [over.match.conv], and [over.match.ref].
4282    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
4283    per [dcl.init.ref], so we ignore temporary bindings.  */
4284
4285 static struct z_candidate *
4286 build_user_type_conversion_1 (totype, expr, flags)
4287      tree totype, expr;
4288      int flags;
4289 {
4290   struct z_candidate *candidates, *cand;
4291   tree fromtype = TREE_TYPE (expr);
4292   tree ctors = NULL_TREE, convs = NULL_TREE, *p;
4293   tree args;
4294   tree templates = NULL_TREE;
4295
4296   if (IS_AGGR_TYPE (totype))
4297     ctors = lookup_fnfields (TYPE_BINFO (totype), ctor_identifier, 0);
4298   if (IS_AGGR_TYPE (fromtype)
4299       && (! IS_AGGR_TYPE (totype) || ! DERIVED_FROM_P (totype, fromtype)))
4300     convs = lookup_conversions (fromtype);
4301
4302   candidates = 0;
4303   flags |= LOOKUP_NO_CONVERSION;
4304
4305   if (ctors)
4306     {
4307       tree t = build_int_2 (0, 0);
4308       TREE_TYPE (t) = build_pointer_type (totype);
4309       args = build_scratch_list (NULL_TREE, expr);
4310       if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
4311         args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
4312       args = scratch_tree_cons (NULL_TREE, t, args);
4313
4314       ctors = TREE_VALUE (ctors);
4315     }
4316   for (; ctors; ctors = DECL_CHAIN (ctors))
4317     {
4318       if (DECL_NONCONVERTING_P (ctors))
4319         continue;
4320
4321       if (TREE_CODE (ctors) == TEMPLATE_DECL) 
4322         {
4323           templates = scratch_tree_cons (NULL_TREE, ctors, templates);
4324           candidates = 
4325             add_template_candidate (candidates, ctors,
4326                                     NULL_TREE, args, NULL_TREE, flags);
4327         } 
4328       else 
4329         candidates = add_function_candidate (candidates, ctors,
4330                                              args, flags); 
4331
4332       if (candidates) 
4333         {
4334           candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
4335           candidates->basetype_path = TYPE_BINFO (totype);
4336         } 
4337     }
4338
4339   if (convs)
4340     args = build_scratch_list (NULL_TREE, build_this (expr));
4341
4342   for (; convs; convs = TREE_CHAIN (convs))
4343     {
4344       tree fn = TREE_VALUE (convs);
4345       int convflags = LOOKUP_NO_CONVERSION;
4346       tree ics;
4347
4348       /* If we are called to convert to a reference type, we are trying to
4349          find an lvalue binding, so don't even consider temporaries.  If
4350          we don't find an lvalue binding, the caller will try again to
4351          look for a temporary binding.  */
4352       if (TREE_CODE (totype) == REFERENCE_TYPE)
4353         convflags |= LOOKUP_NO_TEMP_BIND;
4354
4355       ics = implicit_conversion
4356         (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
4357
4358       if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
4359         /* ignore the near match.  */;
4360       else if (ics)
4361         for (; fn; fn = DECL_CHAIN (fn))
4362           {
4363             if (TREE_CODE (fn) == TEMPLATE_DECL)
4364               {
4365                 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4366                 candidates = 
4367                   add_template_candidate (candidates, fn, NULL_TREE,
4368                                           args, totype, flags);
4369               } 
4370             else 
4371               candidates = add_function_candidate (candidates, fn,
4372                                                    args, flags); 
4373
4374             if (candidates) 
4375               {
4376                 candidates->second_conv = ics;
4377                 candidates->basetype_path = TREE_PURPOSE (convs);
4378                 if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
4379                   candidates->viable = -1;
4380               }
4381           }
4382     }
4383
4384   if (! any_viable (candidates))
4385     {
4386 #if 0
4387       if (flags & LOOKUP_COMPLAIN)
4388         {
4389           if (candidates && ! candidates->next)
4390             /* say why this one won't work or try to be loose */;
4391           else
4392             cp_error ("no viable candidates");
4393         }
4394 #endif
4395
4396       return 0;
4397     }
4398
4399   candidates = splice_viable (candidates);
4400   cand = tourney (candidates);
4401
4402   if (cand == 0)
4403     {
4404       if (flags & LOOKUP_COMPLAIN)
4405         {
4406           cp_error ("conversion from `%T' to `%T' is ambiguous",
4407                     fromtype, totype);
4408           print_z_candidates (candidates);
4409         }
4410
4411       cand = candidates;        /* any one will do */
4412       cand->second_conv = build1 (AMBIG_CONV, totype, expr);
4413       ICS_USER_FLAG (cand->second_conv) = 1;
4414       ICS_BAD_FLAG (cand->second_conv) = 1;
4415
4416       return cand;
4417     }
4418
4419   for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
4420     p = &(TREE_OPERAND (*p, 0));
4421
4422   /* Pedantically, normal function declarations are never considered
4423      to refer to template instantiations, so we only do this with
4424      -fguiding-decls.  */ 
4425   if (flag_guiding_decls && templates && ! cand->template 
4426       && !DECL_INITIAL (cand->fn) 
4427       && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4428     add_maybe_template (cand->fn, templates);
4429
4430   *p = build
4431     (USER_CONV,
4432      (DECL_CONSTRUCTOR_P (cand->fn)
4433       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
4434      expr, cand->fn, cand->convs, cand->basetype_path);
4435   ICS_USER_FLAG (cand->second_conv) = 1;
4436   if (cand->viable == -1)
4437     ICS_BAD_FLAG (cand->second_conv) = 1;
4438
4439   return cand;
4440 }
4441
4442 tree
4443 build_user_type_conversion (totype, expr, flags)
4444      tree totype, expr;
4445      int flags;
4446 {
4447   struct z_candidate *cand
4448     = build_user_type_conversion_1 (totype, expr, flags);
4449
4450   if (cand)
4451     {
4452       if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
4453         return error_mark_node;
4454       return convert_from_reference (convert_like (cand->second_conv, expr));
4455     }
4456   return NULL_TREE;
4457 }
4458
4459 /* Do any initial processing on the arguments to a function call.  */
4460
4461 static tree
4462 resolve_args (args)
4463      tree args;
4464 {
4465   tree t;
4466   for (t = args; t; t = TREE_CHAIN (t))
4467     {
4468       if (TREE_VALUE (t) == error_mark_node)
4469         return error_mark_node;
4470       else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
4471         {
4472           error ("invalid use of void expression");
4473           return error_mark_node;
4474         }
4475       else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
4476         TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
4477     }
4478   return args;
4479 }
4480       
4481 tree
4482 build_new_function_call (fn, args)
4483      tree fn, args;
4484 {
4485   struct z_candidate *candidates = 0, *cand;
4486   tree explicit_targs = NULL_TREE;
4487   int template_only = 0;
4488
4489   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4490     {
4491       explicit_targs = TREE_OPERAND (fn, 1);
4492       fn = TREE_OPERAND (fn, 0);
4493       template_only = 1;
4494     }
4495
4496   if (really_overloaded_fn (fn))
4497     {
4498       tree t;
4499       tree templates = NULL_TREE;
4500
4501       args = resolve_args (args);
4502
4503       if (args == error_mark_node)
4504         return error_mark_node;
4505
4506       for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
4507         {
4508           if (TREE_CODE (t) == TEMPLATE_DECL)
4509             {
4510               templates = scratch_tree_cons (NULL_TREE, t, templates);
4511               candidates = add_template_candidate
4512                 (candidates, t, explicit_targs, args, NULL_TREE,
4513                  LOOKUP_NORMAL);  
4514             }
4515           else if (! template_only)
4516             candidates = add_function_candidate
4517               (candidates, t, args, LOOKUP_NORMAL);
4518         }
4519
4520       if (! any_viable (candidates))
4521         {
4522           if (candidates && ! candidates->next)
4523             return build_function_call (candidates->fn, args);
4524           cp_error ("no matching function for call to `%D (%A)'",
4525                     TREE_PURPOSE (fn), args);
4526           if (candidates)
4527             print_z_candidates (candidates);
4528           return error_mark_node;
4529         }
4530       candidates = splice_viable (candidates);
4531       cand = tourney (candidates);
4532
4533       if (cand == 0)
4534         {
4535           cp_error ("call of overloaded `%D (%A)' is ambiguous",
4536                     TREE_PURPOSE (fn), args);
4537           print_z_candidates (candidates);
4538           return error_mark_node;
4539         }
4540
4541       /* Pedantically, normal function declarations are never considered
4542          to refer to template instantiations, so we only do this with
4543          -fguiding-decls.  */
4544       if (flag_guiding_decls && templates && ! cand->template 
4545           && ! DECL_INITIAL (cand->fn))
4546         add_maybe_template (cand->fn, templates);
4547
4548       return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
4549     }
4550
4551   return build_function_call (fn, args);
4552 }
4553
4554 static tree
4555 build_object_call (obj, args)
4556      tree obj, args;
4557 {
4558   struct z_candidate *candidates = 0, *cand;
4559   tree fns, convs, mem_args;
4560   tree type = TREE_TYPE (obj);
4561   tree templates = NULL_TREE;
4562
4563   fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
4564
4565   args = resolve_args (args);
4566
4567   if (args == error_mark_node)
4568     return error_mark_node;
4569
4570   if (fns)
4571     {
4572       tree fn = TREE_VALUE (fns);
4573       mem_args = scratch_tree_cons (NULL_TREE, build_this (obj), args);
4574
4575       for (; fn; fn = DECL_CHAIN (fn))
4576         {
4577           if (TREE_CODE (fn) == TEMPLATE_DECL)
4578             {
4579               templates = scratch_tree_cons (NULL_TREE, fn, templates);
4580               candidates 
4581                 = add_template_candidate (candidates, fn, NULL_TREE,
4582                                           mem_args, NULL_TREE, 
4583                                           LOOKUP_NORMAL);
4584             }
4585           else
4586             candidates = add_function_candidate
4587               (candidates, fn, mem_args, LOOKUP_NORMAL);
4588
4589           if (candidates)
4590             candidates->basetype_path = TREE_PURPOSE (fns);
4591         }
4592     }
4593
4594   convs = lookup_conversions (type);
4595
4596   for (; convs; convs = TREE_CHAIN (convs))
4597     {
4598       tree fn = TREE_VALUE (convs);
4599       tree totype = TREE_TYPE (TREE_TYPE (fn));
4600
4601       if (TREE_CODE (totype) == POINTER_TYPE
4602           && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4603         for (; fn; fn = DECL_CHAIN (fn))
4604           {
4605             if (TREE_CODE (fn) == TEMPLATE_DECL) 
4606               {
4607                 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4608                 candidates = add_template_conv_candidate (candidates,
4609                                                           fn,
4610                                                           obj,
4611                                                           args,
4612                                                           totype);
4613               }
4614             else
4615               candidates = add_conv_candidate (candidates, fn, obj, args);
4616
4617             if (candidates)
4618               candidates->basetype_path = TREE_PURPOSE (convs);
4619           }
4620     }
4621
4622   if (! any_viable (candidates))
4623     {
4624       cp_error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
4625       print_z_candidates (candidates);
4626       return error_mark_node;
4627     }
4628
4629   candidates = splice_viable (candidates);
4630   cand = tourney (candidates);
4631
4632   if (cand == 0)
4633     {
4634       cp_error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
4635       print_z_candidates (candidates);
4636       return error_mark_node;
4637     }
4638
4639   if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
4640     return build_over_call (cand->fn, cand->convs, mem_args, LOOKUP_NORMAL);
4641
4642   obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
4643
4644   /* FIXME */
4645   return build_function_call (obj, args);
4646 }
4647
4648 static void
4649 op_error (code, code2, arg1, arg2, arg3, problem)
4650      enum tree_code code, code2;
4651      tree arg1, arg2, arg3;
4652      char *problem;
4653 {
4654   char * opname
4655     = (code == MODIFY_EXPR ? assignop_tab [code2] : opname_tab [code]);
4656
4657   switch (code)
4658     {
4659     case COND_EXPR:
4660       cp_error ("%s for `%T ? %T : %T'", problem,
4661                 error_type (arg1), error_type (arg2), error_type (arg3));
4662       break;
4663     case POSTINCREMENT_EXPR:
4664     case POSTDECREMENT_EXPR:
4665       cp_error ("%s for `%T%s'", problem, error_type (arg1), opname);
4666       break;
4667     case ARRAY_REF:
4668       cp_error ("%s for `%T[%T]'", problem,
4669                 error_type (arg1), error_type (arg2));
4670       break;
4671     default:
4672       if (arg2)
4673         cp_error ("%s for `%T %s %T'", problem,
4674                   error_type (arg1), opname, error_type (arg2));
4675       else
4676         cp_error ("%s for `%s%T'", problem, opname, error_type (arg1));
4677     }
4678 }
4679
4680 tree
4681 build_new_op (code, flags, arg1, arg2, arg3)
4682      enum tree_code code;
4683      int flags;
4684      tree arg1, arg2, arg3;
4685 {
4686   struct z_candidate *candidates = 0, *cand;
4687   tree fns, mem_arglist, arglist, fnname;
4688   enum tree_code code2 = NOP_EXPR;
4689   tree templates = NULL_TREE;
4690   tree conv;
4691
4692   if (arg1 == error_mark_node
4693       || arg2 == error_mark_node
4694       || arg3 == error_mark_node)
4695     return error_mark_node;
4696
4697   /* This can happen if a template takes all non-type parameters, e.g.
4698      undeclared_template<1, 5, 72>a;  */
4699   if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
4700     {
4701       cp_error ("`%D' must be declared before use", arg1);
4702       return error_mark_node;
4703     }
4704
4705   if (code == MODIFY_EXPR)
4706     {
4707       code2 = TREE_CODE (arg3);
4708       arg3 = NULL_TREE;
4709       fnname = ansi_assopname[code2];
4710     }
4711   else
4712     fnname = ansi_opname[code];
4713
4714   switch (code)
4715     {
4716     case NEW_EXPR:
4717     case VEC_NEW_EXPR:
4718       {
4719         tree rval;
4720
4721         arglist = scratch_tree_cons (NULL_TREE, arg2, arg3);
4722         if (flags & LOOKUP_GLOBAL)
4723           return build_new_function_call
4724             (lookup_name_nonclass (fnname), arglist);
4725
4726         /* FIXME */
4727         rval = build_method_call
4728           (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node),
4729                                "new"),
4730            fnname, arglist, NULL_TREE, flags);
4731         if (rval == error_mark_node)
4732           /* User might declare fancy operator new, but invoke it
4733              like standard one.  */
4734           return rval;
4735
4736         TREE_TYPE (rval) = arg1;
4737         TREE_CALLS_NEW (rval) = 1;
4738         return rval;
4739       }
4740
4741     case VEC_DELETE_EXPR:
4742     case DELETE_EXPR:
4743       {
4744         tree rval;
4745
4746         if (flags & LOOKUP_GLOBAL)
4747           return build_new_function_call
4748             (lookup_name_nonclass (fnname),
4749              build_scratch_list (NULL_TREE, arg1));
4750
4751         arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4752
4753         arg1 = TREE_TYPE (arg1);
4754
4755         /* This handles the case where we're trying to delete
4756            X (*a)[10];
4757            a=new X[5][10];
4758            delete[] a; */
4759            
4760         if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
4761           {
4762             /* Strip off the pointer and the array.  */
4763             arg1 = TREE_TYPE (TREE_TYPE (arg1));
4764
4765             while (TREE_CODE (arg1) == ARRAY_TYPE)
4766                 arg1 = (TREE_TYPE (arg1));
4767
4768             arg1 = build_pointer_type (arg1);
4769           }
4770
4771         /* FIXME */
4772         rval = build_method_call
4773           (build_indirect_ref (build1 (NOP_EXPR, arg1,
4774                                        error_mark_node),
4775                                NULL_PTR),
4776            fnname, arglist, NULL_TREE, flags);
4777 #if 0
4778         /* This can happen when operator delete is protected.  */
4779         my_friendly_assert (rval != error_mark_node, 250);
4780         TREE_TYPE (rval) = void_type_node;
4781 #endif
4782         return rval;
4783       }
4784
4785     case CALL_EXPR:
4786       return build_object_call (arg1, arg2);
4787     }
4788
4789   /* The comma operator can have void args.  */
4790   if (TREE_CODE (arg1) == OFFSET_REF)
4791     arg1 = resolve_offset_ref (arg1);
4792   if (arg2 && TREE_CODE (arg2) == OFFSET_REF)
4793     arg2 = resolve_offset_ref (arg2);
4794   if (arg3 && TREE_CODE (arg3) == OFFSET_REF)
4795     arg3 = resolve_offset_ref (arg3);
4796
4797   if (code == COND_EXPR)
4798     {
4799       if (arg2 == NULL_TREE
4800           || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4801           || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4802           || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4803               && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4804         goto builtin;
4805     }
4806   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4807            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4808     goto builtin;
4809
4810   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4811     arg2 = integer_zero_node;
4812
4813   if (arg2 && arg3)
4814     arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons
4815                       (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3)));
4816   else if (arg2)
4817     arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4818   else
4819     arglist = build_scratch_list (NULL_TREE, arg1);
4820
4821   fns = lookup_name_nonclass (fnname);
4822   /* + Koenig lookup */
4823
4824   if (fns && TREE_CODE (fns) == TREE_LIST)
4825     fns = TREE_VALUE (fns);
4826   for (; fns; fns = DECL_CHAIN (fns))
4827     {
4828       if (TREE_CODE (fns) == TEMPLATE_DECL)
4829         {
4830           templates = scratch_tree_cons (NULL_TREE, fns, templates);
4831           candidates 
4832             = add_template_candidate (candidates, fns, NULL_TREE,
4833                                       arglist, TREE_TYPE (fnname),
4834                                       flags); 
4835         }
4836       else
4837         candidates = add_function_candidate (candidates, fns, arglist, flags);
4838     }
4839
4840   if (IS_AGGR_TYPE (TREE_TYPE (arg1)))
4841     fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 0);
4842   else
4843     fns = NULL_TREE;
4844
4845   if (fns)
4846     {
4847       tree fn = TREE_VALUE (fns);
4848       mem_arglist = scratch_tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
4849       for (; fn; fn = DECL_CHAIN (fn))
4850         {
4851           tree this_arglist;
4852
4853           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4854             this_arglist = mem_arglist;
4855           else
4856             this_arglist = arglist;
4857
4858           if (TREE_CODE (fn) == TEMPLATE_DECL)
4859             {
4860               /* A member template. */
4861               templates = scratch_tree_cons (NULL_TREE, fn, templates);
4862               candidates 
4863                 = add_template_candidate (candidates, fn, NULL_TREE,
4864                                           this_arglist,  TREE_TYPE (fnname),
4865                                           flags); 
4866             }
4867           else
4868             candidates = add_function_candidate
4869               (candidates, fn, this_arglist, flags);
4870
4871           if (candidates) 
4872             candidates->basetype_path = TREE_PURPOSE (fns);
4873         }
4874     }
4875
4876   {
4877     tree args[3];
4878
4879     /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4880        to know about two args; a builtin candidate will always have a first
4881        parameter of type bool.  We'll handle that in
4882        build_builtin_candidate.  */
4883     if (code == COND_EXPR)
4884       {
4885         args[0] = arg2;
4886         args[1] = arg3;
4887         args[2] = arg1;
4888       }
4889     else
4890       {
4891         args[0] = arg1;
4892         args[1] = arg2;
4893         args[2] = NULL_TREE;
4894       }
4895
4896     candidates = add_builtin_candidates
4897       (candidates, code, code2, fnname, args, flags);
4898   }
4899
4900   if (! any_viable (candidates))
4901     {
4902       switch (code)
4903         {
4904         case POSTINCREMENT_EXPR:
4905         case POSTDECREMENT_EXPR:
4906           /* Look for an `operator++ (int)'.  If they didn't have
4907              one, then we fall back to the old way of doing things.  */
4908           if (flags & LOOKUP_COMPLAIN)
4909             cp_pedwarn ("no `%D (int)' declared for postfix `%s', trying prefix operator instead",
4910                         fnname, opname_tab [code]);
4911           if (code == POSTINCREMENT_EXPR)
4912             code = PREINCREMENT_EXPR;
4913           else
4914             code = PREDECREMENT_EXPR;   
4915           return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
4916           
4917           /* The caller will deal with these.  */
4918         case ADDR_EXPR:
4919         case COMPOUND_EXPR:
4920         case COMPONENT_REF:
4921           return NULL_TREE;
4922         }
4923       if (flags & LOOKUP_COMPLAIN)
4924         {
4925           op_error (code, code2, arg1, arg2, arg3, "no match");
4926           print_z_candidates (candidates);
4927         }
4928       return error_mark_node;
4929     }
4930   candidates = splice_viable (candidates);
4931   cand = tourney (candidates);
4932
4933   if (cand == 0)
4934     {
4935       if (flags & LOOKUP_COMPLAIN)
4936         {
4937           op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4938           print_z_candidates (candidates);
4939         }
4940       return error_mark_node;
4941     }
4942
4943   if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4944     {
4945       extern int warn_synth;
4946       if (warn_synth
4947           && fnname == ansi_opname[MODIFY_EXPR]
4948           && DECL_ARTIFICIAL (cand->fn)
4949           && candidates->next
4950           && ! candidates->next->next)
4951         {
4952           cp_warning ("using synthesized `%#D' for copy assignment",
4953                       cand->fn);
4954           cp_warning_at ("  where cfront would use `%#D'",
4955                          cand == candidates
4956                          ? candidates->next->fn
4957                          : candidates->fn);
4958         }
4959
4960       if (DECL_FUNCTION_MEMBER_P (cand->fn))
4961         enforce_access (cand->basetype_path, cand->fn);
4962
4963       /* Pedantically, normal function declarations are never considered
4964          to refer to template instantiations, so we only do this with
4965          -fguiding-decls.  */ 
4966       if (flag_guiding_decls && templates && ! cand->template 
4967           && ! DECL_INITIAL (cand->fn)
4968           && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4969         add_maybe_template (cand->fn, templates);
4970
4971       return build_over_call
4972         (cand->fn, cand->convs,
4973          TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
4974          ? mem_arglist : arglist,
4975          LOOKUP_NORMAL);
4976     }
4977
4978   /* Check for comparison of different enum types.  */
4979   switch (code)
4980     {
4981     case GT_EXPR:
4982     case LT_EXPR:
4983     case GE_EXPR:
4984     case LE_EXPR:
4985     case EQ_EXPR:
4986     case NE_EXPR:
4987       if (flag_int_enum_equivalence == 0 
4988           && TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE 
4989           && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE 
4990           && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4991               != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
4992         {
4993           cp_warning ("comparison between `%#T' and `%#T'", 
4994                       TREE_TYPE (arg1), TREE_TYPE (arg2));
4995         }
4996     }
4997
4998   /* We need to strip any leading REF_BIND so that bitfields don't cause
4999      errors.  This should not remove any important conversions, because
5000      builtins don't apply to class objects directly.  */
5001   conv = TREE_VEC_ELT (cand->convs, 0);
5002   if (TREE_CODE (conv) == REF_BIND)
5003     conv = TREE_OPERAND (conv, 0);
5004   arg1 = convert_like (conv, arg1);
5005   if (arg2)
5006     arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
5007   if (arg3)
5008     arg3 = convert_like (TREE_VEC_ELT (cand->convs, 2), arg3);
5009
5010 builtin:
5011   switch (code)
5012     {
5013     case MODIFY_EXPR:
5014       return build_modify_expr (arg1, code2, arg2);
5015
5016     case INDIRECT_REF:
5017       return build_indirect_ref (arg1, "unary *");
5018
5019     case PLUS_EXPR:
5020     case MINUS_EXPR:
5021     case MULT_EXPR:
5022     case TRUNC_DIV_EXPR:
5023     case GT_EXPR:
5024     case LT_EXPR:
5025     case GE_EXPR:
5026     case LE_EXPR:
5027     case EQ_EXPR:
5028     case NE_EXPR:
5029     case MAX_EXPR:
5030     case MIN_EXPR:
5031     case LSHIFT_EXPR:
5032     case RSHIFT_EXPR:
5033     case TRUNC_MOD_EXPR:
5034     case BIT_AND_EXPR:
5035     case BIT_IOR_EXPR:
5036     case BIT_XOR_EXPR:
5037     case TRUTH_ANDIF_EXPR:
5038     case TRUTH_ORIF_EXPR:
5039       return build_binary_op_nodefault (code, arg1, arg2, code);
5040
5041     case CONVERT_EXPR:
5042     case NEGATE_EXPR:
5043     case BIT_NOT_EXPR:
5044     case TRUTH_NOT_EXPR:
5045     case PREINCREMENT_EXPR:
5046     case POSTINCREMENT_EXPR:
5047     case PREDECREMENT_EXPR:
5048     case POSTDECREMENT_EXPR:
5049     case REALPART_EXPR:
5050     case IMAGPART_EXPR:
5051       return build_unary_op (code, arg1, candidates != 0);
5052
5053     case ARRAY_REF:
5054       return build_array_ref (arg1, arg2);
5055
5056     case COND_EXPR:
5057       return build_conditional_expr (arg1, arg2, arg3);
5058
5059     case MEMBER_REF:
5060       return build_m_component_ref
5061         (build_indirect_ref (arg1, NULL_PTR), arg2);
5062
5063       /* The caller will deal with these.  */
5064     case ADDR_EXPR:
5065     case COMPONENT_REF:
5066     case COMPOUND_EXPR:
5067       return NULL_TREE;
5068
5069     default:
5070       my_friendly_abort (367);
5071     }
5072 }
5073
5074 /* Build up a call to operator new.  This has to be handled differently
5075    from other operators in the way lookup is handled; first members are
5076    considered, then globals.  CODE is either NEW_EXPR or VEC_NEW_EXPR.
5077    TYPE is the type to be created.  ARGS are any new-placement args.
5078    FLAGS are the usual overloading flags.  */
5079
5080 tree
5081 build_op_new_call (code, type, args, flags)
5082      enum tree_code code;
5083      tree type, args;
5084      int flags;
5085 {
5086   tree fnname = ansi_opname[code];
5087
5088   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL)
5089       && (TYPE_GETS_NEW (type) & (1 << (code == VEC_NEW_EXPR))))
5090     {
5091       tree dummy = build1 (NOP_EXPR, build_pointer_type (type),
5092                            error_mark_node);
5093       dummy = build_indirect_ref (dummy, "new");
5094       return build_method_call (dummy, fnname, args, NULL_TREE, flags);
5095     }
5096   else
5097     return build_new_function_call (lookup_name_nonclass (fnname), args);
5098 }
5099
5100 /* Build a call to operator delete.  This has to be handled very specially,
5101    because the restrictions on what signatures match are different from all
5102    other call instances.  For a normal delete, only a delete taking (void *)
5103    or (void *, size_t) is accepted.  For a placement delete, only an exact
5104    match with the placement new is accepted.
5105
5106    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5107    ADDR is the pointer to be deleted.  For placement delete, it is also
5108      used to determine what the corresponding new looked like.
5109    SIZE is the size of the memory block to be deleted.
5110    FLAGS are the usual overloading flags.  */
5111
5112 tree
5113 build_op_delete_call (code, addr, size, flags)
5114      enum tree_code code;
5115      tree addr, size;
5116      int flags;
5117 {
5118   tree fn, fns, fnname, fntype, argtypes, args, type;
5119   int placement;
5120
5121   if (addr == error_mark_node)
5122     return error_mark_node;
5123
5124   type = TREE_TYPE (TREE_TYPE (addr));
5125   fnname = ansi_opname[code];
5126
5127   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
5128     fns = lookup_fnfields (TYPE_BINFO (type), fnname, 0);
5129   else
5130     fns = NULL_TREE;
5131
5132   if (fns)
5133     {
5134       /* Build this up like build_offset_ref does.  */
5135       fns = build_tree_list (error_mark_node, fns);
5136       TREE_TYPE (fns) = build_offset_type (type, unknown_type_node);
5137     }
5138   else
5139     fns = lookup_name_nonclass (fnname);
5140
5141   /* We can recognize a placement delete because of LOOKUP_SPECULATIVELY;
5142      if we are doing placement delete we do nothing if we don't find a
5143      matching op delete.  */
5144   placement = !!(flags & LOOKUP_SPECULATIVELY);
5145   if (placement)
5146     {
5147       /* If placement, we are coming from build_new, and we know that addr
5148          is the allocation expression, so extract the info we need from it.
5149          Obviously, if the build_new process changes this may have to
5150          change as well.  */
5151
5152       /* The NOP_EXPR.  */
5153       tree t = TREE_OPERAND (addr, 1);
5154       /* The CALL_EXPR.  */
5155       t = TREE_OPERAND (t, 0);
5156       /* The function.  */
5157       argtypes = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
5158       /* The second parm type.  */
5159       argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (argtypes)));
5160       /* The second argument.  */
5161       args = TREE_CHAIN (TREE_OPERAND (t, 1));
5162
5163       /* Pull the dummy var out of the TARGET_EXPR for use in our call.  */
5164       addr = TREE_OPERAND (addr, 0);
5165     }
5166   else
5167     {
5168       /* First try it without the size argument.  */
5169       argtypes = void_list_node;
5170       args = NULL_TREE;
5171     }
5172
5173   argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
5174   fntype = build_function_type (void_type_node, argtypes);
5175
5176   /* Strip const and volatile from addr.  */
5177   if (type != TYPE_MAIN_VARIANT (type))
5178     addr = cp_convert (build_pointer_type (TYPE_MAIN_VARIANT (type)), addr);
5179
5180   /* instantiate_type will always return a plain function; pretend it's
5181      overloaded.  */
5182   if (TREE_CODE (fns) == FUNCTION_DECL)
5183     fns = scratch_tree_cons (NULL_TREE, fns, NULL_TREE);
5184
5185   fn = instantiate_type (fntype, fns, 0);
5186
5187   if (fn != error_mark_node)
5188     {
5189       if (TREE_CODE (TREE_VALUE (fns)) == TREE_LIST)
5190         /* Member functions.  */
5191         enforce_access (TREE_PURPOSE (TREE_VALUE (fns)), fn);
5192       return build_function_call (fn, expr_tree_cons (NULL_TREE, addr, args));
5193     }
5194
5195   if (placement)
5196     return NULL_TREE;
5197
5198   /* Normal delete; now try to find a match including the size argument.  */
5199   argtypes = tree_cons (NULL_TREE, ptr_type_node,
5200                         tree_cons (NULL_TREE, sizetype, void_list_node));
5201   fntype = build_function_type (void_type_node, argtypes);
5202
5203   fn = instantiate_type (fntype, fns, 0);
5204
5205   if (fn != error_mark_node)
5206     return build_function_call
5207       (fn, expr_tree_cons (NULL_TREE, addr,
5208                            build_expr_list (NULL_TREE, size)));
5209
5210   cp_error ("no suitable operator delete for `%T'", type);
5211   return error_mark_node;
5212 }
5213
5214 /* If the current scope isn't allowed to access FUNCTION along
5215    BASETYPE_PATH, give an error.  */
5216
5217 static void
5218 enforce_access (basetype_path, function)
5219      tree basetype_path, function;
5220 {
5221   tree access = compute_access (basetype_path, function);
5222
5223   if (access == access_private_node)
5224     {
5225       cp_error_at ("`%+#D' is %s", function, 
5226                    TREE_PRIVATE (function) ? "private"
5227                    : "from private base class");
5228       error ("within this context");
5229     }
5230   else if (access == access_protected_node)
5231     {
5232       cp_error_at ("`%+#D' %s", function,
5233                    TREE_PROTECTED (function) ? "is protected"
5234                    : "has protected accessibility");
5235       error ("within this context");
5236     }
5237 }
5238
5239 /* Perform the conversions in CONVS on the expression EXPR.  */
5240
5241 static tree
5242 convert_like (convs, expr)
5243      tree convs, expr;
5244 {
5245   if (ICS_BAD_FLAG (convs)
5246       && TREE_CODE (convs) != USER_CONV
5247       && TREE_CODE (convs) != AMBIG_CONV)
5248     {
5249       tree t = convs; 
5250       for (; t; t = TREE_OPERAND (t, 0))
5251         {
5252           if (TREE_CODE (t) == USER_CONV)
5253             {
5254               expr = convert_like (t, expr);
5255               break;
5256             }
5257           else if (TREE_CODE (t) == AMBIG_CONV)
5258             return convert_like (t, expr);
5259           else if (TREE_CODE (t) == IDENTITY_CONV)
5260             break;
5261         }
5262       return convert_for_initialization
5263         (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
5264          "conversion", NULL_TREE, 0);
5265     }
5266
5267   switch (TREE_CODE (convs))
5268     {
5269     case USER_CONV:
5270       {
5271         tree fn = TREE_OPERAND (convs, 1);
5272         tree args;
5273         enforce_access (TREE_OPERAND (convs, 3), fn);
5274
5275         if (DECL_CONSTRUCTOR_P (fn))
5276           {
5277             tree t = build_int_2 (0, 0);
5278             TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
5279
5280             args = build_scratch_list (NULL_TREE, expr);
5281             if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5282               args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5283             args = scratch_tree_cons (NULL_TREE, t, args);
5284           }
5285         else
5286           args = build_this (expr);
5287         expr = build_over_call
5288           (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
5289            args, LOOKUP_NORMAL);
5290
5291         /* If this is a constructor or a function returning an aggr type,
5292            we need to build up a TARGET_EXPR.  */
5293         if (DECL_CONSTRUCTOR_P (fn))
5294           expr = build_cplus_new (TREE_TYPE (convs), expr);
5295
5296         return expr;
5297       }
5298     case IDENTITY_CONV:
5299       if (type_unknown_p (expr))
5300         expr = instantiate_type (TREE_TYPE (convs), expr, 1);
5301       if (TREE_READONLY_DECL_P (expr))
5302         expr = decl_constant_value (expr);
5303       return expr;
5304     case AMBIG_CONV:
5305       /* Call build_user_type_conversion again for the error.  */
5306       return build_user_type_conversion
5307         (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
5308     };
5309
5310   expr = convert_like (TREE_OPERAND (convs, 0), expr);
5311   if (expr == error_mark_node)
5312     return error_mark_node;
5313
5314   switch (TREE_CODE (convs))
5315     {
5316     case RVALUE_CONV:
5317       if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
5318         return expr;
5319       /* else fall through */
5320     case BASE_CONV:
5321       return build_user_type_conversion
5322         (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
5323     case REF_BIND:
5324       return convert_to_reference
5325         (TREE_TYPE (convs), expr,
5326          CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
5327          error_mark_node);
5328     case LVALUE_CONV:
5329       return decay_conversion (expr);
5330     }
5331   return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5332                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5333 }
5334
5335 static tree
5336 convert_default_arg (type, arg)
5337      tree type, arg;
5338 {
5339   arg = break_out_target_exprs (arg);
5340
5341   if (TREE_CODE (arg) == CONSTRUCTOR)
5342     {
5343       arg = digest_init (type, arg, 0);
5344       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5345                                         "default argument", 0, 0);
5346     }
5347   else
5348     {
5349       /* This could get clobbered by the following call.  */
5350       if (TREE_HAS_CONSTRUCTOR (arg))
5351         arg = copy_node (arg);
5352
5353       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5354                                         "default argument", 0, 0);
5355 #ifdef PROMOTE_PROTOTYPES
5356       if ((TREE_CODE (type) == INTEGER_TYPE
5357            || TREE_CODE (type) == ENUMERAL_TYPE)
5358           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5359         arg = default_conversion (arg);
5360 #endif
5361     }
5362
5363   return arg;
5364 }
5365
5366 static tree
5367 build_over_call (fn, convs, args, flags)
5368      tree fn, convs, args;
5369      int flags;
5370 {
5371   tree converted_args = NULL_TREE;
5372   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5373   tree conv, arg, val;
5374   int i = 0;
5375   int is_method = 0;
5376
5377   if (args && TREE_CODE (args) != TREE_LIST)
5378     args = build_scratch_list (NULL_TREE, args);
5379   arg = args;
5380
5381   /* The implicit parameters to a constructor are not considered by overload
5382      resolution, and must be of the proper type.  */
5383   if (DECL_CONSTRUCTOR_P (fn))
5384     {
5385       converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5386       arg = TREE_CHAIN (arg);
5387       parm = TREE_CHAIN (parm);
5388       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5389         {
5390           converted_args = expr_tree_cons
5391             (NULL_TREE, TREE_VALUE (arg), converted_args);
5392           arg = TREE_CHAIN (arg);
5393           parm = TREE_CHAIN (parm);
5394         }
5395     }      
5396   /* Bypass access control for 'this' parameter.  */
5397   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5398     {
5399       tree parmtype = TREE_VALUE (parm);
5400       tree argtype = TREE_TYPE (TREE_VALUE (arg));
5401       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5402         {
5403           int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5404                     < TYPE_VOLATILE (TREE_TYPE (argtype)));
5405           int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5406                     < TYPE_READONLY (TREE_TYPE (argtype)));
5407           char *p = (dv && dc ? "const and volatile"
5408                               : dc ? "const" : dv ? "volatile" : "");
5409
5410           cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5411                       TREE_TYPE (argtype), fn, p);
5412         }
5413       converted_args = expr_tree_cons
5414         (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5415          converted_args);
5416       parm = TREE_CHAIN (parm);
5417       arg = TREE_CHAIN (arg);
5418       ++i;
5419       is_method = 1;
5420     }
5421
5422   for (; arg && parm;
5423        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5424     {
5425       tree type = TREE_VALUE (parm);
5426
5427       conv = TREE_VEC_ELT (convs, i);
5428       if (ICS_BAD_FLAG (conv))
5429         {
5430           tree t = conv;
5431           val = TREE_VALUE (arg);
5432
5433           for (; t; t = TREE_OPERAND (t, 0))
5434             {
5435               if (TREE_CODE (t) == USER_CONV
5436                   || TREE_CODE (t) == AMBIG_CONV)
5437                 {
5438                   val = convert_like (t, val);
5439                   break;
5440                 }
5441               else if (TREE_CODE (t) == IDENTITY_CONV)
5442                 break;
5443             }
5444           val = convert_for_initialization
5445             (NULL_TREE, type, val, LOOKUP_NORMAL,
5446              "argument passing", fn, i - is_method);
5447         }
5448       else
5449         val = convert_like (conv, TREE_VALUE (arg));
5450
5451 #ifdef PROMOTE_PROTOTYPES
5452       if ((TREE_CODE (type) == INTEGER_TYPE
5453            || TREE_CODE (type) == ENUMERAL_TYPE)
5454           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5455         val = default_conversion (val);
5456 #endif
5457       converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5458     }
5459
5460   /* Default arguments */
5461   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5462     {
5463       tree arg = TREE_PURPOSE (parm);
5464
5465       if (DECL_TEMPLATE_INFO (fn))
5466         /* This came from a template.  Instantiate the default arg here,
5467            not in tsubst.  */
5468         arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5469                            TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5470       converted_args = expr_tree_cons
5471         (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5472          converted_args);
5473     }
5474
5475   /* Ellipsis */
5476   for (; arg; arg = TREE_CHAIN (arg))
5477     {
5478       val = TREE_VALUE (arg);
5479
5480       if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5481           && (TYPE_PRECISION (TREE_TYPE (val))
5482               < TYPE_PRECISION (double_type_node)))
5483         /* Convert `float' to `double'.  */
5484         val = cp_convert (double_type_node, val);
5485       else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5486                && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5487         cp_warning ("cannot pass objects of type `%T' through `...'",
5488                     TREE_TYPE (val));
5489       else
5490         /* Convert `short' and `char' to full-size `int'.  */
5491         val = default_conversion (val);
5492
5493       converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5494     }
5495
5496   converted_args = nreverse (converted_args);
5497
5498   /* Avoid actually calling copy constructors and copy assignment operators,
5499      if possible.  */
5500   if (DECL_CONSTRUCTOR_P (fn)
5501       && TREE_VEC_LENGTH (convs) == 1
5502       && copy_args_p (fn))
5503     {
5504       tree targ;
5505       arg = TREE_VALUE (TREE_CHAIN (converted_args));
5506
5507       /* Pull out the real argument, disregarding const-correctness.  */
5508       targ = arg;
5509       while (TREE_CODE (targ) == NOP_EXPR
5510              || TREE_CODE (targ) == NON_LVALUE_EXPR
5511              || TREE_CODE (targ) == CONVERT_EXPR)
5512         targ = TREE_OPERAND (targ, 0);
5513       if (TREE_CODE (targ) == ADDR_EXPR)
5514         {
5515           targ = TREE_OPERAND (targ, 0);
5516           if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5517                            TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5518             targ = NULL_TREE;
5519         }
5520       else
5521         targ = NULL_TREE;
5522
5523       if (targ)
5524         arg = targ;
5525       else
5526         arg = build_indirect_ref (arg, 0);
5527
5528       /* [class.copy]: the copy constructor is implicitly defined even if
5529          the implementation elided its use.  */
5530       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5531         mark_used (fn);
5532
5533       /* If we're creating a temp and we already have one, don't create a
5534          new one.  If we're not creating a temp but we get one, use
5535          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
5536          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5537          temp or an INIT_EXPR otherwise.  */
5538       if (integer_zerop (TREE_VALUE (args)))
5539         {
5540           if (! real_lvalue_p (arg))
5541             return arg;
5542           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5543             {
5544               val = build (VAR_DECL, DECL_CONTEXT (fn));
5545               layout_decl (val, 0);
5546               val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5547               TREE_SIDE_EFFECTS (val) = 1;
5548               return val;
5549             }
5550         }
5551       else if (! real_lvalue_p (arg)
5552                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5553         {
5554           tree to = stabilize_reference
5555             (build_indirect_ref (TREE_VALUE (args), 0));
5556           val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5557           TREE_SIDE_EFFECTS (val) = 1;
5558           return build_unary_op (ADDR_EXPR, val, 0);
5559         }
5560     }
5561   else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5562            && copy_args_p (fn)
5563            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5564     {
5565       tree to = stabilize_reference
5566         (build_indirect_ref (TREE_VALUE (converted_args), 0));
5567       arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5568       val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5569       TREE_SIDE_EFFECTS (val) = 1;
5570       return val;
5571     }
5572
5573   mark_used (fn);
5574
5575   if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5576     return build_signature_method_call (fn, converted_args);
5577   else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5578     {
5579       tree t, *p = &TREE_VALUE (converted_args);
5580       tree binfo = get_binfo
5581         (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5582       *p = convert_pointer_to_real (binfo, *p);
5583       if (TREE_SIDE_EFFECTS (*p))
5584         *p = save_expr (*p);
5585       t = build_pointer_type (TREE_TYPE (fn));
5586       fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5587       TREE_TYPE (fn) = t;
5588     }
5589   else if (DECL_INLINE (fn))
5590     fn = inline_conversion (fn);
5591   else
5592     fn = build_addr_func (fn);
5593
5594   fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5595   if (TREE_TYPE (fn) == void_type_node)
5596     return fn;
5597   fn = require_complete_type (fn);
5598   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5599     fn = build_cplus_new (TREE_TYPE (fn), fn);
5600   return convert_from_reference (fn);
5601 }
5602
5603 static tree
5604 build_new_method_call (instance, name, args, basetype_path, flags)
5605      tree instance, name, args, basetype_path;
5606      int flags;
5607 {
5608   struct z_candidate *candidates = 0, *cand;
5609   tree explicit_targs = NULL_TREE;
5610   tree basetype, mem_args, fns, instance_ptr;
5611   tree pretty_name;
5612   tree user_args = args;
5613   tree templates = NULL_TREE;
5614   int template_only = 0;
5615
5616   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5617     {
5618       explicit_targs = TREE_OPERAND (name, 1);
5619       name = TREE_OPERAND (name, 0);
5620       if (TREE_CODE (name) == TEMPLATE_DECL)
5621         name = DECL_NAME (name);
5622       template_only = 1;
5623     }
5624
5625   /* If there is an extra argument for controlling virtual bases,
5626      remove it for error reporting.  */
5627   if (flags & LOOKUP_HAS_IN_CHARGE)
5628     user_args = TREE_CHAIN (args);
5629
5630   args = resolve_args (args);
5631
5632   if (args == error_mark_node)
5633     return error_mark_node;
5634
5635   if (instance == NULL_TREE)
5636     basetype = BINFO_TYPE (basetype_path);
5637   else
5638     {
5639       if (TREE_CODE (instance) == OFFSET_REF)
5640         instance = resolve_offset_ref (instance);
5641       if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5642         instance = convert_from_reference (instance);
5643       basetype = TREE_TYPE (instance);
5644
5645       /* XXX this should be handled before we get here.  */
5646       if (! IS_AGGR_TYPE (basetype)
5647           && ! (TYPE_LANG_SPECIFIC (basetype)
5648                 && (IS_SIGNATURE_POINTER (basetype)
5649                     || IS_SIGNATURE_REFERENCE (basetype))))
5650         {
5651           if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5652             cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5653                       name, instance, basetype);
5654
5655           return error_mark_node;
5656         }
5657
5658       /* If `instance' is a signature pointer/reference and `name' is
5659          not a constructor, we are calling a signature member function.
5660          In that case set the `basetype' to the signature type.  */
5661       if ((IS_SIGNATURE_POINTER (basetype)
5662            || IS_SIGNATURE_REFERENCE (basetype))
5663           && TYPE_IDENTIFIER (basetype) != name)
5664         basetype = SIGNATURE_TYPE (basetype);
5665     }
5666
5667   if (basetype_path == NULL_TREE)
5668     basetype_path = TYPE_BINFO (basetype);
5669
5670   if (instance)
5671     {
5672       instance_ptr = build_this (instance);
5673
5674       if (! template_only)
5675         {
5676           /* XXX this should be handled before we get here.  */
5677           fns = build_field_call (basetype_path, instance_ptr, name, args);
5678           if (fns)
5679             return fns;
5680         }
5681     }
5682   else
5683     {
5684       instance_ptr = build_int_2 (0, 0);
5685       TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5686     }
5687
5688   pretty_name
5689     = (name == ctor_identifier ? constructor_name (basetype) : name);
5690
5691   fns = lookup_fnfields (basetype_path, name, 1);
5692
5693   if (fns == error_mark_node)
5694     return error_mark_node;
5695   if (fns)
5696     {
5697       tree t = TREE_VALUE (fns);
5698       if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5699           && ! (flags & LOOKUP_HAS_IN_CHARGE))
5700         {
5701           flags |= LOOKUP_HAS_IN_CHARGE;
5702           args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5703         }
5704       mem_args = scratch_tree_cons (NULL_TREE, instance_ptr, args);
5705       for (; t; t = DECL_CHAIN (t))
5706         {
5707           tree this_arglist;
5708
5709           /* We can end up here for copy-init of same or base class.  */
5710           if (name == ctor_identifier
5711               && (flags & LOOKUP_ONLYCONVERTING)
5712               && DECL_NONCONVERTING_P (t))
5713             continue;
5714           if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5715             this_arglist = mem_args;
5716           else
5717             this_arglist = args;
5718
5719           if (TREE_CODE (t) == TEMPLATE_DECL)
5720             {
5721               /* A member template. */
5722               templates = scratch_tree_cons (NULL_TREE, t, templates);
5723               candidates = 
5724                 add_template_candidate (candidates, t, explicit_targs,
5725                                         this_arglist,
5726                                         TREE_TYPE (name), flags); 
5727             }
5728           else if (! template_only)
5729             candidates = add_function_candidate (candidates, t,
5730                                                  this_arglist, flags);
5731
5732           if (candidates)
5733             candidates->basetype_path = TREE_PURPOSE (fns);
5734         }
5735     }
5736
5737   if (! any_viable (candidates))
5738     {
5739       /* XXX will LOOKUP_SPECULATIVELY be needed when this is done?  */
5740       if (flags & LOOKUP_SPECULATIVELY)
5741         return NULL_TREE;
5742       cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5743                 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5744       print_z_candidates (candidates);
5745       return error_mark_node;
5746     }
5747   candidates = splice_viable (candidates);
5748   cand = tourney (candidates);
5749
5750   if (cand == 0)
5751     {
5752       cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5753                 user_args);
5754       print_z_candidates (candidates);
5755       return error_mark_node;
5756     }
5757
5758   enforce_access (cand->basetype_path, cand->fn);
5759   if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5760       && instance == current_class_ref
5761       && DECL_CONSTRUCTOR_P (current_function_decl)
5762       && ! (flags & LOOKUP_NONVIRTUAL)
5763       && value_member (cand->fn, get_abstract_virtuals (basetype)))
5764     cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5765   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5766       && TREE_CODE (instance_ptr) == NOP_EXPR
5767       && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5768     cp_error ("cannot call member function `%D' without object", cand->fn);
5769
5770   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5771       && ((instance == current_class_ref && (dtor_label || ctor_label))
5772           || resolves_to_fixed_type_p (instance, 0)))
5773     flags |= LOOKUP_NONVIRTUAL;
5774
5775   /* Pedantically, normal function declarations are never considered
5776      to refer to template instantiations, so we only do this with
5777      -fguiding-decls.  */ 
5778   if (flag_guiding_decls && templates && ! cand->template 
5779       && ! DECL_INITIAL (cand->fn))
5780     add_maybe_template (cand->fn, templates);
5781
5782   return build_over_call
5783     (cand->fn, cand->convs,
5784      TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5785      flags);
5786 }
5787
5788 /* Compare two implicit conversion sequences that differ only in their
5789    qualification conversion.  Subroutine of compare_ics.  */
5790
5791 static int
5792 compare_qual (ics1, ics2)
5793      tree ics1, ics2;
5794 {
5795   tree to1 = TREE_TYPE (ics1);
5796   tree to2 = TREE_TYPE (ics2);
5797
5798   if (TYPE_PTRMEMFUNC_P (to1))
5799     to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1);
5800   if (TYPE_PTRMEMFUNC_P (to2))
5801     to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2);
5802
5803   to1 = TREE_TYPE (to1);
5804   to2 = TREE_TYPE (to2);
5805
5806   if (TREE_CODE (to1) == OFFSET_TYPE)
5807     {
5808       to1 = TREE_TYPE (to1);
5809       to2 = TREE_TYPE (to2);
5810     }
5811
5812   if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5813       && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5814     return -1;
5815   else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5816            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5817     return -1;
5818   else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5819            && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5820     return 1;
5821   else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5822            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5823     return 1;
5824   return 0;
5825 }
5826
5827 /* Determine whether standard conversion sequence ICS1 is a proper
5828    subsequence of ICS2.  We assume that a conversion of the same code
5829    between the same types indicates a subsequence.  */
5830
5831 static int
5832 is_subseq (ics1, ics2)
5833      tree ics1, ics2;
5834 {
5835   /* Do not consider lvalue transformations here.  */
5836   if (TREE_CODE (ics2) == RVALUE_CONV
5837       || TREE_CODE (ics2) == LVALUE_CONV)
5838     return 0;
5839
5840   for (;; ics2 = TREE_OPERAND (ics2, 0))
5841     {
5842       if (TREE_CODE (ics2) == TREE_CODE (ics1)
5843           && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
5844           && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5845                         TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
5846         return 1;
5847
5848       if (TREE_CODE (ics2) == USER_CONV
5849           || TREE_CODE (ics2) == AMBIG_CONV
5850           || TREE_CODE (ics2) == IDENTITY_CONV)
5851         return 0;
5852     }
5853 }
5854
5855 /* Compare two implicit conversion sequences according to the rules set out in
5856    [over.ics.rank].  Return values:
5857
5858       1: ics1 is better than ics2
5859      -1: ics2 is better than ics1
5860       0: ics1 and ics2 are indistinguishable */
5861
5862 static int
5863 compare_ics (ics1, ics2)
5864      tree ics1, ics2;
5865 {
5866   tree main1, main2;
5867
5868   if (TREE_CODE (ics1) == QUAL_CONV)
5869     main1 = TREE_OPERAND (ics1, 0);
5870   else
5871     main1 = ics1;
5872
5873   if (TREE_CODE (ics2) == QUAL_CONV)
5874     main2 = TREE_OPERAND (ics2, 0);
5875   else
5876     main2 = ics2;
5877
5878   /* Conversions for `this' are PTR_CONVs, but we compare them as though
5879      they were REF_BINDs.  */
5880   if (ICS_THIS_FLAG (ics1))
5881     {
5882       tree t = main1;
5883       if (TREE_CODE (t) == PTR_CONV)
5884         t = TREE_OPERAND (t, 0);
5885       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5886       t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5887       ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5888       main1 = ics1 = t;
5889     }
5890   if (ICS_THIS_FLAG (ics2))
5891     {
5892       tree t = main2;
5893       if (TREE_CODE (t) == PTR_CONV)
5894         t = TREE_OPERAND (t, 0);
5895       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5896       t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5897       ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5898       main2 = ics2 = t;
5899     }
5900
5901   if (ICS_RANK (ics1) > ICS_RANK (ics2))
5902     return -1;
5903   else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5904     return 1;
5905
5906   if (ICS_RANK (ics1) == BAD_RANK)
5907     {
5908       if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5909           || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5910         return -1;
5911       else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5912                || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5913         return 1;
5914
5915       /* else fall through */
5916     }
5917
5918   /* User-defined  conversion sequence U1 is a better conversion sequence
5919      than another user-defined conversion sequence U2 if they contain the
5920      same user-defined conversion operator or constructor and if the sec-
5921      ond standard conversion sequence of U1 is  better  than  the  second
5922      standard conversion sequence of U2.  */
5923
5924   if (ICS_USER_FLAG (ics1))
5925     {
5926       tree t1, t2;
5927
5928       for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5929         if (TREE_CODE (t1) == AMBIG_CONV)
5930           return 0;
5931       for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5932         if (TREE_CODE (t2) == AMBIG_CONV)
5933           return 0;
5934
5935       if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5936         return 0;
5937       else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5938         return -1;
5939       else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5940         return 1;
5941
5942       /* else fall through */
5943     }
5944
5945 #if 0 /* Handled by ranking */
5946   /* A conversion that is not a conversion of a pointer,  or  pointer  to
5947      member,  to  bool  is  better than another conversion that is such a
5948      conversion.  */
5949 #endif
5950
5951   if (TREE_CODE (main1) != TREE_CODE (main2))
5952     {
5953       /* ...if S1  is  a  proper  subsequence  of  S2  */
5954       if (is_subseq (main1, main2))
5955         return 1;
5956       if (is_subseq (main2, main1))
5957         return -1;
5958       return 0;
5959     }
5960
5961   if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5962       || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5963     {
5964       tree to1 = TREE_TYPE (main1);
5965       tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5966       tree to2 = TREE_TYPE (main2);
5967       tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5968       int distf, distt;
5969
5970       /* Standard conversion sequence S1 is a better conversion sequence than
5971          standard conversion sequence S2 if...
5972
5973          S1 and S2 differ only in their qualification conversion  and  they
5974          yield types identical except for cv-qualifiers and S2 adds all the
5975          qualifiers that S1 adds (and in the same places) and S2  adds  yet
5976          more  cv-qualifiers  than  S1,  or the similar case with reference
5977          binding15).  */
5978       if (TREE_CODE (main1) == REF_BIND)
5979         {
5980           if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
5981               == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
5982             return compare_qual (ics1, ics2);
5983         }
5984       else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
5985         return compare_qual (ics1, ics2);
5986         
5987       if (TYPE_PTRMEMFUNC_P (to1))
5988         {
5989           to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
5990           from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
5991         }
5992       else if (TREE_CODE (main1) != BASE_CONV)
5993         {
5994           to1 = TREE_TYPE (to1);
5995           if (TREE_CODE (main1) != REF_BIND)
5996             from1 = TREE_TYPE (from1);
5997
5998           if (TREE_CODE (to1) == OFFSET_TYPE)
5999             {
6000               to1 = TYPE_OFFSET_BASETYPE (to1);
6001               from1 = TYPE_OFFSET_BASETYPE (from1);
6002             }
6003         }
6004
6005       if (TYPE_PTRMEMFUNC_P (to2))
6006         {
6007           to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
6008           from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
6009         }
6010       else if (TREE_CODE (main1) != BASE_CONV)
6011         {
6012           to2 = TREE_TYPE (to2);
6013           if (TREE_CODE (main1) != REF_BIND)
6014             from2 = TREE_TYPE (from2);
6015
6016           if (TREE_CODE (to2) == OFFSET_TYPE)
6017             {
6018               to2 = TYPE_OFFSET_BASETYPE (to2);
6019               from2 = TYPE_OFFSET_BASETYPE (from2);
6020             }
6021         }
6022
6023       if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
6024         return 0;
6025
6026       /* The sense of pmem conversions is reversed from that of the other
6027          conversions.  */
6028       if (TREE_CODE (main1) == PMEM_CONV)
6029         {
6030           tree t = from1; from1 = from2; from2 = t;
6031           t = to1; to1 = to2; to2 = t;
6032         }
6033
6034       distf = get_base_distance (from1, from2, 0, 0);
6035       if (distf == -1)
6036         {
6037           distf = -get_base_distance (from2, from1, 0, 0);
6038           if (distf == 1)
6039             return 0;
6040         }
6041
6042       /* If class B is derived directly or indirectly from class A,
6043          conver- sion of B* to A* is better than conversion of B* to
6044          void*, and conversion of A* to void* is better than
6045          conversion of B* to void*.  */
6046
6047       if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
6048         {
6049           if (distf > 0)
6050             return 1;
6051           else if (distf < 0)
6052             return -1;
6053         }
6054       else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
6055                && get_base_distance (to1, from1, 0, 0) != -1)
6056         return 1;
6057       else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
6058                && get_base_distance (to2, from2, 0, 0) != -1)
6059         return -1;
6060
6061       if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
6062         return 0;
6063
6064       /* If  class B is derived directly or indirectly from class A and class
6065          C is derived directly or indirectly from B */
6066
6067       distt = get_base_distance (to1, to2, 0, 0);
6068       if (distt == -1)
6069         {
6070           distt = -get_base_distance (to2, to1, 0, 0);
6071           if (distt == 1)
6072             return 0;
6073         }
6074
6075       /* --conversion of C* to B* is better than conversion of C* to A*, */
6076       if (distf == 0)
6077         {
6078           if (distt > 0)
6079             return -1;
6080           else if (distt < 0)
6081             return 1;
6082         }
6083       /* --conversion of B* to A* is better than conversion of C* to A*, */
6084       else if (distt == 0)
6085         {
6086           if (distf > 0)
6087             return 1;
6088           else if (distf < 0)
6089             return -1;
6090         }
6091     }
6092   else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
6093            || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
6094     {
6095       if (TREE_TYPE (main1) == TREE_TYPE (main2))
6096         return compare_qual (ics1, ics2);
6097
6098 #if 0 /* This is now handled by making identity better than anything else.  */
6099       /* existing practice, not WP-endorsed: const char * -> const char *
6100          is better than char * -> const char *.  (jason 6/29/96) */
6101       if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
6102         return -compare_qual (main1, main2);
6103 #endif
6104     }
6105
6106   return 0;
6107 }
6108
6109 /* The source type for this standard conversion sequence.  */
6110
6111 static tree
6112 source_type (t)
6113      tree t;
6114 {
6115   for (;; t = TREE_OPERAND (t, 0))
6116     {
6117       if (TREE_CODE (t) == USER_CONV
6118           || TREE_CODE (t) == AMBIG_CONV
6119           || TREE_CODE (t) == IDENTITY_CONV)
6120         return TREE_TYPE (t);
6121     }
6122   my_friendly_abort (1823);
6123 }
6124
6125 /* Compare two candidates for overloading as described in
6126    [over.match.best].  Return values:
6127
6128       1: cand1 is better than cand2
6129      -1: cand2 is better than cand1
6130       0: cand1 and cand2 are indistinguishable */
6131
6132 static int
6133 joust (cand1, cand2)
6134      struct z_candidate *cand1, *cand2;
6135 {
6136   int winner = 0;
6137   int i, off1 = 0, off2 = 0, len;
6138
6139   /* Candidates that involve bad conversions are always worse than those
6140      that don't.  */
6141   if (cand1->viable > cand2->viable)
6142     return 1;
6143   if (cand1->viable < cand2->viable)
6144     return -1;
6145
6146   /* a viable function F1
6147      is defined to be a better function than another viable function F2  if
6148      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
6149      ICSi(F2), and then */
6150
6151   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
6152      ICSj(F2) */
6153
6154   /* For comparing static and non-static member functions, we ignore the
6155      implicit object parameter of the non-static function.  The WP says to
6156      pretend that the static function has an object parm, but that won't
6157      work with operator overloading.  */
6158   len = TREE_VEC_LENGTH (cand1->convs);
6159   if (len != TREE_VEC_LENGTH (cand2->convs))
6160     {
6161       if (DECL_STATIC_FUNCTION_P (cand1->fn)
6162           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
6163         off2 = 1;
6164       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
6165                && DECL_STATIC_FUNCTION_P (cand2->fn))
6166         {
6167           off1 = 1;
6168           --len;
6169         }
6170       else
6171         my_friendly_abort (42);
6172     }
6173
6174   for (i = 0; i < len; ++i)
6175     {
6176       tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
6177       tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
6178       int comp = compare_ics (t1, t2);
6179
6180       if (comp != 0)
6181         {
6182 #if 0 /* move this warning to tourney.  */
6183           if (warn_sign_promo
6184               && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
6185               && TREE_CODE (t1) == STD_CONV
6186               && TREE_CODE (t2) == STD_CONV
6187               && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
6188               && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
6189               && (TYPE_PRECISION (TREE_TYPE (t1))
6190                   == TYPE_PRECISION (TREE_TYPE (t2)))
6191               && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
6192                   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
6193                       == ENUMERAL_TYPE)))
6194             {
6195               tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
6196               tree type1, type2;
6197               if (comp > 0)
6198                 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
6199               else
6200                 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
6201
6202               cp_warning ("passing `%T' chooses `%T' over `%T'",
6203                           type, type1, type2);
6204               cp_warning ("  in call to `%D'", DECL_NAME (cand1->fn));
6205             }
6206 #endif
6207
6208           if (winner && comp != winner)
6209             {
6210               winner = 0;
6211               goto tweak;
6212             }
6213           winner = comp;
6214         }
6215     }
6216
6217 #if 0 /* move this warning to tourney.  */
6218   /* warn about confusing overload resolution */
6219   if (winner && cand1->second_conv
6220       && ! DECL_CONSTRUCTOR_P (cand1->fn)
6221       && ! DECL_CONSTRUCTOR_P (cand2->fn))
6222     {
6223       int comp = compare_ics (cand1->second_conv, cand2->second_conv);
6224       if (comp && comp != winner)
6225         {
6226           struct z_candidate *w, *l;
6227           if (winner == 1)
6228             w = cand1, l = cand2;
6229           else
6230             w = cand2, l = cand1;
6231           cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
6232           cp_warning ("  for conversion from `%T' to `%T'",
6233                       TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
6234                       TREE_TYPE (w->second_conv));
6235           cp_warning ("  because conversion sequence for `this' argument is better");
6236         }
6237     }
6238 #endif
6239
6240   if (winner)
6241     return winner;
6242
6243   /* or, if not that,
6244      F1 is a non-template function and F2 is a template function */
6245
6246   if (! cand1->template && cand2->template)
6247     return 1;
6248   else if (cand1->template && ! cand2->template)
6249     return -1;
6250   else if (cand1->template && cand2->template)
6251     winner = more_specialized
6252       (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
6253
6254   /* or, if not that,
6255      the  context  is  an  initialization by user-defined conversion (see
6256      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
6257      sequence  from  the return type of F1 to the destination type (i.e.,
6258      the type of the entity being initialized)  is  a  better  conversion
6259      sequence  than the standard conversion sequence from the return type
6260      of F2 to the destination type.  */
6261
6262   if (! winner && cand1->second_conv)
6263     winner = compare_ics (cand1->second_conv, cand2->second_conv);
6264
6265   /* If the built-in candidates are the same, arbitrarily pick one.  */
6266   if (! winner && cand1->fn == cand2->fn
6267       && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6268     {
6269       for (i = 0; i < len; ++i)
6270         if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
6271                          TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
6272           break;
6273       if (i == TREE_VEC_LENGTH (cand1->convs))
6274         return 1;
6275
6276       /* Kludge around broken overloading rules whereby
6277          Integer a, b; test ? a : b; is ambiguous, since there's a builtin
6278          that takes references and another that takes values.  */
6279       if (cand1->fn == ansi_opname[COND_EXPR])
6280         {
6281           tree c1 = TREE_VEC_ELT (cand1->convs, 1);
6282           tree c2 = TREE_VEC_ELT (cand2->convs, 1);
6283           tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
6284           tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
6285
6286           if (comptypes (t1, t2, 1))
6287             {
6288               if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
6289                 return 1;
6290               if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
6291                 return -1;
6292             }
6293         }
6294     }
6295
6296 tweak:
6297
6298   /* Extension: If the worst conversion for one candidate is worse than the
6299      worst conversion for the other, take the first.  */
6300   if (! winner && ! pedantic)
6301     {
6302       int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
6303
6304       for (i = 0; i < len; ++i)
6305         {
6306           if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
6307             rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
6308           if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
6309             rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
6310         }
6311
6312       if (rank1 < rank2)
6313         return 1;
6314       if (rank1 > rank2)
6315         return -1;
6316     }
6317
6318   return winner;
6319 }
6320
6321 /* Given a list of candidates for overloading, find the best one, if any.
6322    This algorithm has a worst case of O(2n) (winner is last), and a best
6323    case of O(n/2) (totally ambiguous); much better than a sorting
6324    algorithm.  */
6325
6326 static struct z_candidate *
6327 tourney (candidates)
6328      struct z_candidate *candidates;
6329 {
6330   struct z_candidate *champ = candidates, *challenger;
6331   int fate;
6332
6333   /* Walk through the list once, comparing each current champ to the next
6334      candidate, knocking out a candidate or two with each comparison.  */
6335
6336   for (challenger = champ->next; challenger; )
6337     {
6338       fate = joust (champ, challenger);
6339       if (fate == 1)
6340         challenger = challenger->next;
6341       else
6342         {
6343           if (fate == 0)
6344             {
6345               champ = challenger->next;
6346               if (champ == 0)
6347                 return 0;
6348             }
6349           else
6350             champ = challenger;
6351
6352           challenger = champ->next;
6353         }
6354     }
6355
6356   /* Make sure the champ is better than all the candidates it hasn't yet
6357      been compared to.  This may do one more comparison than necessary.  Oh
6358      well.  */
6359
6360   for (challenger = candidates; challenger != champ;
6361        challenger = challenger->next)
6362     {
6363       fate = joust (champ, challenger);
6364       if (fate != 1)
6365         return 0;
6366     }
6367
6368   return champ;
6369 }
6370
6371 int
6372 can_convert (to, from)
6373      tree to, from;
6374 {
6375   if (flag_ansi_overloading)
6376     {
6377       tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
6378       return (t && ! ICS_BAD_FLAG (t));
6379     }
6380   else
6381     {
6382       struct harshness_code h;
6383       h = convert_harshness (to, from, NULL_TREE);
6384       return (h.code < USER_CODE) && (h.distance >= 0);
6385     }
6386 }
6387
6388 int
6389 can_convert_arg (to, from, arg)
6390      tree to, from, arg;
6391 {
6392   if (flag_ansi_overloading)
6393     {
6394       tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6395       return (t && ! ICS_BAD_FLAG (t));
6396     }
6397   else
6398     {
6399       struct harshness_code h;
6400       h = convert_harshness (to, from, arg);
6401       return (h.code < USER_CODE) && (h.distance >= 0);
6402     }
6403 }