OSDN Git Service

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