OSDN Git Service

* pt.c (tsubst): Fix thinko.
[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, 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 (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 = 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 = 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 = tree_cons (NULL_TREE, integer_one_node, parms);
2130           parmtypes = 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 = tree_cons (NULL_TREE, instance_ptr, parms);
2138     }
2139
2140   parmtypes = 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 = tree_cons (NULL_TREE, integer_zero_node,
2175                                    TREE_CHAIN (parms));
2176               TREE_CHAIN (parms) = tmplist;
2177               tmplist = 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 = 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 = 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 = 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 = 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_tree_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             oballoc ((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_tree_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 *) oballoc (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_tree_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 *) oballoc (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_tree_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 *) oballoc (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] = tree_cons
4078                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4079
4080               types[i] = 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] = 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] = 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] = 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] = 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] = tree_cons (NULL_TREE, type, types[i]);
4125               if (INTEGRAL_TYPE_P (type))
4126                 type = type_promotes_to (type);
4127             }
4128           types[i] = 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_tree_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_tree_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_tree_list (NULL_TREE, expr);
4310       if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
4311         args = tree_cons (NULL_TREE, integer_one_node, args);
4312       args = 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 = decl_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_tree_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 = decl_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, obj)
4483      tree fn, args, obj;
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 (obj == NULL_TREE && 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 = decl_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 = 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 = decl_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 = decl_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 = tree_cons (NULL_TREE, arg2, arg3);
4722         if (flags & LOOKUP_GLOBAL)
4723           return build_new_function_call
4724             (lookup_name_nonclass (fnname), arglist, NULL_TREE);
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_tree_list (NULL_TREE, arg1), NULL_TREE);
4750
4751         arglist = tree_cons (NULL_TREE, arg1, build_tree_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   fns = lookup_name_nonclass (fnname);
4814   /* + Koenig lookup */
4815
4816   if (arg2 && arg3)
4817     arglist = tree_cons (NULL_TREE, arg1, tree_cons
4818                       (NULL_TREE, arg2, build_tree_list (NULL_TREE, arg3)));
4819   else if (arg2)
4820     arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
4821   else
4822     arglist = build_tree_list (NULL_TREE, arg1);
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 = decl_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 = 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 = decl_tree_cons (NULL_TREE, fn, templates);
4862               candidates 
4863                 = add_template_candidate (candidates, fn, NULL_TREE,
4864                                           this_arglist,  TREE_TYPE
4865                                           (fnname), LOOKUP_NORMAL); 
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 static void
5075 enforce_access (basetype_path, function)
5076      tree basetype_path, function;
5077 {
5078   tree access = compute_access (basetype_path, function);
5079
5080   if (access == access_private_node)
5081     {
5082       cp_error_at ("`%+#D' is %s", function, 
5083                    TREE_PRIVATE (function) ? "private"
5084                    : "from private base class");
5085       error ("within this context");
5086     }
5087   else if (access == access_protected_node)
5088     {
5089       cp_error_at ("`%+#D' %s", function,
5090                    TREE_PROTECTED (function) ? "is protected"
5091                    : "has protected accessibility");
5092       error ("within this context");
5093     }
5094 }
5095
5096 /* Perform the conversions in CONVS on the expression EXPR.  */
5097
5098 static tree
5099 convert_like (convs, expr)
5100      tree convs, expr;
5101 {
5102   if (ICS_BAD_FLAG (convs)
5103       && TREE_CODE (convs) != USER_CONV
5104       && TREE_CODE (convs) != AMBIG_CONV)
5105     {
5106       tree t = convs; 
5107       for (; t; t = TREE_OPERAND (t, 0))
5108         {
5109           if (TREE_CODE (t) == USER_CONV)
5110             {
5111               expr = convert_like (t, expr);
5112               break;
5113             }
5114           else if (TREE_CODE (t) == AMBIG_CONV)
5115             return convert_like (t, expr);
5116           else if (TREE_CODE (t) == IDENTITY_CONV)
5117             break;
5118         }
5119       return convert_for_initialization
5120         (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
5121          "conversion", NULL_TREE, 0);
5122     }
5123
5124   switch (TREE_CODE (convs))
5125     {
5126     case USER_CONV:
5127       {
5128         tree fn = TREE_OPERAND (convs, 1);
5129         tree args;
5130         enforce_access (TREE_OPERAND (convs, 3), fn);
5131
5132         if (DECL_CONSTRUCTOR_P (fn))
5133           {
5134             tree t = build_int_2 (0, 0);
5135             TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
5136
5137             args = build_tree_list (NULL_TREE, expr);
5138             if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5139               args = tree_cons (NULL_TREE, integer_one_node, args);
5140             args = tree_cons (NULL_TREE, t, args);
5141           }
5142         else
5143           args = build_this (expr);
5144         expr = build_over_call
5145           (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
5146            args, LOOKUP_NORMAL);
5147
5148         /* If this is a constructor or a function returning an aggr type,
5149            we need to build up a TARGET_EXPR.  */
5150         if (DECL_CONSTRUCTOR_P (fn))
5151           expr = build_cplus_new (TREE_TYPE (convs), expr);
5152
5153         return expr;
5154       }
5155     case IDENTITY_CONV:
5156       if (type_unknown_p (expr))
5157         expr = instantiate_type (TREE_TYPE (convs), expr, 1);
5158       if (TREE_READONLY_DECL_P (expr))
5159         expr = decl_constant_value (expr);
5160       return expr;
5161     case AMBIG_CONV:
5162       /* Call build_user_type_conversion again for the error.  */
5163       return build_user_type_conversion
5164         (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
5165     };
5166
5167   expr = convert_like (TREE_OPERAND (convs, 0), expr);
5168   if (expr == error_mark_node)
5169     return error_mark_node;
5170
5171   switch (TREE_CODE (convs))
5172     {
5173     case RVALUE_CONV:
5174       if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
5175         return expr;
5176       /* else fall through */
5177     case BASE_CONV:
5178       return build_user_type_conversion
5179         (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
5180     case REF_BIND:
5181       return convert_to_reference
5182         (TREE_TYPE (convs), expr,
5183          CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
5184          error_mark_node);
5185     case LVALUE_CONV:
5186       return decay_conversion (expr);
5187     }
5188   return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5189                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5190 }
5191
5192 static tree
5193 convert_default_arg (type, arg)
5194      tree type, arg;
5195 {
5196   arg = break_out_target_exprs (arg);
5197
5198   if (TREE_CODE (arg) == CONSTRUCTOR)
5199     {
5200       arg = digest_init (type, arg, 0);
5201       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5202                                         "default argument", 0, 0);
5203     }
5204   else
5205     {
5206       /* This could get clobbered by the following call.  */
5207       if (TREE_HAS_CONSTRUCTOR (arg))
5208         arg = copy_node (arg);
5209
5210       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5211                                         "default argument", 0, 0);
5212 #ifdef PROMOTE_PROTOTYPES
5213       if ((TREE_CODE (type) == INTEGER_TYPE
5214            || TREE_CODE (type) == ENUMERAL_TYPE)
5215           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5216         arg = default_conversion (arg);
5217 #endif
5218     }
5219
5220   return arg;
5221 }
5222
5223 static tree
5224 build_over_call (fn, convs, args, flags)
5225      tree fn, convs, args;
5226      int flags;
5227 {
5228   tree converted_args = NULL_TREE;
5229   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5230   tree conv, arg, val;
5231   int i = 0;
5232   int is_method = 0;
5233
5234   if (args && TREE_CODE (args) != TREE_LIST)
5235     args = build_tree_list (NULL_TREE, args);
5236   arg = args;
5237
5238   /* The implicit parameters to a constructor are not considered by overload
5239      resolution, and must be of the proper type.  */
5240   if (DECL_CONSTRUCTOR_P (fn))
5241     {
5242       converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5243       arg = TREE_CHAIN (arg);
5244       parm = TREE_CHAIN (parm);
5245       if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5246         {
5247           converted_args = tree_cons
5248             (NULL_TREE, TREE_VALUE (arg), converted_args);
5249           arg = TREE_CHAIN (arg);
5250           parm = TREE_CHAIN (parm);
5251         }
5252     }      
5253   /* Bypass access control for 'this' parameter.  */
5254   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5255     {
5256       tree parmtype = TREE_VALUE (parm);
5257       tree argtype = TREE_TYPE (TREE_VALUE (arg));
5258       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5259         {
5260           int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5261                     < TYPE_VOLATILE (TREE_TYPE (argtype)));
5262           int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5263                     < TYPE_READONLY (TREE_TYPE (argtype)));
5264           char *p = (dv && dc ? "const and volatile"
5265                               : dc ? "const" : dv ? "volatile" : "");
5266
5267           cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5268                       TREE_TYPE (argtype), fn, p);
5269         }
5270       converted_args = tree_cons
5271         (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5272          converted_args);
5273       parm = TREE_CHAIN (parm);
5274       arg = TREE_CHAIN (arg);
5275       ++i;
5276       is_method = 1;
5277     }
5278
5279   for (; arg && parm;
5280        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5281     {
5282       tree type = TREE_VALUE (parm);
5283
5284       conv = TREE_VEC_ELT (convs, i);
5285       if (ICS_BAD_FLAG (conv))
5286         {
5287           tree t = conv;
5288           val = TREE_VALUE (arg);
5289
5290           for (; t; t = TREE_OPERAND (t, 0))
5291             {
5292               if (TREE_CODE (t) == USER_CONV
5293                   || TREE_CODE (t) == AMBIG_CONV)
5294                 {
5295                   val = convert_like (t, val);
5296                   break;
5297                 }
5298               else if (TREE_CODE (t) == IDENTITY_CONV)
5299                 break;
5300             }
5301           val = convert_for_initialization
5302             (NULL_TREE, type, val, LOOKUP_NORMAL,
5303              "argument passing", fn, i - is_method);
5304         }
5305       else
5306         val = convert_like (conv, TREE_VALUE (arg));
5307
5308 #ifdef PROMOTE_PROTOTYPES
5309       if ((TREE_CODE (type) == INTEGER_TYPE
5310            || TREE_CODE (type) == ENUMERAL_TYPE)
5311           && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5312         val = default_conversion (val);
5313 #endif
5314       converted_args = tree_cons (NULL_TREE, val, converted_args);
5315     }
5316
5317   /* Default arguments */
5318   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5319     {
5320       tree arg = TREE_PURPOSE (parm);
5321
5322       if (DECL_TEMPLATE_INFO (fn))
5323         /* This came from a template.  Instantiate the default arg here,
5324            not in tsubst.  */
5325         arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5326                            TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5327       converted_args = tree_cons
5328         (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5329          converted_args);
5330     }
5331
5332   /* Ellipsis */
5333   for (; arg; arg = TREE_CHAIN (arg))
5334     {
5335       val = TREE_VALUE (arg);
5336
5337       if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5338           && (TYPE_PRECISION (TREE_TYPE (val))
5339               < TYPE_PRECISION (double_type_node)))
5340         /* Convert `float' to `double'.  */
5341         val = cp_convert (double_type_node, val);
5342       else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5343                && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5344         cp_warning ("cannot pass objects of type `%T' through `...'",
5345                     TREE_TYPE (val));
5346       else
5347         /* Convert `short' and `char' to full-size `int'.  */
5348         val = default_conversion (val);
5349
5350       converted_args = tree_cons (NULL_TREE, val, converted_args);
5351     }
5352
5353   converted_args = nreverse (converted_args);
5354
5355   /* Avoid actually calling copy constructors and copy assignment operators,
5356      if possible.  */
5357   if (DECL_CONSTRUCTOR_P (fn)
5358       && TREE_VEC_LENGTH (convs) == 1
5359       && copy_args_p (fn))
5360     {
5361       tree targ;
5362       arg = TREE_VALUE (TREE_CHAIN (converted_args));
5363
5364       /* Pull out the real argument, disregarding const-correctness.  */
5365       targ = arg;
5366       while (TREE_CODE (targ) == NOP_EXPR
5367              || TREE_CODE (targ) == NON_LVALUE_EXPR
5368              || TREE_CODE (targ) == CONVERT_EXPR)
5369         targ = TREE_OPERAND (targ, 0);
5370       if (TREE_CODE (targ) == ADDR_EXPR)
5371         {
5372           targ = TREE_OPERAND (targ, 0);
5373           if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5374                            TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5375             targ = NULL_TREE;
5376         }
5377       else
5378         targ = NULL_TREE;
5379
5380       if (targ)
5381         arg = targ;
5382       else
5383         arg = build_indirect_ref (arg, 0);
5384
5385       /* [class.copy]: the copy constructor is implicitly defined even if
5386          the implementation elided its use.  */
5387       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5388         mark_used (fn);
5389
5390       /* If we're creating a temp and we already have one, don't create a
5391          new one.  If we're not creating a temp but we get one, use
5392          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
5393          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5394          temp or an INIT_EXPR otherwise.  */
5395       if (integer_zerop (TREE_VALUE (args)))
5396         {
5397           if (! real_lvalue_p (arg))
5398             return arg;
5399           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5400             {
5401               val = build (VAR_DECL, DECL_CONTEXT (fn));
5402               layout_decl (val, 0);
5403               val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5404               TREE_SIDE_EFFECTS (val) = 1;
5405               return val;
5406             }
5407         }
5408       else if (! real_lvalue_p (arg)
5409                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5410         {
5411           tree to = stabilize_reference
5412             (build_indirect_ref (TREE_VALUE (args), 0));
5413           val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5414           TREE_SIDE_EFFECTS (val) = 1;
5415           return build_unary_op (ADDR_EXPR, val, 0);
5416         }
5417     }
5418   else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5419            && copy_args_p (fn)
5420            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5421     {
5422       tree to = stabilize_reference
5423         (build_indirect_ref (TREE_VALUE (converted_args), 0));
5424       arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5425       val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5426       TREE_SIDE_EFFECTS (val) = 1;
5427       return val;
5428     }
5429
5430   mark_used (fn);
5431
5432   if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5433     return build_signature_method_call (fn, converted_args);
5434   else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5435     {
5436       tree t, *p = &TREE_VALUE (converted_args);
5437       tree binfo = get_binfo
5438         (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5439       *p = convert_pointer_to_real (binfo, *p);
5440       if (TREE_SIDE_EFFECTS (*p))
5441         *p = save_expr (*p);
5442       t = build_pointer_type (TREE_TYPE (fn));
5443       fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5444       TREE_TYPE (fn) = t;
5445     }
5446   else if (DECL_INLINE (fn))
5447     fn = inline_conversion (fn);
5448   else
5449     fn = build_addr_func (fn);
5450
5451   fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5452   if (TREE_TYPE (fn) == void_type_node)
5453     return fn;
5454   fn = require_complete_type (fn);
5455   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5456     fn = build_cplus_new (TREE_TYPE (fn), fn);
5457   return convert_from_reference (fn);
5458 }
5459
5460 static tree
5461 build_new_method_call (instance, name, args, basetype_path, flags)
5462      tree instance, name, args, basetype_path;
5463      int flags;
5464 {
5465   struct z_candidate *candidates = 0, *cand;
5466   tree explicit_targs = NULL_TREE;
5467   tree basetype, mem_args, fns, instance_ptr;
5468   tree pretty_name;
5469   tree user_args = args;
5470   tree templates = NULL_TREE;
5471   int template_only = 0;
5472
5473   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5474     {
5475       explicit_targs = TREE_OPERAND (name, 1);
5476       name = TREE_OPERAND (name, 0);
5477       template_only = 1;
5478     }
5479
5480   /* If there is an extra argument for controlling virtual bases,
5481      remove it for error reporting.  */
5482   if (flags & LOOKUP_HAS_IN_CHARGE)
5483     user_args = TREE_CHAIN (args);
5484
5485   args = resolve_args (args);
5486
5487   if (args == error_mark_node)
5488     return error_mark_node;
5489
5490   if (instance == NULL_TREE)
5491     basetype = BINFO_TYPE (basetype_path);
5492   else
5493     {
5494       if (TREE_CODE (instance) == OFFSET_REF)
5495         instance = resolve_offset_ref (instance);
5496       if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5497         instance = convert_from_reference (instance);
5498       basetype = TREE_TYPE (instance);
5499
5500       /* XXX this should be handled before we get here.  */
5501       if (! IS_AGGR_TYPE (basetype)
5502           && ! (TYPE_LANG_SPECIFIC (basetype)
5503                 && (IS_SIGNATURE_POINTER (basetype)
5504                     || IS_SIGNATURE_REFERENCE (basetype))))
5505         {
5506           if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5507             cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5508                       name, instance, basetype);
5509
5510           return error_mark_node;
5511         }
5512
5513       /* If `instance' is a signature pointer/reference and `name' is
5514          not a constructor, we are calling a signature member function.
5515          In that case set the `basetype' to the signature type.  */
5516       if ((IS_SIGNATURE_POINTER (basetype)
5517            || IS_SIGNATURE_REFERENCE (basetype))
5518           && TYPE_IDENTIFIER (basetype) != name)
5519         basetype = SIGNATURE_TYPE (basetype);
5520     }
5521
5522   if (basetype_path == NULL_TREE)
5523     basetype_path = TYPE_BINFO (basetype);
5524
5525   if (instance)
5526     {
5527       instance_ptr = build_this (instance);
5528
5529       /* XXX this should be handled before we get here.  */
5530       fns = build_field_call (basetype_path, instance_ptr, name, args);
5531       if (fns)
5532         return fns;
5533     }
5534   else
5535     {
5536       instance_ptr = build_int_2 (0, 0);
5537       TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5538     }
5539
5540   pretty_name
5541     = (name == ctor_identifier ? constructor_name (basetype) : name);
5542
5543   fns = lookup_fnfields (basetype_path, name, 1);
5544
5545   if (fns == error_mark_node)
5546     return error_mark_node;
5547   if (fns)
5548     {
5549       tree t = TREE_VALUE (fns);
5550       if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5551           && ! (flags & LOOKUP_HAS_IN_CHARGE))
5552         {
5553           flags |= LOOKUP_HAS_IN_CHARGE;
5554           args = tree_cons (NULL_TREE, integer_one_node, args);
5555         }
5556       mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5557       for (; t; t = DECL_CHAIN (t))
5558         {
5559           tree this_arglist;
5560
5561           /* We can end up here for copy-init of same or base class.  */
5562           if (name == ctor_identifier
5563               && (flags & LOOKUP_ONLYCONVERTING)
5564               && DECL_NONCONVERTING_P (t))
5565             continue;
5566           if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5567             this_arglist = mem_args;
5568           else
5569             this_arglist = args;
5570
5571           if (TREE_CODE (t) == TEMPLATE_DECL)
5572             {
5573               /* A member template. */
5574               templates = decl_tree_cons (NULL_TREE, t, templates);
5575               candidates = 
5576                 add_template_candidate (candidates, t, explicit_targs,
5577                                         this_arglist,
5578                                         TREE_TYPE (name), 
5579                                         LOOKUP_NORMAL); 
5580             }
5581           else if (! template_only)
5582             candidates = add_function_candidate (candidates, t,
5583                                                  this_arglist, flags);
5584
5585           if (candidates)
5586             candidates->basetype_path = TREE_PURPOSE (fns);
5587         }
5588     }
5589
5590   if (! any_viable (candidates))
5591     {
5592       /* XXX will LOOKUP_SPECULATIVELY be needed when this is done?  */
5593       if (flags & LOOKUP_SPECULATIVELY)
5594         return NULL_TREE;
5595       cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5596                 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5597       print_z_candidates (candidates);
5598       return error_mark_node;
5599     }
5600   candidates = splice_viable (candidates);
5601   cand = tourney (candidates);
5602
5603   if (cand == 0)
5604     {
5605       cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5606                 user_args);
5607       print_z_candidates (candidates);
5608       return error_mark_node;
5609     }
5610
5611   enforce_access (cand->basetype_path, cand->fn);
5612   if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5613       && instance == current_class_ref
5614       && DECL_CONSTRUCTOR_P (current_function_decl)
5615       && ! (flags & LOOKUP_NONVIRTUAL)
5616       && value_member (cand->fn, get_abstract_virtuals (basetype)))
5617     cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5618   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5619       && TREE_CODE (instance_ptr) == NOP_EXPR
5620       && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5621     cp_error ("cannot call member function `%D' without object", cand->fn);
5622
5623   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5624       && ((instance == current_class_ref && (dtor_label || ctor_label))
5625           || resolves_to_fixed_type_p (instance, 0)))
5626     flags |= LOOKUP_NONVIRTUAL;
5627
5628   /* Pedantically, normal function declarations are never considered
5629      to refer to template instantiations, so we only do this with
5630      -fguiding-decls.  */ 
5631   if (flag_guiding_decls && templates && ! cand->template 
5632       && ! DECL_INITIAL (cand->fn))
5633     add_maybe_template (cand->fn, templates);
5634
5635   return build_over_call
5636     (cand->fn, cand->convs,
5637      TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5638      flags);
5639 }
5640
5641 /* Compare two implicit conversion sequences that differ only in their
5642    qualification conversion.  Subroutine of compare_ics.  */
5643
5644 static int
5645 compare_qual (ics1, ics2)
5646      tree ics1, ics2;
5647 {
5648   tree to1 = TREE_TYPE (ics1);
5649   tree to2 = TREE_TYPE (ics2);
5650
5651   if (TYPE_PTRMEMFUNC_P (to1))
5652     to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1);
5653   if (TYPE_PTRMEMFUNC_P (to2))
5654     to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2);
5655
5656   to1 = TREE_TYPE (to1);
5657   to2 = TREE_TYPE (to2);
5658
5659   if (TREE_CODE (to1) == OFFSET_TYPE)
5660     {
5661       to1 = TREE_TYPE (to1);
5662       to2 = TREE_TYPE (to2);
5663     }
5664
5665   if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5666       && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5667     return -1;
5668   else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5669            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5670     return -1;
5671   else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5672            && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5673     return 1;
5674   else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5675            && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5676     return 1;
5677   return 0;
5678 }
5679
5680 /* Determine whether standard conversion sequence ICS1 is a proper
5681    subsequence of ICS2.  We assume that a conversion of the same code
5682    between the same types indicates a subsequence.  */
5683
5684 static int
5685 is_subseq (ics1, ics2)
5686      tree ics1, ics2;
5687 {
5688   /* Do not consider lvalue transformations here.  */
5689   if (TREE_CODE (ics2) == RVALUE_CONV
5690       || TREE_CODE (ics2) == LVALUE_CONV)
5691     return 0;
5692
5693   for (;; ics2 = TREE_OPERAND (ics2, 0))
5694     {
5695       if (TREE_CODE (ics2) == TREE_CODE (ics1)
5696           && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
5697           && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5698                         TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
5699         return 1;
5700
5701       if (TREE_CODE (ics2) == USER_CONV
5702           || TREE_CODE (ics2) == AMBIG_CONV
5703           || TREE_CODE (ics2) == IDENTITY_CONV)
5704         return 0;
5705     }
5706 }
5707
5708 /* Compare two implicit conversion sequences according to the rules set out in
5709    [over.ics.rank].  Return values:
5710
5711       1: ics1 is better than ics2
5712      -1: ics2 is better than ics1
5713       0: ics1 and ics2 are indistinguishable */
5714
5715 static int
5716 compare_ics (ics1, ics2)
5717      tree ics1, ics2;
5718 {
5719   tree main1, main2;
5720
5721   if (TREE_CODE (ics1) == QUAL_CONV)
5722     main1 = TREE_OPERAND (ics1, 0);
5723   else
5724     main1 = ics1;
5725
5726   if (TREE_CODE (ics2) == QUAL_CONV)
5727     main2 = TREE_OPERAND (ics2, 0);
5728   else
5729     main2 = ics2;
5730
5731   /* Conversions for `this' are PTR_CONVs, but we compare them as though
5732      they were REF_BINDs.  */
5733   if (ICS_THIS_FLAG (ics1))
5734     {
5735       tree t = main1;
5736       if (TREE_CODE (t) == PTR_CONV)
5737         t = TREE_OPERAND (t, 0);
5738       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5739       t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5740       ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5741       main1 = ics1 = t;
5742     }
5743   if (ICS_THIS_FLAG (ics2))
5744     {
5745       tree t = main2;
5746       if (TREE_CODE (t) == PTR_CONV)
5747         t = TREE_OPERAND (t, 0);
5748       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5749       t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5750       ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5751       main2 = ics2 = t;
5752     }
5753
5754   if (ICS_RANK (ics1) > ICS_RANK (ics2))
5755     return -1;
5756   else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5757     return 1;
5758
5759   if (ICS_RANK (ics1) == BAD_RANK)
5760     {
5761       if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5762           || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5763         return -1;
5764       else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5765                || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5766         return 1;
5767
5768       /* else fall through */
5769     }
5770
5771   /* User-defined  conversion sequence U1 is a better conversion sequence
5772      than another user-defined conversion sequence U2 if they contain the
5773      same user-defined conversion operator or constructor and if the sec-
5774      ond standard conversion sequence of U1 is  better  than  the  second
5775      standard conversion sequence of U2.  */
5776
5777   if (ICS_USER_FLAG (ics1))
5778     {
5779       tree t1, t2;
5780
5781       for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5782         if (TREE_CODE (t1) == AMBIG_CONV)
5783           return 0;
5784       for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5785         if (TREE_CODE (t2) == AMBIG_CONV)
5786           return 0;
5787
5788       if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5789         return 0;
5790       else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5791         return -1;
5792       else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5793         return 1;
5794
5795       /* else fall through */
5796     }
5797
5798 #if 0 /* Handled by ranking */
5799   /* A conversion that is not a conversion of a pointer,  or  pointer  to
5800      member,  to  bool  is  better than another conversion that is such a
5801      conversion.  */
5802 #endif
5803
5804   if (TREE_CODE (main1) != TREE_CODE (main2))
5805     {
5806       /* ...if S1  is  a  proper  subsequence  of  S2  */
5807       if (is_subseq (main1, main2))
5808         return 1;
5809       if (is_subseq (main2, main1))
5810         return -1;
5811       return 0;
5812     }
5813
5814   if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5815       || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5816     {
5817       tree to1 = TREE_TYPE (main1);
5818       tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5819       tree to2 = TREE_TYPE (main2);
5820       tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5821       int distf, distt;
5822
5823       /* Standard conversion sequence S1 is a better conversion sequence than
5824          standard conversion sequence S2 if...
5825
5826          S1 and S2 differ only in their qualification conversion  and  they
5827          yield types identical except for cv-qualifiers and S2 adds all the
5828          qualifiers that S1 adds (and in the same places) and S2  adds  yet
5829          more  cv-qualifiers  than  S1,  or the similar case with reference
5830          binding15).  */
5831       if (TREE_CODE (main1) == REF_BIND)
5832         {
5833           if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
5834               == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
5835             return compare_qual (ics1, ics2);
5836         }
5837       else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
5838         return compare_qual (ics1, ics2);
5839         
5840       if (TYPE_PTRMEMFUNC_P (to1))
5841         {
5842           to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
5843           from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
5844         }
5845       else if (TREE_CODE (main1) != BASE_CONV)
5846         {
5847           to1 = TREE_TYPE (to1);
5848           if (TREE_CODE (main1) != REF_BIND)
5849             from1 = TREE_TYPE (from1);
5850
5851           if (TREE_CODE (to1) == OFFSET_TYPE)
5852             {
5853               to1 = TYPE_OFFSET_BASETYPE (to1);
5854               from1 = TYPE_OFFSET_BASETYPE (from1);
5855             }
5856         }
5857
5858       if (TYPE_PTRMEMFUNC_P (to2))
5859         {
5860           to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
5861           from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
5862         }
5863       else if (TREE_CODE (main1) != BASE_CONV)
5864         {
5865           to2 = TREE_TYPE (to2);
5866           if (TREE_CODE (main1) != REF_BIND)
5867             from2 = TREE_TYPE (from2);
5868
5869           if (TREE_CODE (to2) == OFFSET_TYPE)
5870             {
5871               to2 = TYPE_OFFSET_BASETYPE (to2);
5872               from2 = TYPE_OFFSET_BASETYPE (from2);
5873             }
5874         }
5875
5876       if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
5877         return 0;
5878
5879       /* The sense of pmem conversions is reversed from that of the other
5880          conversions.  */
5881       if (TREE_CODE (main1) == PMEM_CONV)
5882         {
5883           tree t = from1; from1 = from2; from2 = t;
5884           t = to1; to1 = to2; to2 = t;
5885         }
5886
5887       distf = get_base_distance (from1, from2, 0, 0);
5888       if (distf == -1)
5889         {
5890           distf = -get_base_distance (from2, from1, 0, 0);
5891           if (distf == 1)
5892             return 0;
5893         }
5894
5895       /* If class B is derived directly or indirectly from class A,
5896          conver- sion of B* to A* is better than conversion of B* to
5897          void*, and conversion of A* to void* is better than
5898          conversion of B* to void*.  */
5899
5900       if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
5901         {
5902           if (distf > 0)
5903             return 1;
5904           else if (distf < 0)
5905             return -1;
5906         }
5907       else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
5908                && get_base_distance (to1, from1, 0, 0) != -1)
5909         return 1;
5910       else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
5911                && get_base_distance (to2, from2, 0, 0) != -1)
5912         return -1;
5913
5914       if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
5915         return 0;
5916
5917       /* If  class B is derived directly or indirectly from class A and class
5918          C is derived directly or indirectly from B */
5919
5920       distt = get_base_distance (to1, to2, 0, 0);
5921       if (distt == -1)
5922         {
5923           distt = -get_base_distance (to2, to1, 0, 0);
5924           if (distt == 1)
5925             return 0;
5926         }
5927
5928       /* --conversion of C* to B* is better than conversion of C* to A*, */
5929       if (distf == 0)
5930         {
5931           if (distt > 0)
5932             return -1;
5933           else if (distt < 0)
5934             return 1;
5935         }
5936       /* --conversion of B* to A* is better than conversion of C* to A*, */
5937       else if (distt == 0)
5938         {
5939           if (distf > 0)
5940             return 1;
5941           else if (distf < 0)
5942             return -1;
5943         }
5944     }
5945   else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
5946            || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
5947     {
5948       if (TREE_TYPE (main1) == TREE_TYPE (main2))
5949         return compare_qual (ics1, ics2);
5950
5951 #if 0 /* This is now handled by making identity better than anything else.  */
5952       /* existing practice, not WP-endorsed: const char * -> const char *
5953          is better than char * -> const char *.  (jason 6/29/96) */
5954       if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
5955         return -compare_qual (main1, main2);
5956 #endif
5957     }
5958
5959   return 0;
5960 }
5961
5962 /* The source type for this standard conversion sequence.  */
5963
5964 static tree
5965 source_type (t)
5966      tree t;
5967 {
5968   for (;; t = TREE_OPERAND (t, 0))
5969     {
5970       if (TREE_CODE (t) == USER_CONV
5971           || TREE_CODE (t) == AMBIG_CONV
5972           || TREE_CODE (t) == IDENTITY_CONV)
5973         return TREE_TYPE (t);
5974     }
5975   my_friendly_abort (1823);
5976 }
5977
5978 /* Compare two candidates for overloading as described in
5979    [over.match.best].  Return values:
5980
5981       1: cand1 is better than cand2
5982      -1: cand2 is better than cand1
5983       0: cand1 and cand2 are indistinguishable */
5984
5985 static int
5986 joust (cand1, cand2)
5987      struct z_candidate *cand1, *cand2;
5988 {
5989   int winner = 0;
5990   int i, off1 = 0, off2 = 0, len;
5991
5992   /* Candidates that involve bad conversions are always worse than those
5993      that don't.  */
5994   if (cand1->viable > cand2->viable)
5995     return 1;
5996   if (cand1->viable < cand2->viable)
5997     return -1;
5998
5999   /* a viable function F1
6000      is defined to be a better function than another viable function F2  if
6001      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
6002      ICSi(F2), and then */
6003
6004   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
6005      ICSj(F2) */
6006
6007   /* For comparing static and non-static member functions, we ignore the
6008      implicit object parameter of the non-static function.  The WP says to
6009      pretend that the static function has an object parm, but that won't
6010      work with operator overloading.  */
6011   len = TREE_VEC_LENGTH (cand1->convs);
6012   if (len != TREE_VEC_LENGTH (cand2->convs))
6013     {
6014       if (DECL_STATIC_FUNCTION_P (cand1->fn)
6015           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
6016         off2 = 1;
6017       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
6018                && DECL_STATIC_FUNCTION_P (cand2->fn))
6019         {
6020           off1 = 1;
6021           --len;
6022         }
6023       else
6024         my_friendly_abort (42);
6025     }
6026
6027   for (i = 0; i < len; ++i)
6028     {
6029       tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
6030       tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
6031       int comp = compare_ics (t1, t2);
6032
6033       if (comp != 0)
6034         {
6035 #if 0 /* move this warning to tourney.  */
6036           if (warn_sign_promo
6037               && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
6038               && TREE_CODE (t1) == STD_CONV
6039               && TREE_CODE (t2) == STD_CONV
6040               && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
6041               && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
6042               && (TYPE_PRECISION (TREE_TYPE (t1))
6043                   == TYPE_PRECISION (TREE_TYPE (t2)))
6044               && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
6045                   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
6046                       == ENUMERAL_TYPE)))
6047             {
6048               tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
6049               tree type1, type2;
6050               if (comp > 0)
6051                 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
6052               else
6053                 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
6054
6055               cp_warning ("passing `%T' chooses `%T' over `%T'",
6056                           type, type1, type2);
6057               cp_warning ("  in call to `%D'", DECL_NAME (cand1->fn));
6058             }
6059 #endif
6060
6061           if (winner && comp != winner)
6062             {
6063               winner = 0;
6064               goto tweak;
6065             }
6066           winner = comp;
6067         }
6068     }
6069
6070 #if 0 /* move this warning to tourney.  */
6071   /* warn about confusing overload resolution */
6072   if (winner && cand1->second_conv
6073       && ! DECL_CONSTRUCTOR_P (cand1->fn)
6074       && ! DECL_CONSTRUCTOR_P (cand2->fn))
6075     {
6076       int comp = compare_ics (cand1->second_conv, cand2->second_conv);
6077       if (comp && comp != winner)
6078         {
6079           struct z_candidate *w, *l;
6080           if (winner == 1)
6081             w = cand1, l = cand2;
6082           else
6083             w = cand2, l = cand1;
6084           cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
6085           cp_warning ("  for conversion from `%T' to `%T'",
6086                       TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
6087                       TREE_TYPE (w->second_conv));
6088           cp_warning ("  because conversion sequence for `this' argument is better");
6089         }
6090     }
6091 #endif
6092
6093   if (winner)
6094     return winner;
6095
6096   /* or, if not that,
6097      F1 is a non-template function and F2 is a template function */
6098
6099   if (! cand1->template && cand2->template)
6100     return 1;
6101   else if (cand1->template && ! cand2->template)
6102     return -1;
6103   else if (cand1->template && cand2->template)
6104     winner = more_specialized
6105       (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
6106
6107   /* or, if not that,
6108      the  context  is  an  initialization by user-defined conversion (see
6109      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
6110      sequence  from  the return type of F1 to the destination type (i.e.,
6111      the type of the entity being initialized)  is  a  better  conversion
6112      sequence  than the standard conversion sequence from the return type
6113      of F2 to the destination type.  */
6114
6115   if (! winner && cand1->second_conv)
6116     winner = compare_ics (cand1->second_conv, cand2->second_conv);
6117
6118   /* If the built-in candidates are the same, arbitrarily pick one.  */
6119   if (! winner && cand1->fn == cand2->fn
6120       && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6121     {
6122       for (i = 0; i < len; ++i)
6123         if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
6124                          TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
6125           break;
6126       if (i == TREE_VEC_LENGTH (cand1->convs))
6127         return 1;
6128
6129       /* Kludge around broken overloading rules whereby
6130          Integer a, b; test ? a : b; is ambiguous, since there's a builtin
6131          that takes references and another that takes values.  */
6132       if (cand1->fn == ansi_opname[COND_EXPR])
6133         {
6134           tree c1 = TREE_VEC_ELT (cand1->convs, 1);
6135           tree c2 = TREE_VEC_ELT (cand2->convs, 1);
6136           tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
6137           tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
6138
6139           if (comptypes (t1, t2, 1))
6140             {
6141               if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
6142                 return 1;
6143               if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
6144                 return -1;
6145             }
6146         }
6147     }
6148
6149 tweak:
6150
6151   /* Extension: If the worst conversion for one candidate is worse than the
6152      worst conversion for the other, take the first.  */
6153   if (! winner && ! pedantic)
6154     {
6155       int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
6156
6157       for (i = 0; i < len; ++i)
6158         {
6159           if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
6160             rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
6161           if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
6162             rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
6163         }
6164
6165       if (rank1 < rank2)
6166         return 1;
6167       if (rank1 > rank2)
6168         return -1;
6169     }
6170
6171   return winner;
6172 }
6173
6174 /* Given a list of candidates for overloading, find the best one, if any.
6175    This algorithm has a worst case of O(2n) (winner is last), and a best
6176    case of O(n/2) (totally ambiguous); much better than a sorting
6177    algorithm.  */
6178
6179 static struct z_candidate *
6180 tourney (candidates)
6181      struct z_candidate *candidates;
6182 {
6183   struct z_candidate *champ = candidates, *challenger;
6184   int fate;
6185
6186   /* Walk through the list once, comparing each current champ to the next
6187      candidate, knocking out a candidate or two with each comparison.  */
6188
6189   for (challenger = champ->next; challenger; )
6190     {
6191       fate = joust (champ, challenger);
6192       if (fate == 1)
6193         challenger = challenger->next;
6194       else
6195         {
6196           if (fate == 0)
6197             {
6198               champ = challenger->next;
6199               if (champ == 0)
6200                 return 0;
6201             }
6202           else
6203             champ = challenger;
6204
6205           challenger = champ->next;
6206         }
6207     }
6208
6209   /* Make sure the champ is better than all the candidates it hasn't yet
6210      been compared to.  This may do one more comparison than necessary.  Oh
6211      well.  */
6212
6213   for (challenger = candidates; challenger != champ;
6214        challenger = challenger->next)
6215     {
6216       fate = joust (champ, challenger);
6217       if (fate != 1)
6218         return 0;
6219     }
6220
6221   return champ;
6222 }
6223
6224 int
6225 can_convert (to, from)
6226      tree to, from;
6227 {
6228   if (flag_ansi_overloading)
6229     {
6230       tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
6231       return (t && ! ICS_BAD_FLAG (t));
6232     }
6233   else
6234     {
6235       struct harshness_code h;
6236       h = convert_harshness (to, from, NULL_TREE);
6237       return (h.code < USER_CODE) && (h.distance >= 0);
6238     }
6239 }
6240
6241 int
6242 can_convert_arg (to, from, arg)
6243      tree to, from, arg;
6244 {
6245   if (flag_ansi_overloading)
6246     {
6247       tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6248       return (t && ! ICS_BAD_FLAG (t));
6249     }
6250   else
6251     {
6252       struct harshness_code h;
6253       h = convert_harshness (to, from, arg);
6254       return (h.code < USER_CODE) && (h.distance >= 0);
6255     }
6256 }