Initial revision
[official-gcc.git] / gcc / cp / call.c
blob48c7bb96339ccfa30887aeb4b707868fbbd15229
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 hacked by Brendan Kehoe (brendan@cygnus.com).
6 This file is part of GNU CC.
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.
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.
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. */
24 /* High-level class interface. */
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"
34 #include "obstack.h"
35 #define obstack_chunk_alloc xmalloc
36 #define obstack_chunk_free free
38 extern void sorry ();
40 extern int inhibit_warnings;
41 extern tree ctor_label, dtor_label;
43 /* Compute the ease with which a conversion can be performed
44 between an expected and the given type. */
46 static struct harshness_code convert_harshness PROTO((register tree, register tree, tree));
47 static tree build_new_method_call PROTO((tree, tree, tree, tree, int));
49 #define EVIL_RETURN(ARG) ((ARG).code = EVIL_CODE, (ARG))
50 #define STD_RETURN(ARG) ((ARG).code = STD_CODE, (ARG))
51 #define QUAL_RETURN(ARG) ((ARG).code = QUAL_CODE, (ARG))
52 #define TRIVIAL_RETURN(ARG) ((ARG).code = TRIVIAL_CODE, (ARG))
53 #define ZERO_RETURN(ARG) ((ARG).code = 0, (ARG))
55 /* Ordering function for overload resolution. Compare two candidates
56 by gross quality. */
58 int
59 rank_for_overload (x, y)
60 struct candidate *x, *y;
62 if (y->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
63 return y->h.code - x->h.code;
64 if (x->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
65 return -1;
67 /* This is set by compute_conversion_costs, for calling a non-const
68 member function from a const member function. */
69 if ((y->harshness[0].code & CONST_CODE) ^ (x->harshness[0].code & CONST_CODE))
70 return y->harshness[0].code - x->harshness[0].code;
72 if (y->h.code & STD_CODE)
74 if (x->h.code & STD_CODE)
75 return y->h.distance - x->h.distance;
76 return 1;
78 if (x->h.code & STD_CODE)
79 return -1;
81 return y->h.code - x->h.code;
84 /* Compare two candidates, argument by argument. */
86 static int
87 rank_for_ideal (x, y)
88 struct candidate *x, *y;
90 int i;
92 if (x->h_len != y->h_len)
93 abort ();
95 for (i = 0; i < x->h_len; i++)
97 if (y->harshness[i].code - x->harshness[i].code)
98 return y->harshness[i].code - x->harshness[i].code;
99 if ((y->harshness[i].code & STD_CODE)
100 && (y->harshness[i].distance - x->harshness[i].distance))
101 return y->harshness[i].distance - x->harshness[i].distance;
103 /* They're both the same code. Now see if we're dealing with an
104 integral promotion that needs a finer grain of accuracy. */
105 if (y->harshness[0].code & PROMO_CODE
106 && (y->harshness[i].int_penalty ^ x->harshness[i].int_penalty))
107 return y->harshness[i].int_penalty - x->harshness[i].int_penalty;
109 return 0;
112 /* TYPE is the type we wish to convert to. PARM is the parameter
113 we have to work with. We use a somewhat arbitrary cost function
114 to measure this conversion. */
116 static struct harshness_code
117 convert_harshness (type, parmtype, parm)
118 register tree type, parmtype;
119 tree parm;
121 struct harshness_code h;
122 register enum tree_code codel;
123 register enum tree_code coder;
124 int lvalue;
126 h.code = 0;
127 h.distance = 0;
128 h.int_penalty = 0;
130 #ifdef GATHER_STATISTICS
131 n_convert_harshness++;
132 #endif
134 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
136 if (parm)
137 parm = convert_from_reference (parm);
138 parmtype = TREE_TYPE (parmtype);
139 lvalue = 1;
141 else if (parm)
142 lvalue = lvalue_p (parm);
143 else
144 lvalue = 0;
146 if (TYPE_PTRMEMFUNC_P (type))
147 type = TYPE_PTRMEMFUNC_FN_TYPE (type);
148 if (TYPE_PTRMEMFUNC_P (parmtype))
149 parmtype = TYPE_PTRMEMFUNC_FN_TYPE (parmtype);
151 codel = TREE_CODE (type);
152 coder = TREE_CODE (parmtype);
154 if (TYPE_MAIN_VARIANT (parmtype) == TYPE_MAIN_VARIANT (type))
155 return ZERO_RETURN (h);
157 if (coder == ERROR_MARK)
158 return EVIL_RETURN (h);
160 if (codel == REFERENCE_TYPE)
162 tree ttl, ttr;
163 int constp = parm ? TREE_READONLY (parm) : TYPE_READONLY (parmtype);
164 int volatilep = (parm ? TREE_THIS_VOLATILE (parm)
165 : TYPE_VOLATILE (parmtype));
166 register tree intype = TYPE_MAIN_VARIANT (parmtype);
167 register enum tree_code form = TREE_CODE (intype);
168 int penalty = 0;
170 ttl = TREE_TYPE (type);
172 /* Only allow const reference binding if we were given a parm to deal
173 with, since it isn't really a conversion. This is a hack to
174 prevent build_type_conversion from finding this conversion, but
175 still allow overloading to find it. */
176 if (! lvalue && ! (parm && TYPE_READONLY (ttl)))
177 return EVIL_RETURN (h);
179 if ((TYPE_READONLY (ttl) < constp)
180 || (TYPE_VOLATILE (ttl) < volatilep))
181 return EVIL_RETURN (h);
183 /* When passing a non-const argument into a const reference, dig it a
184 little, so a non-const reference is preferred over this one. */
185 penalty = ((TYPE_READONLY (ttl) > constp)
186 + (TYPE_VOLATILE (ttl) > volatilep));
188 ttl = TYPE_MAIN_VARIANT (ttl);
190 if (form == OFFSET_TYPE)
192 intype = TREE_TYPE (intype);
193 form = TREE_CODE (intype);
196 ttr = intype;
198 if (TREE_CODE (ttl) == ARRAY_TYPE && TREE_CODE (ttr) == ARRAY_TYPE)
200 if (comptypes (ttl, ttr, 1))
201 return ZERO_RETURN (h);
202 return EVIL_RETURN (h);
205 h = convert_harshness (ttl, ttr, NULL_TREE);
206 if (penalty && h.code == 0)
208 h.code = QUAL_CODE;
209 h.int_penalty = penalty;
211 return h;
214 if (codel == POINTER_TYPE && fntype_p (parmtype))
216 tree p1, p2;
217 struct harshness_code h1, h2;
219 /* Get to the METHOD_TYPE or FUNCTION_TYPE that this might be. */
220 type = TREE_TYPE (type);
222 if (coder == POINTER_TYPE)
224 parmtype = TREE_TYPE (parmtype);
225 coder = TREE_CODE (parmtype);
228 if (coder != TREE_CODE (type))
229 return EVIL_RETURN (h);
231 if (type != parmtype && coder == METHOD_TYPE)
233 tree ttl = TYPE_METHOD_BASETYPE (type);
234 tree ttr = TYPE_METHOD_BASETYPE (parmtype);
236 int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
237 if (b_or_d < 0)
239 b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
240 if (b_or_d < 0)
241 return EVIL_RETURN (h);
242 h.distance = -b_or_d;
244 else
245 h.distance = b_or_d;
246 h.code = STD_CODE;
248 type = build_function_type
249 (TREE_TYPE (type), TREE_CHAIN (TYPE_ARG_TYPES (type)));
250 parmtype = build_function_type
251 (TREE_TYPE (parmtype), TREE_CHAIN (TYPE_ARG_TYPES (parmtype)));
254 /* We allow the default conversion between function type
255 and pointer-to-function type for free. */
256 if (comptypes (type, parmtype, 1))
257 return h;
259 if (pedantic)
260 return EVIL_RETURN (h);
262 /* Compare return types. */
263 p1 = TREE_TYPE (type);
264 p2 = TREE_TYPE (parmtype);
265 h2 = convert_harshness (p1, p2, NULL_TREE);
266 if (h2.code & EVIL_CODE)
267 return h2;
269 h1.code = TRIVIAL_CODE;
270 h1.distance = 0;
272 if (h2.distance != 0)
274 tree binfo;
276 /* This only works for pointers. */
277 if (TREE_CODE (p1) != POINTER_TYPE
278 && TREE_CODE (p1) != REFERENCE_TYPE)
279 return EVIL_RETURN (h);
281 p1 = TREE_TYPE (p1);
282 p2 = TREE_TYPE (p2);
283 /* Don't die if we happen to be dealing with void*. */
284 if (!IS_AGGR_TYPE (p1) || !IS_AGGR_TYPE (p2))
285 return EVIL_RETURN (h);
286 if (h2.distance < 0)
287 binfo = get_binfo (p2, p1, 0);
288 else
289 binfo = get_binfo (p1, p2, 0);
291 if (! BINFO_OFFSET_ZEROP (binfo))
293 #if 0
294 static int explained = 0;
295 if (h2.distance < 0)
296 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p2, p1);
297 else
298 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p1, p2);
300 if (! explained++)
301 sorry ("(because pointer values change during conversion)");
302 #endif
303 return EVIL_RETURN (h);
307 h1.code |= h2.code;
308 if (h2.distance > h1.distance)
309 h1.distance = h2.distance;
311 p1 = TYPE_ARG_TYPES (type);
312 p2 = TYPE_ARG_TYPES (parmtype);
313 while (p1 && TREE_VALUE (p1) != void_type_node
314 && p2 && TREE_VALUE (p2) != void_type_node)
316 h2 = convert_harshness (TREE_VALUE (p1), TREE_VALUE (p2),
317 NULL_TREE);
318 if (h2.code & EVIL_CODE)
319 return h2;
321 if (h2.distance)
323 /* This only works for pointers and references. */
324 if (TREE_CODE (TREE_VALUE (p1)) != POINTER_TYPE
325 && TREE_CODE (TREE_VALUE (p1)) != REFERENCE_TYPE)
326 return EVIL_RETURN (h);
327 h2.distance = - h2.distance;
330 h1.code |= h2.code;
331 if (h2.distance > h1.distance)
332 h1.distance = h2.distance;
333 p1 = TREE_CHAIN (p1);
334 p2 = TREE_CHAIN (p2);
336 if (p1 == p2)
337 return h1;
338 if (p2)
340 if (p1)
341 return EVIL_RETURN (h);
342 h1.code |= ELLIPSIS_CODE;
343 return h1;
345 if (p1)
347 if (TREE_PURPOSE (p1) == NULL_TREE)
348 h1.code |= EVIL_CODE;
349 return h1;
352 else if (codel == POINTER_TYPE && coder == OFFSET_TYPE)
354 tree ttl, ttr;
356 /* Get to the OFFSET_TYPE that this might be. */
357 type = TREE_TYPE (type);
359 if (coder != TREE_CODE (type))
360 return EVIL_RETURN (h);
362 ttl = TYPE_OFFSET_BASETYPE (type);
363 ttr = TYPE_OFFSET_BASETYPE (parmtype);
365 if (ttl == ttr)
366 h.code = 0;
367 else
369 int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
370 if (b_or_d < 0)
372 b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
373 if (b_or_d < 0)
374 return EVIL_RETURN (h);
375 h.distance = -b_or_d;
377 else
378 h.distance = b_or_d;
379 h.code = STD_CODE;
382 /* Now test the OFFSET_TYPE's target compatibility. */
383 type = TREE_TYPE (type);
384 parmtype = TREE_TYPE (parmtype);
387 if (coder == UNKNOWN_TYPE)
389 if (codel == FUNCTION_TYPE
390 || codel == METHOD_TYPE
391 || (codel == POINTER_TYPE
392 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
393 || TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)))
394 return TRIVIAL_RETURN (h);
395 return EVIL_RETURN (h);
398 if (coder == VOID_TYPE)
399 return EVIL_RETURN (h);
401 if (codel == BOOLEAN_TYPE)
403 if (INTEGRAL_CODE_P (coder) || coder == REAL_TYPE)
404 return STD_RETURN (h);
405 else if (coder == POINTER_TYPE || coder == OFFSET_TYPE)
407 /* Make this worse than any conversion to another pointer.
408 FIXME this is how I think the language should work, but it may not
409 end up being how the language is standardized (jason 1/30/95). */
410 h.distance = 32767;
411 return STD_RETURN (h);
413 return EVIL_RETURN (h);
416 if (INTEGRAL_CODE_P (codel))
418 /* Control equivalence of ints an enums. */
420 if (codel == ENUMERAL_TYPE
421 && flag_int_enum_equivalence == 0)
423 /* Enums can be converted to ints, but not vice-versa. */
424 if (coder != ENUMERAL_TYPE
425 || TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (parmtype))
426 return EVIL_RETURN (h);
429 /* else enums and ints (almost) freely interconvert. */
431 if (INTEGRAL_CODE_P (coder))
433 if (TYPE_MAIN_VARIANT (type)
434 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
436 h.code = PROMO_CODE;
438 else
439 h.code = STD_CODE;
441 return h;
443 else if (coder == REAL_TYPE)
445 h.code = STD_CODE;
446 h.distance = 0;
447 return h;
451 if (codel == REAL_TYPE)
453 if (coder == REAL_TYPE)
455 if (TYPE_MAIN_VARIANT (type)
456 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
457 h.code = PROMO_CODE;
458 else
459 h.code = STD_CODE;
461 return h;
463 else if (INTEGRAL_CODE_P (coder))
465 h.code = STD_CODE;
466 h.distance = 0;
467 return h;
471 /* Convert arrays which have not previously been converted. */
472 if (coder == ARRAY_TYPE)
474 coder = POINTER_TYPE;
475 if (parm)
477 parm = decay_conversion (parm);
478 parmtype = TREE_TYPE (parm);
480 else
481 parmtype = build_pointer_type (TREE_TYPE (parmtype));
484 /* Conversions among pointers */
485 if (codel == POINTER_TYPE && coder == POINTER_TYPE)
487 register tree ttl = TYPE_MAIN_VARIANT (TREE_TYPE (type));
488 register tree ttr = TYPE_MAIN_VARIANT (TREE_TYPE (parmtype));
489 int penalty = 4 * (ttl != ttr);
491 /* Anything converts to void *. Since this may be `const void *'
492 (etc.) use VOID_TYPE instead of void_type_node. Otherwise, the
493 targets must be the same, except that we do allow (at some cost)
494 conversion between signed and unsigned pointer types. */
496 if ((TREE_CODE (ttl) == METHOD_TYPE
497 || TREE_CODE (ttl) == FUNCTION_TYPE)
498 && TREE_CODE (ttl) == TREE_CODE (ttr))
500 if (comptypes (ttl, ttr, -1))
502 h.code = penalty ? STD_CODE : 0;
503 h.distance = 0;
505 else
506 h.code = EVIL_CODE;
507 return h;
510 #if 1
511 if (TREE_CODE (ttl) != VOID_TYPE
512 && (TREE_CODE (ttr) != VOID_TYPE || !parm || !null_ptr_cst_p (parm)))
514 if (comp_target_types (type, parmtype, 1) <= 0)
515 return EVIL_RETURN (h);
517 #else
518 if (!(TREE_CODE (ttl) == VOID_TYPE
519 || TREE_CODE (ttr) == VOID_TYPE
520 || (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (ttr)
521 && (ttl = unsigned_type (ttl),
522 ttr = unsigned_type (ttr),
523 penalty = 10, 0))
524 || (comp_target_types (ttl, ttr, 0) > 0)))
525 return EVIL_RETURN (h);
526 #endif
528 if (ttr == ttl)
530 tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
532 h.code = 0;
533 /* Note conversion from `T*' to `const T*',
534 or `T*' to `volatile T*'. */
535 if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
536 || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
537 h.code = EVIL_CODE;
538 else if ((TYPE_READONLY (tmp1) != TREE_READONLY (tmp2))
539 || (TYPE_VOLATILE (tmp1) != TYPE_VOLATILE (tmp2)))
540 h.code |= QUAL_CODE;
542 h.distance = 0;
543 return h;
547 if (TREE_CODE (ttl) == RECORD_TYPE && TREE_CODE (ttr) == RECORD_TYPE)
549 int b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
550 if (b_or_d < 0)
552 b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
553 if (b_or_d < 0)
554 return EVIL_RETURN (h);
555 h.distance = -b_or_d;
557 else
558 h.distance = b_or_d;
559 h.code = STD_CODE;
560 return h;
563 /* If converting from a `class*' to a `void*', make it
564 less favorable than any inheritance relationship. */
565 if (TREE_CODE (ttl) == VOID_TYPE && IS_AGGR_TYPE (ttr))
567 h.code = STD_CODE;
568 h.distance = CLASSTYPE_MAX_DEPTH (ttr)+1;
569 return h;
572 h.code = penalty ? STD_CODE : PROMO_CODE;
573 /* Catch things like `const char *' -> `const void *'
574 vs `const char *' -> `void *'. */
575 if (ttl != ttr)
577 tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
578 if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
579 || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
580 h.code = EVIL_CODE;
581 else if ((TYPE_READONLY (tmp1) > TREE_READONLY (tmp2))
582 || (TYPE_VOLATILE (tmp1) > TYPE_VOLATILE (tmp2)))
583 h.code |= QUAL_CODE;
585 return h;
588 if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
590 /* This is not a bad match, but don't let it beat
591 integer-enum combinations. */
592 if (parm && integer_zerop (parm))
594 h.code = STD_CODE;
595 h.distance = 0;
596 return h;
600 /* C++: Since the `this' parameter of a signature member function
601 is represented as a signature pointer to handle default implementations
602 correctly, we can have the case that `type' is a signature pointer
603 while `parmtype' is a pointer to a signature table. We don't really
604 do any conversions in this case, so just return 0. */
606 if (codel == RECORD_TYPE && coder == POINTER_TYPE
607 && IS_SIGNATURE_POINTER (type) && IS_SIGNATURE (TREE_TYPE (parmtype)))
608 return ZERO_RETURN (h);
610 if (codel == RECORD_TYPE && coder == RECORD_TYPE)
612 int b_or_d = get_base_distance (type, parmtype, 0, (tree*)0);
613 if (b_or_d < 0)
615 b_or_d = get_base_distance (parmtype, type, 0, (tree*)0);
616 if (b_or_d < 0)
617 return EVIL_RETURN (h);
618 h.distance = -b_or_d;
620 else
621 h.distance = b_or_d;
622 h.code = STD_CODE;
623 return h;
625 return EVIL_RETURN (h);
628 /* A clone of build_type_conversion for checking user-defined conversions in
629 overload resolution. */
631 static int
632 user_harshness (type, parmtype)
633 register tree type, parmtype;
635 tree conv;
636 tree winner = NULL_TREE;
637 int code;
640 tree typename = build_typename_overload (type);
641 if (lookup_fnfields (TYPE_BINFO (parmtype), typename, 0))
642 return 0;
645 for (conv = lookup_conversions (parmtype); conv; conv = TREE_CHAIN (conv))
647 struct harshness_code tmp;
648 tree cand = TREE_VALUE (conv);
650 if (winner && winner == cand)
651 continue;
653 tmp = convert_harshness (type, TREE_TYPE (TREE_TYPE (cand)), NULL_TREE);
654 if ((tmp.code < USER_CODE) && (tmp.distance >= 0))
656 if (winner)
657 return EVIL_CODE;
658 else
660 winner = cand;
661 code = tmp.code;
666 if (winner)
667 return code;
669 return -1;
672 #ifdef DEBUG_MATCHING
673 static char *
674 print_harshness (h)
675 struct harshness_code *h;
677 static char buf[1024];
678 char tmp[1024];
680 bzero (buf, 1024 * sizeof (char));
681 strcat (buf, "codes=[");
682 if (h->code & EVIL_CODE)
683 strcat (buf, "EVIL");
684 if (h->code & CONST_CODE)
685 strcat (buf, " CONST");
686 if (h->code & ELLIPSIS_CODE)
687 strcat (buf, " ELLIPSIS");
688 if (h->code & USER_CODE)
689 strcat (buf, " USER");
690 if (h->code & STD_CODE)
691 strcat (buf, " STD");
692 if (h->code & PROMO_CODE)
693 strcat (buf, " PROMO");
694 if (h->code & QUAL_CODE)
695 strcat (buf, " QUAL");
696 if (h->code & TRIVIAL_CODE)
697 strcat (buf, " TRIVIAL");
698 if (buf[0] == '\0')
699 strcat (buf, "0");
701 sprintf (tmp, "] distance=%d int_penalty=%d", h->distance, h->int_penalty);
703 strcat (buf, tmp);
705 return buf;
707 #endif
709 /* Algorithm: For each argument, calculate how difficult it is to
710 make FUNCTION accept that argument. If we can easily tell that
711 FUNCTION won't be acceptable to one of the arguments, then we
712 don't need to compute the ease of converting the other arguments,
713 since it will never show up in the intersection of all arguments'
714 favorite functions.
716 Conversions between builtin and user-defined types are allowed, but
717 no function involving such a conversion is preferred to one which
718 does not require such a conversion. Furthermore, such conversions
719 must be unique. */
721 void
722 compute_conversion_costs (function, tta_in, cp, arglen)
723 tree function;
724 tree tta_in;
725 struct candidate *cp;
726 int arglen;
728 tree ttf_in = TYPE_ARG_TYPES (TREE_TYPE (function));
729 tree ttf = ttf_in;
730 tree tta = tta_in;
732 /* Start out with no strikes against. */
733 int evil_strikes = 0;
734 int ellipsis_strikes = 0;
735 int user_strikes = 0;
736 int b_or_d_strikes = 0;
737 int easy_strikes = 0;
739 int strike_index = 0, win;
740 struct harshness_code lose;
741 extern int cp_silent;
743 #ifdef GATHER_STATISTICS
744 n_compute_conversion_costs++;
745 #endif
747 #ifndef DEBUG_MATCHING
748 /* We don't emit any warnings or errors while trying out each candidate. */
749 cp_silent = 1;
750 #endif
752 cp->function = function;
753 cp->arg = tta ? TREE_VALUE (tta) : NULL_TREE;
754 cp->u.bad_arg = 0; /* optimistic! */
756 cp->h.code = 0;
757 cp->h.distance = 0;
758 cp->h.int_penalty = 0;
759 bzero ((char *) cp->harshness,
760 (cp->h_len + 1) * sizeof (struct harshness_code));
762 while (ttf && tta)
764 struct harshness_code h;
766 if (ttf == void_list_node)
767 break;
769 if (type_unknown_p (TREE_VALUE (tta)))
771 /* Must perform some instantiation here. */
772 tree rhs = TREE_VALUE (tta);
773 tree lhstype = TREE_VALUE (ttf);
775 /* Keep quiet about possible contravariance violations. */
776 int old_inhibit_warnings = inhibit_warnings;
777 inhibit_warnings = 1;
779 /* @@ This is to undo what `grokdeclarator' does to
780 parameter types. It really should go through
781 something more general. */
783 TREE_TYPE (tta) = unknown_type_node;
784 rhs = instantiate_type (lhstype, rhs, 0);
785 inhibit_warnings = old_inhibit_warnings;
787 if (TREE_CODE (rhs) == ERROR_MARK)
788 h.code = EVIL_CODE;
789 else
790 h = convert_harshness (lhstype, TREE_TYPE (rhs), rhs);
792 else
794 #ifdef DEBUG_MATCHING
795 static tree old_function = NULL_TREE;
797 if (!old_function || function != old_function)
799 cp_error ("trying %D", function);
800 old_function = function;
803 cp_error (" doing (%T) %E against arg %T",
804 TREE_TYPE (TREE_VALUE (tta)), TREE_VALUE (tta),
805 TREE_VALUE (ttf));
806 #endif
808 h = convert_harshness (TREE_VALUE (ttf),
809 TREE_TYPE (TREE_VALUE (tta)),
810 TREE_VALUE (tta));
812 #ifdef DEBUG_MATCHING
813 cp_error (" evaluated %s", print_harshness (&h));
814 #endif
817 cp->harshness[strike_index] = h;
818 if ((h.code & EVIL_CODE)
819 || ((h.code & STD_CODE) && h.distance < 0))
821 cp->u.bad_arg = strike_index;
822 evil_strikes = 1;
824 else if (h.code & ELLIPSIS_CODE)
825 ellipsis_strikes += 1;
826 #if 0
827 /* This is never set by `convert_harshness'. */
828 else if (h.code & USER_CODE)
830 user_strikes += 1;
832 #endif
833 else
835 if ((h.code & STD_CODE) && h.distance)
837 if (h.distance > b_or_d_strikes)
838 b_or_d_strikes = h.distance;
840 else
841 easy_strikes += (h.code & (STD_CODE|PROMO_CODE|TRIVIAL_CODE));
842 cp->h.code |= h.code;
843 /* Make sure we communicate this. */
844 cp->h.int_penalty += h.int_penalty;
847 ttf = TREE_CHAIN (ttf);
848 tta = TREE_CHAIN (tta);
849 strike_index += 1;
852 if (tta)
854 /* ran out of formals, and parmlist is fixed size. */
855 if (ttf /* == void_type_node */)
857 cp->h.code = EVIL_CODE;
858 cp->u.bad_arg = -1;
859 cp_silent = 0;
860 return;
862 else
864 struct harshness_code h;
865 int l = list_length (tta);
866 ellipsis_strikes += l;
867 h.code = ELLIPSIS_CODE;
868 h.distance = 0;
869 h.int_penalty = 0;
870 for (; l; --l)
871 cp->harshness[strike_index++] = h;
874 else if (ttf && ttf != void_list_node)
876 /* ran out of actuals, and no defaults. */
877 if (TREE_PURPOSE (ttf) == NULL_TREE)
879 cp->h.code = EVIL_CODE;
880 cp->u.bad_arg = -2;
881 cp_silent = 0;
882 return;
884 /* Store index of first default. */
885 cp->harshness[arglen].distance = strike_index+1;
887 else
888 cp->harshness[arglen].distance = 0;
890 /* Argument list lengths work out, so don't need to check them again. */
891 if (evil_strikes)
893 /* We do not check for derived->base conversions here, since in
894 no case would they give evil strike counts, unless such conversions
895 are somehow ambiguous. */
897 /* See if any user-defined conversions apply.
898 But make sure that we do not loop. */
899 static int dont_convert_types = 0;
901 if (dont_convert_types)
903 cp->h.code = EVIL_CODE;
904 cp_silent = 0;
905 return;
908 win = 0; /* Only get one chance to win. */
909 ttf = TYPE_ARG_TYPES (TREE_TYPE (function));
910 tta = tta_in;
911 strike_index = 0;
912 evil_strikes = 0;
914 while (ttf && tta)
916 if (ttf == void_list_node)
917 break;
919 lose = cp->harshness[strike_index];
920 if ((lose.code & EVIL_CODE)
921 || ((lose.code & STD_CODE) && lose.distance < 0))
923 tree actual_type = TREE_TYPE (TREE_VALUE (tta));
924 tree formal_type = TREE_VALUE (ttf);
925 int extra_conversions = 0;
927 dont_convert_types = 1;
929 if (TREE_CODE (formal_type) == REFERENCE_TYPE)
930 formal_type = TREE_TYPE (formal_type);
931 if (TREE_CODE (actual_type) == REFERENCE_TYPE)
932 actual_type = TREE_TYPE (actual_type);
934 if (formal_type != error_mark_node
935 && actual_type != error_mark_node)
937 formal_type = complete_type (TYPE_MAIN_VARIANT (formal_type));
938 actual_type = complete_type (TYPE_MAIN_VARIANT (actual_type));
940 if (TYPE_HAS_CONSTRUCTOR (formal_type))
942 /* If it has a constructor for this type,
943 try to use it. */
944 /* @@ There is no way to save this result yet, so
945 success is a NULL_TREE for now. */
946 if (convert_to_aggr (formal_type, TREE_VALUE (tta), 0, 1)
947 != error_mark_node)
948 win++;
950 if (TYPE_LANG_SPECIFIC (actual_type)
951 && TYPE_HAS_CONVERSION (actual_type))
953 int extra = user_harshness (formal_type, actual_type);
955 if (extra == EVIL_CODE)
956 win += 2;
957 else if (extra >= 0)
959 win++;
960 extra_conversions = extra;
964 dont_convert_types = 0;
966 if (win == 1)
968 user_strikes += 1;
969 cp->harshness[strike_index].code
970 = USER_CODE | (extra_conversions ? STD_CODE : 0);
971 win = 0;
973 else
975 if (cp->u.bad_arg > strike_index)
976 cp->u.bad_arg = strike_index;
978 evil_strikes = win ? 2 : 1;
979 break;
983 ttf = TREE_CHAIN (ttf);
984 tta = TREE_CHAIN (tta);
985 strike_index += 1;
989 /* Const member functions get a small penalty because defaulting
990 to const is less useful than defaulting to non-const. */
991 /* This is bogus, it does not correspond to anything in the ARM.
992 This code will be fixed when this entire section is rewritten
993 to conform to the ARM. (mrs) */
994 if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
996 tree this_parm = TREE_VALUE (ttf_in);
998 if (TREE_CODE (this_parm) == RECORD_TYPE /* Is `this' a sig ptr? */
999 ? TYPE_READONLY (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (this_parm))))
1000 : TYPE_READONLY (TREE_TYPE (this_parm)))
1002 cp->harshness[0].code |= TRIVIAL_CODE;
1003 ++easy_strikes;
1005 else
1007 /* Calling a non-const member function from a const member function
1008 is probably invalid, but for now we let it only draw a warning.
1009 We indicate that such a mismatch has occurred by setting the
1010 harshness to a maximum value. */
1011 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tta_in))) == POINTER_TYPE
1012 && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (TREE_VALUE (tta_in))))))
1013 cp->harshness[0].code |= CONST_CODE;
1017 if (evil_strikes)
1018 cp->h.code = EVIL_CODE;
1019 if (ellipsis_strikes)
1020 cp->h.code |= ELLIPSIS_CODE;
1021 if (user_strikes)
1022 cp->h.code |= USER_CODE;
1023 cp_silent = 0;
1024 #ifdef DEBUG_MATCHING
1025 cp_error ("final eval %s", print_harshness (&cp->h));
1026 #endif
1029 /* Subroutine of ideal_candidate. See if X or Y is a better match
1030 than the other. */
1032 static int
1033 strictly_better (x, y)
1034 unsigned short x, y;
1036 unsigned short xor;
1038 if (x == y)
1039 return 0;
1041 xor = x ^ y;
1042 if (xor >= x || xor >= y)
1043 return 1;
1044 return 0;
1047 /* When one of several possible overloaded functions and/or methods
1048 can be called, choose the best candidate for overloading.
1050 BASETYPE is the context from which we start method resolution
1051 or NULL if we are comparing overloaded functions.
1052 CANDIDATES is the array of candidates we have to choose from.
1053 N_CANDIDATES is the length of CANDIDATES.
1054 PARMS is a TREE_LIST of parameters to the function we'll ultimately
1055 choose. It is modified in place when resolving methods. It is not
1056 modified in place when resolving overloaded functions.
1057 LEN is the length of the parameter list. */
1059 static struct candidate *
1060 ideal_candidate (candidates, n_candidates, len)
1061 struct candidate *candidates;
1062 int n_candidates;
1063 int len;
1065 struct candidate *cp = candidates+n_candidates;
1066 int i, j = -1, best_code;
1068 /* For each argument, sort the functions from best to worst for the arg.
1069 For each function that's not best for this arg, set its overall
1070 harshness to EVIL so that other args won't like it. The candidate
1071 list for the last argument is the intersection of all the best-liked
1072 functions. */
1074 qsort (candidates, n_candidates, sizeof (struct candidate),
1075 rank_for_overload);
1076 best_code = cp[-1].h.code;
1078 /* If they're at least as good as each other, do an arg-by-arg check. */
1079 if (! strictly_better (cp[-1].h.code, cp[-2].h.code))
1081 int better = 0;
1082 int worse = 0;
1084 for (j = 0; j < n_candidates; j++)
1085 if (! strictly_better (candidates[j].h.code, best_code))
1086 break;
1088 qsort (candidates+j, n_candidates-j, sizeof (struct candidate),
1089 rank_for_ideal);
1090 for (i = 0; i < len; i++)
1092 if (cp[-1].harshness[i].code < cp[-2].harshness[i].code)
1093 better = 1;
1094 else if (cp[-1].harshness[i].code > cp[-2].harshness[i].code)
1095 worse = 1;
1096 else if (cp[-1].harshness[i].code & STD_CODE)
1098 /* If it involves a standard conversion, let the
1099 inheritance lattice be the final arbiter. */
1100 if (cp[-1].harshness[i].distance > cp[-2].harshness[i].distance)
1101 worse = 1;
1102 else if (cp[-1].harshness[i].distance < cp[-2].harshness[i].distance)
1103 better = 1;
1105 else if (cp[-1].harshness[i].code & PROMO_CODE)
1107 /* For integral promotions, take into account a finer
1108 granularity for determining which types should be favored
1109 over others in such promotions. */
1110 if (cp[-1].harshness[i].int_penalty > cp[-2].harshness[i].int_penalty)
1111 worse = 1;
1112 else if (cp[-1].harshness[i].int_penalty < cp[-2].harshness[i].int_penalty)
1113 better = 1;
1117 if (! better || worse)
1118 return NULL;
1120 return cp-1;
1123 /* Assume that if the class referred to is not in the
1124 current class hierarchy, that it may be remote.
1125 PARENT is assumed to be of aggregate type here. */
1127 static int
1128 may_be_remote (parent)
1129 tree parent;
1131 if (TYPE_OVERLOADS_METHOD_CALL_EXPR (parent) == 0)
1132 return 0;
1134 if (current_class_type == NULL_TREE)
1135 return 0;
1137 if (parent == current_class_type)
1138 return 0;
1140 if (UNIQUELY_DERIVED_FROM_P (parent, current_class_type))
1141 return 0;
1142 return 1;
1145 tree
1146 build_vfield_ref (datum, type)
1147 tree datum, type;
1149 tree rval;
1150 int old_assume_nonnull_objects = flag_assume_nonnull_objects;
1152 if (datum == error_mark_node)
1153 return error_mark_node;
1155 /* Vtable references are always made from non-null objects. */
1156 flag_assume_nonnull_objects = 1;
1157 if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
1158 datum = convert_from_reference (datum);
1160 if (! TYPE_USES_COMPLEX_INHERITANCE (type))
1161 rval = build (COMPONENT_REF, TREE_TYPE (CLASSTYPE_VFIELD (type)),
1162 datum, CLASSTYPE_VFIELD (type));
1163 else
1164 rval = build_component_ref (datum, DECL_NAME (CLASSTYPE_VFIELD (type)), NULL_TREE, 0);
1165 flag_assume_nonnull_objects = old_assume_nonnull_objects;
1167 return rval;
1170 /* Build a call to a member of an object. I.e., one that overloads
1171 operator ()(), or is a pointer-to-function or pointer-to-method. */
1173 static tree
1174 build_field_call (basetype_path, instance_ptr, name, parms)
1175 tree basetype_path, instance_ptr, name, parms;
1177 tree field, instance;
1179 if (name == ctor_identifier || name == dtor_identifier)
1180 return NULL_TREE;
1182 if (instance_ptr == current_class_ptr)
1184 /* Check to see if we really have a reference to an instance variable
1185 with `operator()()' overloaded. */
1186 field = IDENTIFIER_CLASS_VALUE (name);
1188 if (field == NULL_TREE)
1190 cp_error ("`this' has no member named `%D'", name);
1191 return error_mark_node;
1194 if (TREE_CODE (field) == FIELD_DECL)
1196 /* If it's a field, try overloading operator (),
1197 or calling if the field is a pointer-to-function. */
1198 instance = build_component_ref_1 (current_class_ref, field, 0);
1199 if (instance == error_mark_node)
1200 return error_mark_node;
1202 if (TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1203 && (TYPE_OVERLOADS_CALL_EXPR (TREE_TYPE (instance))
1204 || flag_ansi_overloading))
1205 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL, instance, parms, NULL_TREE);
1207 if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1209 if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE)
1210 return build_function_call (instance, parms);
1211 else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE)
1212 return build_function_call (instance, tree_cons (NULL_TREE, current_class_ptr, parms));
1215 return NULL_TREE;
1218 /* Check to see if this is not really a reference to an instance variable
1219 with `operator()()' overloaded. */
1220 field = lookup_field (basetype_path, name, 1, 0);
1222 /* This can happen if the reference was ambiguous or for access
1223 violations. */
1224 if (field == error_mark_node)
1225 return error_mark_node;
1227 if (field)
1229 tree basetype;
1230 tree ftype = TREE_TYPE (field);
1232 if (TREE_CODE (ftype) == REFERENCE_TYPE)
1233 ftype = TREE_TYPE (ftype);
1235 if (TYPE_LANG_SPECIFIC (ftype)
1236 && (TYPE_OVERLOADS_CALL_EXPR (ftype) || flag_ansi_overloading))
1238 /* Make the next search for this field very short. */
1239 basetype = DECL_FIELD_CONTEXT (field);
1240 instance_ptr = convert_pointer_to (basetype, instance_ptr);
1242 instance = build_indirect_ref (instance_ptr, NULL_PTR);
1243 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL,
1244 build_component_ref_1 (instance, field, 0),
1245 parms, NULL_TREE);
1247 if (TREE_CODE (ftype) == POINTER_TYPE)
1249 if (TREE_CODE (TREE_TYPE (ftype)) == FUNCTION_TYPE
1250 || TREE_CODE (TREE_TYPE (ftype)) == METHOD_TYPE)
1252 /* This is a member which is a pointer to function. */
1253 tree ref
1254 = build_component_ref_1 (build_indirect_ref (instance_ptr,
1255 NULL_PTR),
1256 field, LOOKUP_COMPLAIN);
1257 if (ref == error_mark_node)
1258 return error_mark_node;
1259 return build_function_call (ref, parms);
1262 else if (TREE_CODE (ftype) == METHOD_TYPE)
1264 error ("invalid call via pointer-to-member function");
1265 return error_mark_node;
1267 else
1268 return NULL_TREE;
1270 return NULL_TREE;
1273 static tree
1274 find_scoped_type (type, inner_name, inner_types)
1275 tree type, inner_name, inner_types;
1277 tree tags = CLASSTYPE_TAGS (type);
1279 while (tags)
1281 /* The TREE_PURPOSE of an enum tag (which becomes a member of the
1282 enclosing class) is set to the name for the enum type. So, if
1283 inner_name is `bar', and we strike `baz' for `enum bar { baz }',
1284 then this test will be true. */
1285 if (TREE_PURPOSE (tags) == inner_name)
1287 if (inner_types == NULL_TREE)
1288 return TYPE_MAIN_DECL (TREE_VALUE (tags));
1289 return resolve_scope_to_name (TREE_VALUE (tags), inner_types);
1291 tags = TREE_CHAIN (tags);
1294 /* Look for a TYPE_DECL. */
1295 for (tags = TYPE_FIELDS (type); tags; tags = TREE_CHAIN (tags))
1296 if (TREE_CODE (tags) == TYPE_DECL && DECL_NAME (tags) == inner_name)
1298 /* Code by raeburn. */
1299 if (inner_types == NULL_TREE)
1300 return tags;
1301 return resolve_scope_to_name (TREE_TYPE (tags), inner_types);
1304 return NULL_TREE;
1307 /* Resolve an expression NAME1::NAME2::...::NAMEn to
1308 the name that names the above nested type. INNER_TYPES
1309 is a chain of nested type names (held together by SCOPE_REFs);
1310 OUTER_TYPE is the type we know to enclose INNER_TYPES.
1311 Returns NULL_TREE if there is an error. */
1313 tree
1314 resolve_scope_to_name (outer_type, inner_stuff)
1315 tree outer_type, inner_stuff;
1317 register tree tmp;
1318 tree inner_name, inner_type;
1320 if (outer_type == NULL_TREE && current_class_type != NULL_TREE)
1322 /* We first try to look for a nesting in our current class context,
1323 then try any enclosing classes. */
1324 tree type = current_class_type;
1326 while (type && (TREE_CODE (type) == RECORD_TYPE
1327 || TREE_CODE (type) == UNION_TYPE))
1329 tree rval = resolve_scope_to_name (type, inner_stuff);
1331 if (rval != NULL_TREE)
1332 return rval;
1333 type = DECL_CONTEXT (TYPE_MAIN_DECL (type));
1337 if (TREE_CODE (inner_stuff) == SCOPE_REF)
1339 inner_name = TREE_OPERAND (inner_stuff, 0);
1340 inner_type = TREE_OPERAND (inner_stuff, 1);
1342 else
1344 inner_name = inner_stuff;
1345 inner_type = NULL_TREE;
1348 if (outer_type == NULL_TREE)
1350 tree x;
1351 /* If we have something that's already a type by itself,
1352 use that. */
1353 if (IDENTIFIER_HAS_TYPE_VALUE (inner_name))
1355 if (inner_type)
1356 return resolve_scope_to_name (IDENTIFIER_TYPE_VALUE (inner_name),
1357 inner_type);
1358 return inner_name;
1361 x = lookup_name (inner_name, 0);
1363 if (x && TREE_CODE (x) == NAMESPACE_DECL)
1365 x = lookup_namespace_name (x, inner_type);
1366 return x;
1368 return NULL_TREE;
1371 if (! IS_AGGR_TYPE (outer_type))
1372 return NULL_TREE;
1374 /* Look for member classes or enums. */
1375 tmp = find_scoped_type (outer_type, inner_name, inner_type);
1377 /* If it's not a type in this class, then go down into the
1378 base classes and search there. */
1379 if (! tmp && TYPE_BINFO (outer_type))
1381 tree binfos = TYPE_BINFO_BASETYPES (outer_type);
1382 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
1384 for (i = 0; i < n_baselinks; i++)
1386 tree base_binfo = TREE_VEC_ELT (binfos, i);
1387 tmp = resolve_scope_to_name (BINFO_TYPE (base_binfo), inner_stuff);
1388 if (tmp)
1389 return tmp;
1391 tmp = NULL_TREE;
1394 return tmp;
1397 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
1398 This is how virtual function calls are avoided. */
1400 tree
1401 build_scoped_method_call (exp, basetype, name, parms)
1402 tree exp, basetype, name, parms;
1404 /* Because this syntactic form does not allow
1405 a pointer to a base class to be `stolen',
1406 we need not protect the derived->base conversion
1407 that happens here.
1409 @@ But we do have to check access privileges later. */
1410 tree binfo, decl;
1411 tree type = TREE_TYPE (exp);
1413 if (type == error_mark_node
1414 || basetype == error_mark_node)
1415 return error_mark_node;
1417 if (processing_template_decl)
1419 if (TREE_CODE (name) == BIT_NOT_EXPR)
1421 tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1422 name = build_min_nt (BIT_NOT_EXPR, type);
1424 name = build_min_nt (SCOPE_REF, basetype, name);
1425 return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
1428 if (TREE_CODE (type) == REFERENCE_TYPE)
1429 type = TREE_TYPE (type);
1431 if (TREE_CODE (basetype) == TREE_VEC)
1433 binfo = basetype;
1434 basetype = BINFO_TYPE (binfo);
1436 else
1437 binfo = NULL_TREE;
1439 /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
1440 that explicit ~int is caught in the parser; this deals with typedefs
1441 and template parms. */
1442 if (TREE_CODE (name) == BIT_NOT_EXPR && ! IS_AGGR_TYPE (basetype))
1444 if (type != basetype)
1445 cp_error ("type of `%E' does not match destructor type `%T' (type was `%T')",
1446 exp, basetype, type);
1447 name = TREE_OPERAND (name, 0);
1448 if (basetype != name && basetype != get_type_value (name))
1449 cp_error ("qualified type `%T' does not match destructor name `~%T'",
1450 basetype, name);
1451 return cp_convert (void_type_node, exp);
1454 if (! is_aggr_type (basetype, 1))
1455 return error_mark_node;
1457 if (! IS_AGGR_TYPE (type))
1459 cp_error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
1460 exp, type);
1461 return error_mark_node;
1464 if (! binfo)
1466 binfo = get_binfo (basetype, type, 1);
1467 if (binfo == error_mark_node)
1468 return error_mark_node;
1469 if (! binfo)
1470 error_not_base_type (basetype, type);
1473 if (binfo)
1475 if (TREE_CODE (exp) == INDIRECT_REF)
1476 decl = build_indirect_ref
1477 (convert_pointer_to_real
1478 (binfo, build_unary_op (ADDR_EXPR, exp, 0)), NULL_PTR);
1479 else
1480 decl = build_scoped_ref (exp, basetype);
1482 /* Call to a destructor. */
1483 if (TREE_CODE (name) == BIT_NOT_EXPR)
1485 /* Explicit call to destructor. */
1486 name = TREE_OPERAND (name, 0);
1487 if (! (name == TYPE_MAIN_VARIANT (TREE_TYPE (decl))
1488 || name == constructor_name (TREE_TYPE (decl))
1489 || TREE_TYPE (decl) == get_type_value (name)))
1491 cp_error
1492 ("qualified type `%T' does not match destructor name `~%T'",
1493 TREE_TYPE (decl), name);
1494 return error_mark_node;
1496 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
1497 return cp_convert (void_type_node, exp);
1499 return build_delete (TREE_TYPE (decl), decl, integer_two_node,
1500 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
1504 /* Call to a method. */
1505 return build_method_call (decl, name, parms, binfo,
1506 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
1508 return error_mark_node;
1511 static void
1512 print_candidates (candidates)
1513 tree candidates;
1515 cp_error_at ("candidates are: %D", TREE_VALUE (candidates));
1516 candidates = TREE_CHAIN (candidates);
1518 while (candidates)
1520 cp_error_at (" %D", TREE_VALUE (candidates));
1521 candidates = TREE_CHAIN (candidates);
1525 static void
1526 print_n_candidates (candidates, n)
1527 struct candidate *candidates;
1528 int n;
1530 int i;
1532 cp_error_at ("candidates are: %D", candidates[0].function);
1533 for (i = 1; i < n; i++)
1534 cp_error_at (" %D", candidates[i].function);
1537 /* We want the address of a function or method. We avoid creating a
1538 pointer-to-member function. */
1540 tree
1541 build_addr_func (function)
1542 tree function;
1544 tree type = TREE_TYPE (function);
1546 /* We have to do these by hand to avoid real pointer to member
1547 functions. */
1548 if (TREE_CODE (type) == METHOD_TYPE)
1550 tree addr;
1552 type = build_pointer_type (type);
1554 if (mark_addressable (function) == 0)
1555 return error_mark_node;
1557 addr = build1 (ADDR_EXPR, type, function);
1559 /* Address of a static or external variable or function counts
1560 as a constant */
1561 if (staticp (function))
1562 TREE_CONSTANT (addr) = 1;
1564 function = addr;
1566 else
1567 function = default_conversion (function);
1569 return function;
1572 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
1573 POINTER_TYPE to those. Note, pointer to member function types
1574 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
1576 tree
1577 build_call (function, result_type, parms)
1578 tree function, result_type, parms;
1580 int is_constructor = 0;
1582 function = build_addr_func (function);
1584 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
1586 sorry ("unable to call pointer to member function here");
1587 return error_mark_node;
1590 if (TREE_CODE (function) == ADDR_EXPR
1591 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1592 && DECL_CONSTRUCTOR_P (TREE_OPERAND (function, 0)))
1593 is_constructor = 1;
1595 function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
1596 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
1597 TREE_TYPE (function) = result_type;
1598 TREE_SIDE_EFFECTS (function) = 1;
1600 return function;
1603 static tree
1604 default_parm_conversions (parms, last)
1605 tree parms, *last;
1607 tree parm, parmtypes = NULL_TREE;
1609 *last = NULL_TREE;
1611 for (parm = parms; parm; parm = TREE_CHAIN (parm))
1613 tree t = TREE_TYPE (TREE_VALUE (parm));
1615 if (TREE_CODE (t) == OFFSET_TYPE
1616 || TREE_CODE (t) == METHOD_TYPE
1617 || TREE_CODE (t) == FUNCTION_TYPE)
1619 TREE_VALUE (parm) = default_conversion (TREE_VALUE (parm));
1620 t = TREE_TYPE (TREE_VALUE (parm));
1623 if (t == error_mark_node)
1624 return error_mark_node;
1626 *last = build_tree_list (NULL_TREE, t);
1627 parmtypes = chainon (parmtypes, *last);
1630 return parmtypes;
1634 /* Build something of the form ptr->method (args)
1635 or object.method (args). This can also build
1636 calls to constructors, and find friends.
1638 Member functions always take their class variable
1639 as a pointer.
1641 INSTANCE is a class instance.
1643 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
1645 PARMS help to figure out what that NAME really refers to.
1647 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
1648 down to the real instance type to use for access checking. We need this
1649 information to get protected accesses correct. This parameter is used
1650 by build_member_call.
1652 FLAGS is the logical disjunction of zero or more LOOKUP_
1653 flags. See cp-tree.h for more info.
1655 If this is all OK, calls build_function_call with the resolved
1656 member function.
1658 This function must also handle being called to perform
1659 initialization, promotion/coercion of arguments, and
1660 instantiation of default parameters.
1662 Note that NAME may refer to an instance variable name. If
1663 `operator()()' is defined for the type of that field, then we return
1664 that result. */
1666 tree
1667 build_method_call (instance, name, parms, basetype_path, flags)
1668 tree instance, name, parms, basetype_path;
1669 int flags;
1671 register tree function, fntype, value_type;
1672 register tree basetype, save_basetype;
1673 register tree baselink, result, parmtypes;
1674 tree last;
1675 int pass;
1676 tree access = access_public_node;
1677 tree orig_basetype = basetype_path ? BINFO_TYPE (basetype_path) : NULL_TREE;
1679 /* Range of cases for vtable optimization. */
1680 enum vtable_needs { not_needed, maybe_needed, unneeded, needed };
1681 enum vtable_needs need_vtbl = not_needed;
1683 char *name_kind;
1684 tree save_name = name;
1685 int ever_seen = 0;
1686 tree instance_ptr = NULL_TREE;
1687 int all_virtual = flag_all_virtual;
1688 int static_call_context = 0;
1689 tree found_fns = NULL_TREE;
1691 /* Keep track of `const' and `volatile' objects. */
1692 int constp, volatilep;
1694 #ifdef GATHER_STATISTICS
1695 n_build_method_call++;
1696 #endif
1698 if (instance == error_mark_node
1699 || name == error_mark_node
1700 || parms == error_mark_node
1701 || (instance != NULL_TREE && TREE_TYPE (instance) == error_mark_node))
1702 return error_mark_node;
1704 if (processing_template_decl)
1706 if (TREE_CODE (name) == BIT_NOT_EXPR)
1708 tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1709 name = build_min_nt (BIT_NOT_EXPR, type);
1712 return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
1715 /* This is the logic that magically deletes the second argument to
1716 operator delete, if it is not needed. */
1717 if (name == ansi_opname[(int) DELETE_EXPR] && list_length (parms)==2)
1719 tree save_last = TREE_CHAIN (parms);
1720 tree result;
1721 /* get rid of unneeded argument */
1722 TREE_CHAIN (parms) = NULL_TREE;
1723 result = build_method_call (instance, name, parms, basetype_path,
1724 (LOOKUP_SPECULATIVELY|flags)
1725 &~LOOKUP_COMPLAIN);
1726 /* If it finds a match, return it. */
1727 if (result)
1728 return build_method_call (instance, name, parms, basetype_path, flags);
1729 /* If it doesn't work, two argument delete must work */
1730 TREE_CHAIN (parms) = save_last;
1732 /* We already know whether it's needed or not for vec delete. */
1733 else if (name == ansi_opname[(int) VEC_DELETE_EXPR]
1734 && TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1735 && ! TYPE_VEC_DELETE_TAKES_SIZE (TREE_TYPE (instance)))
1736 TREE_CHAIN (parms) = NULL_TREE;
1738 if (TREE_CODE (name) == BIT_NOT_EXPR)
1740 flags |= LOOKUP_DESTRUCTOR;
1741 name = TREE_OPERAND (name, 0);
1742 if (parms)
1743 error ("destructors take no parameters");
1744 basetype = TREE_TYPE (instance);
1745 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1746 basetype = TREE_TYPE (basetype);
1747 if (! (name == basetype
1748 || (IS_AGGR_TYPE (basetype)
1749 && name == constructor_name (basetype))
1750 || basetype == get_type_value (name)))
1752 cp_error ("destructor name `~%D' does not match type `%T' of expression",
1753 name, basetype);
1754 return cp_convert (void_type_node, instance);
1757 if (! TYPE_HAS_DESTRUCTOR (basetype))
1758 return cp_convert (void_type_node, instance);
1759 instance = default_conversion (instance);
1760 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1761 return build_delete (build_pointer_type (basetype),
1762 instance_ptr, integer_two_node,
1763 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
1766 if (flag_ansi_overloading)
1767 return build_new_method_call (instance, name, parms, basetype_path, flags);
1770 char *xref_name;
1772 /* Initialize name for error reporting. */
1773 if (IDENTIFIER_OPNAME_P (name) && ! IDENTIFIER_TYPENAME_P (name))
1775 char *p = operator_name_string (name);
1776 xref_name = (char *)alloca (strlen (p) + 10);
1777 sprintf (xref_name, "operator %s", p);
1779 else if (TREE_CODE (name) == SCOPE_REF)
1780 xref_name = IDENTIFIER_POINTER (TREE_OPERAND (name, 1));
1781 else
1782 xref_name = IDENTIFIER_POINTER (name);
1784 GNU_xref_call (current_function_decl, xref_name);
1787 if (instance == NULL_TREE)
1789 basetype = NULL_TREE;
1790 /* Check cases where this is really a call to raise
1791 an exception. */
1792 if (current_class_type && TREE_CODE (name) == IDENTIFIER_NODE)
1794 basetype = purpose_member (name, CLASSTYPE_TAGS (current_class_type));
1795 if (basetype)
1796 basetype = TREE_VALUE (basetype);
1798 else if (TREE_CODE (name) == SCOPE_REF
1799 && TREE_CODE (TREE_OPERAND (name, 0)) == IDENTIFIER_NODE)
1801 if (! is_aggr_typedef (TREE_OPERAND (name, 0), 1))
1802 return error_mark_node;
1803 basetype = purpose_member (TREE_OPERAND (name, 1),
1804 CLASSTYPE_TAGS (IDENTIFIER_TYPE_VALUE (TREE_OPERAND (name, 0))));
1805 if (basetype)
1806 basetype = TREE_VALUE (basetype);
1809 if (basetype != NULL_TREE)
1811 /* call to a constructor... */
1812 else if (basetype_path)
1814 basetype = BINFO_TYPE (basetype_path);
1815 if (name == TYPE_IDENTIFIER (basetype))
1816 name = ctor_identifier;
1818 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
1820 basetype = IDENTIFIER_TYPE_VALUE (name);
1821 name = ctor_identifier;
1823 else
1825 tree typedef_name = lookup_name (name, 1);
1826 if (typedef_name && TREE_CODE (typedef_name) == TYPE_DECL)
1828 /* Canonicalize the typedef name. */
1829 basetype = TREE_TYPE (typedef_name);
1830 name = ctor_identifier;
1832 else
1834 cp_error ("no constructor named `%T' in scope",
1835 name);
1836 return error_mark_node;
1840 if (! IS_AGGR_TYPE (basetype))
1842 non_aggr_error:
1843 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
1844 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
1845 name, instance, basetype);
1847 return error_mark_node;
1850 else if (instance == current_class_ref || instance == current_class_ptr)
1852 /* When doing initialization, we side-effect the TREE_TYPE of
1853 current_class_ref, hence we cannot set up BASETYPE from CURRENT_CLASS_TYPE. */
1854 basetype = TREE_TYPE (current_class_ref);
1856 /* Anything manifestly `this' in constructors and destructors
1857 has a known type, so virtual function tables are not needed. */
1858 if (TYPE_VIRTUAL_P (basetype)
1859 && !(flags & LOOKUP_NONVIRTUAL))
1860 need_vtbl = (dtor_label || ctor_label)
1861 ? unneeded : maybe_needed;
1863 /* If `this' is a signature pointer and `name' is not a constructor,
1864 we are calling a signature member function. In that case, set the
1865 `basetype' to the signature type and dereference the `optr' field. */
1866 if (IS_SIGNATURE_POINTER (basetype)
1867 && TYPE_IDENTIFIER (basetype) != name)
1869 basetype = SIGNATURE_TYPE (basetype);
1870 instance_ptr = instance;
1871 basetype_path = TYPE_BINFO (basetype);
1873 else
1875 instance = current_class_ref;
1876 instance_ptr = current_class_ptr;
1877 basetype_path = TYPE_BINFO (current_class_type);
1879 result = build_field_call (basetype_path, instance_ptr, name, parms);
1881 if (result)
1882 return result;
1884 else if (TREE_CODE (instance) == RESULT_DECL)
1886 basetype = TREE_TYPE (instance);
1887 /* Should we ever have to make a virtual function reference
1888 from a RESULT_DECL, know that it must be of fixed type
1889 within the scope of this function. */
1890 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
1891 need_vtbl = maybe_needed;
1892 instance_ptr = build1 (ADDR_EXPR, build_pointer_type (basetype), instance);
1894 else
1896 /* The MAIN_VARIANT of the type that `instance_ptr' winds up being. */
1897 tree inst_ptr_basetype;
1899 static_call_context
1900 = (TREE_CODE (instance) == INDIRECT_REF
1901 && TREE_CODE (TREE_OPERAND (instance, 0)) == NOP_EXPR
1902 && TREE_OPERAND (TREE_OPERAND (instance, 0), 0) == error_mark_node);
1904 if (TREE_CODE (instance) == OFFSET_REF)
1905 instance = resolve_offset_ref (instance);
1907 /* the base type of an instance variable is pointer to class */
1908 basetype = TREE_TYPE (instance);
1910 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1912 basetype = TREE_TYPE (basetype);
1913 if (! IS_AGGR_TYPE (basetype))
1914 goto non_aggr_error;
1915 /* Call to convert not needed because we are remaining
1916 within the same type. */
1917 instance_ptr = build1 (NOP_EXPR, build_pointer_type (basetype),
1918 instance);
1919 inst_ptr_basetype = TYPE_MAIN_VARIANT (basetype);
1921 else
1923 if (! IS_AGGR_TYPE (basetype)
1924 && ! (TYPE_LANG_SPECIFIC (basetype)
1925 && (IS_SIGNATURE_POINTER (basetype)
1926 || IS_SIGNATURE_REFERENCE (basetype))))
1927 goto non_aggr_error;
1929 /* If `instance' is a signature pointer/reference and `name' is
1930 not a constructor, we are calling a signature member function.
1931 In that case set the `basetype' to the signature type. */
1932 if ((IS_SIGNATURE_POINTER (basetype)
1933 || IS_SIGNATURE_REFERENCE (basetype))
1934 && TYPE_IDENTIFIER (basetype) != name)
1935 basetype = SIGNATURE_TYPE (basetype);
1937 basetype = complete_type (basetype);
1939 if ((IS_SIGNATURE (basetype)
1940 && (instance_ptr = instance))
1941 || (lvalue_p (instance)
1942 && (instance_ptr = build_unary_op (ADDR_EXPR, instance, 0)))
1943 || (instance_ptr = unary_complex_lvalue (ADDR_EXPR, instance)))
1945 if (instance_ptr == error_mark_node)
1946 return error_mark_node;
1948 else if (TREE_CODE (instance) == NOP_EXPR
1949 || TREE_CODE (instance) == CONSTRUCTOR)
1951 /* A cast is not an lvalue. Initialize a fresh temp
1952 with the value we are casting from, and proceed with
1953 that temporary. We can't cast to a reference type,
1954 so that simplifies the initialization to something
1955 we can manage. */
1956 tree temp = get_temp_name (TREE_TYPE (instance), 0);
1957 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
1958 expand_aggr_init (temp, instance, 0, flags);
1959 else
1961 store_init_value (temp, instance);
1962 expand_decl_init (temp);
1964 instance = temp;
1965 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1967 else
1969 if (TREE_CODE (instance) != CALL_EXPR)
1970 my_friendly_abort (125);
1971 if (TYPE_NEEDS_CONSTRUCTING (basetype))
1972 instance = build_cplus_new (basetype, instance);
1973 else
1975 instance = get_temp_name (basetype, 0);
1976 TREE_ADDRESSABLE (instance) = 1;
1978 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1980 /* @@ Should we call comp_target_types here? */
1981 if (IS_SIGNATURE (basetype))
1982 inst_ptr_basetype = basetype;
1983 else
1984 inst_ptr_basetype = TREE_TYPE (TREE_TYPE (instance_ptr));
1985 if (TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (inst_ptr_basetype))
1986 basetype = inst_ptr_basetype;
1987 else
1989 instance_ptr = cp_convert (build_pointer_type (basetype), instance_ptr);
1990 if (instance_ptr == error_mark_node)
1991 return error_mark_node;
1995 /* After converting `instance_ptr' above, `inst_ptr_basetype' was
1996 not updated, so we use `basetype' instead. */
1997 if (basetype_path == NULL_TREE
1998 && IS_SIGNATURE (basetype))
1999 basetype_path = TYPE_BINFO (basetype);
2000 else if (basetype_path == NULL_TREE
2001 || (BINFO_TYPE (basetype_path)
2002 != TYPE_MAIN_VARIANT (inst_ptr_basetype)))
2003 basetype_path = TYPE_BINFO (inst_ptr_basetype);
2005 result = build_field_call (basetype_path, instance_ptr, name, parms);
2006 if (result)
2007 return result;
2009 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
2011 if (TREE_SIDE_EFFECTS (instance_ptr))
2013 /* This action is needed because the instance is needed
2014 for providing the base of the virtual function table.
2015 Without using a SAVE_EXPR, the function we are building
2016 may be called twice, or side effects on the instance
2017 variable (such as a post-increment), may happen twice. */
2018 instance_ptr = save_expr (instance_ptr);
2019 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2021 else if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
2023 /* This happens when called for operator new (). */
2024 instance = build_indirect_ref (instance, NULL_PTR);
2027 need_vtbl = maybe_needed;
2031 if (save_name == ctor_identifier)
2032 save_name = TYPE_IDENTIFIER (basetype);
2034 if (TYPE_SIZE (complete_type (basetype)) == 0)
2036 /* This is worth complaining about, I think. */
2037 cp_error ("cannot lookup method in incomplete type `%T'", basetype);
2038 return error_mark_node;
2041 save_basetype = TYPE_MAIN_VARIANT (basetype);
2043 parmtypes = default_parm_conversions (parms, &last);
2044 if (parmtypes == error_mark_node)
2046 return error_mark_node;
2049 if (instance && IS_SIGNATURE (basetype))
2051 /* @@ Should this be the constp/volatilep flags for the optr field
2052 of the signature pointer? */
2053 constp = TYPE_READONLY (basetype);
2054 volatilep = TYPE_VOLATILE (basetype);
2055 parms = tree_cons (NULL_TREE, instance_ptr, parms);
2057 else if (instance)
2059 /* TREE_READONLY (instance) fails for references. */
2060 constp = TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr)));
2061 volatilep = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr)));
2062 parms = tree_cons (NULL_TREE, instance_ptr, parms);
2064 else
2066 /* Raw constructors are always in charge. */
2067 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2068 && ! (flags & LOOKUP_HAS_IN_CHARGE))
2070 flags |= LOOKUP_HAS_IN_CHARGE;
2071 parms = tree_cons (NULL_TREE, integer_one_node, parms);
2072 parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes);
2075 constp = 0;
2076 volatilep = 0;
2077 instance_ptr = build_int_2 (0, 0);
2078 TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
2079 parms = tree_cons (NULL_TREE, instance_ptr, parms);
2082 parmtypes = tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes);
2084 if (last == NULL_TREE)
2085 last = parmtypes;
2087 /* Look up function name in the structure type definition. */
2089 /* FIXME Axe most of this now? */
2090 if ((IDENTIFIER_HAS_TYPE_VALUE (name)
2091 && ! IDENTIFIER_OPNAME_P (name)
2092 && IS_AGGR_TYPE (IDENTIFIER_TYPE_VALUE (name)))
2093 || name == constructor_name (basetype)
2094 || name == ctor_identifier)
2096 tree tmp = NULL_TREE;
2097 if (IDENTIFIER_TYPE_VALUE (name) == basetype
2098 || name == constructor_name (basetype)
2099 || name == ctor_identifier)
2100 tmp = TYPE_BINFO (basetype);
2101 else
2102 tmp = get_binfo (IDENTIFIER_TYPE_VALUE (name), basetype, 0);
2104 if (tmp != NULL_TREE)
2106 name_kind = "constructor";
2108 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2109 && ! (flags & LOOKUP_HAS_IN_CHARGE))
2111 /* Constructors called for initialization
2112 only are never in charge. */
2113 tree tmplist;
2115 flags |= LOOKUP_HAS_IN_CHARGE;
2116 tmplist = tree_cons (NULL_TREE, integer_zero_node,
2117 TREE_CHAIN (parms));
2118 TREE_CHAIN (parms) = tmplist;
2119 tmplist = tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
2120 TREE_CHAIN (parmtypes) = tmplist;
2122 basetype = BINFO_TYPE (tmp);
2124 else
2125 name_kind = "method";
2127 else
2128 name_kind = "method";
2130 if (basetype_path == NULL_TREE
2131 || BINFO_TYPE (basetype_path) != TYPE_MAIN_VARIANT (basetype))
2132 basetype_path = TYPE_BINFO (basetype);
2133 result = lookup_fnfields (basetype_path, name,
2134 (flags & LOOKUP_COMPLAIN));
2135 if (result == error_mark_node)
2136 return error_mark_node;
2138 for (pass = 0; pass < 2; pass++)
2140 struct candidate *candidates;
2141 struct candidate *cp;
2142 int len;
2143 unsigned best = 1;
2145 baselink = result;
2147 if (pass > 0)
2149 candidates
2150 = (struct candidate *) alloca ((ever_seen+1)
2151 * sizeof (struct candidate));
2152 bzero ((char *) candidates, (ever_seen + 1) * sizeof (struct candidate));
2153 cp = candidates;
2154 len = list_length (parms);
2155 ever_seen = 0;
2157 /* First see if a global function has a shot at it. */
2158 if (flags & LOOKUP_GLOBAL)
2160 tree friend_parms;
2161 tree parm = instance_ptr;
2163 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE)
2164 parm = convert_from_reference (parm);
2165 else if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE)
2166 parm = build_indirect_ref (parm, "friendifying parms (compiler error)");
2167 else
2168 my_friendly_abort (167);
2170 friend_parms = tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
2172 cp->h_len = len;
2173 cp->harshness = (struct harshness_code *)
2174 alloca ((len + 1) * sizeof (struct harshness_code));
2176 result = build_overload_call_real (name, friend_parms, 0, cp, 1);
2178 /* If it turns out to be the one we were actually looking for
2179 (it was probably a friend function), the return the
2180 good result. */
2181 if (TREE_CODE (result) == CALL_EXPR)
2182 return result;
2184 while ((cp->h.code & EVIL_CODE) == 0)
2186 /* non-standard uses: set the field to 0 to indicate
2187 we are using a non-member function. */
2188 cp->u.field = 0;
2189 if (cp->harshness[len].distance == 0
2190 && cp->h.code < best)
2191 best = cp->h.code;
2192 cp += 1;
2197 if (baselink)
2199 /* We have a hit (of sorts). If the parameter list is
2200 "error_mark_node", or some variant thereof, it won't
2201 match any methods. Since we have verified that the is
2202 some method vaguely matching this one (in name at least),
2203 silently return.
2205 Don't stop for friends, however. */
2206 basetype_path = TREE_PURPOSE (baselink);
2208 function = TREE_VALUE (baselink);
2209 if (TREE_CODE (basetype_path) == TREE_LIST)
2210 basetype_path = TREE_VALUE (basetype_path);
2211 basetype = BINFO_TYPE (basetype_path);
2213 for (; function; function = DECL_CHAIN (function))
2215 #ifdef GATHER_STATISTICS
2216 n_inner_fields_searched++;
2217 #endif
2218 ever_seen++;
2219 if (pass > 0)
2220 found_fns = tree_cons (NULL_TREE, function, found_fns);
2222 /* Not looking for friends here. */
2223 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE
2224 && ! DECL_STATIC_FUNCTION_P (function))
2225 continue;
2227 if (pass > 0)
2229 tree these_parms = parms;
2231 #ifdef GATHER_STATISTICS
2232 n_inner_fields_searched++;
2233 #endif
2234 cp->h_len = len;
2235 cp->harshness = (struct harshness_code *)
2236 alloca ((len + 1) * sizeof (struct harshness_code));
2238 if (DECL_STATIC_FUNCTION_P (function))
2239 these_parms = TREE_CHAIN (these_parms);
2240 compute_conversion_costs (function, these_parms, cp, len);
2242 if ((cp->h.code & EVIL_CODE) == 0)
2244 cp->u.field = function;
2245 cp->function = function;
2246 cp->basetypes = basetype_path;
2248 /* Don't allow non-converting constructors to convert. */
2249 if (flags & LOOKUP_ONLYCONVERTING
2250 && DECL_LANG_SPECIFIC (function)
2251 && DECL_NONCONVERTING_P (function))
2252 continue;
2254 /* No "two-level" conversions. */
2255 if (flags & LOOKUP_NO_CONVERSION
2256 && (cp->h.code & USER_CODE))
2257 continue;
2259 cp++;
2265 if (pass == 0)
2267 tree igv = lookup_name_nonclass (name);
2269 /* No exact match could be found. Now try to find match
2270 using default conversions. */
2271 if ((flags & LOOKUP_GLOBAL) && igv)
2273 if (TREE_CODE (igv) == FUNCTION_DECL)
2274 ever_seen += 1;
2275 else if (TREE_CODE (igv) == TREE_LIST)
2276 ever_seen += count_functions (igv);
2279 if (ever_seen == 0)
2281 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2282 == LOOKUP_SPECULATIVELY)
2283 return NULL_TREE;
2285 TREE_CHAIN (last) = void_list_node;
2286 if (flags & LOOKUP_GLOBAL)
2287 cp_error ("no global or member function `%D(%A)' defined",
2288 save_name, parmtypes);
2289 else
2290 cp_error ("no member function `%T::%D(%A)' defined",
2291 save_basetype, save_name, TREE_CHAIN (parmtypes));
2292 return error_mark_node;
2294 continue;
2297 if (cp - candidates != 0)
2299 /* Rank from worst to best. Then cp will point to best one.
2300 Private fields have their bits flipped. For unsigned
2301 numbers, this should make them look very large.
2302 If the best alternate has a (signed) negative value,
2303 then all we ever saw were private members. */
2304 if (cp - candidates > 1)
2306 int n_candidates = cp - candidates;
2307 extern int warn_synth;
2308 TREE_VALUE (parms) = instance_ptr;
2309 cp = ideal_candidate (candidates, n_candidates, len);
2310 if (cp == (struct candidate *)0)
2312 if (flags & LOOKUP_COMPLAIN)
2314 TREE_CHAIN (last) = void_list_node;
2315 cp_error ("call of overloaded %s `%D(%A)' is ambiguous",
2316 name_kind, save_name, TREE_CHAIN (parmtypes));
2317 print_n_candidates (candidates, n_candidates);
2319 return error_mark_node;
2321 if (cp->h.code & EVIL_CODE)
2322 return error_mark_node;
2323 if (warn_synth
2324 && DECL_NAME (cp->function) == ansi_opname[MODIFY_EXPR]
2325 && DECL_ARTIFICIAL (cp->function)
2326 && n_candidates == 2)
2328 cp_warning ("using synthesized `%#D' for copy assignment",
2329 cp->function);
2330 cp_warning_at (" where cfront would use `%#D'",
2331 candidates->function);
2334 else if (cp[-1].h.code & EVIL_CODE)
2336 if (flags & LOOKUP_COMPLAIN)
2337 cp_error ("ambiguous type conversion requested for %s `%D'",
2338 name_kind, save_name);
2339 return error_mark_node;
2341 else
2342 cp--;
2344 /* The global function was the best, so use it. */
2345 if (cp->u.field == 0)
2347 /* We must convert the instance pointer into a reference type.
2348 Global overloaded functions can only either take
2349 aggregate objects (which come for free from references)
2350 or reference data types anyway. */
2351 TREE_VALUE (parms) = copy_node (instance_ptr);
2352 TREE_TYPE (TREE_VALUE (parms)) = build_reference_type (TREE_TYPE (TREE_TYPE (instance_ptr)));
2353 return build_function_call (cp->function, parms);
2356 function = cp->function;
2357 basetype_path = cp->basetypes;
2358 if (! DECL_STATIC_FUNCTION_P (function))
2359 TREE_VALUE (parms) = cp->arg;
2360 goto found_and_maybe_warn;
2363 if (flags & (LOOKUP_COMPLAIN|LOOKUP_SPECULATIVELY))
2365 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2366 == LOOKUP_SPECULATIVELY)
2367 return NULL_TREE;
2369 if (DECL_STATIC_FUNCTION_P (cp->function))
2370 parms = TREE_CHAIN (parms);
2371 if (ever_seen)
2373 if (flags & LOOKUP_SPECULATIVELY)
2374 return NULL_TREE;
2375 if (static_call_context
2376 && TREE_CODE (TREE_TYPE (cp->function)) == METHOD_TYPE)
2377 cp_error ("object missing in call to `%D'", cp->function);
2378 else if (ever_seen > 1)
2380 TREE_CHAIN (last) = void_list_node;
2381 cp_error ("no matching function for call to `%T::%D (%A)%V'",
2382 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (instance_ptr))),
2383 save_name, TREE_CHAIN (parmtypes),
2384 TREE_TYPE (TREE_TYPE (instance_ptr)));
2385 TREE_CHAIN (last) = NULL_TREE;
2386 print_candidates (found_fns);
2388 else
2389 report_type_mismatch (cp, parms, name_kind);
2390 return error_mark_node;
2393 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2394 == LOOKUP_COMPLAIN)
2396 cp_error ("%T has no method named %D", save_basetype, save_name);
2397 return error_mark_node;
2399 return NULL_TREE;
2401 continue;
2403 found_and_maybe_warn:
2404 if ((cp->harshness[0].code & CONST_CODE)
2405 /* 12.1p2: Constructors can be called for const objects. */
2406 && ! DECL_CONSTRUCTOR_P (cp->function))
2408 if (flags & LOOKUP_COMPLAIN)
2410 cp_error_at ("non-const member function `%D'", cp->function);
2411 error ("called for const object at this point in file");
2413 /* Not good enough for a match. */
2414 else
2415 return error_mark_node;
2417 goto found;
2419 /* Silently return error_mark_node. */
2420 return error_mark_node;
2422 found:
2423 if (flags & LOOKUP_PROTECT)
2424 access = compute_access (basetype_path, function);
2426 if (access == access_private_node)
2428 if (flags & LOOKUP_COMPLAIN)
2430 cp_error_at ("%s `%+#D' is %s", name_kind, function,
2431 TREE_PRIVATE (function) ? "private"
2432 : "from private base class");
2433 error ("within this context");
2435 return error_mark_node;
2437 else if (access == access_protected_node)
2439 if (flags & LOOKUP_COMPLAIN)
2441 cp_error_at ("%s `%+#D' %s", name_kind, function,
2442 TREE_PROTECTED (function) ? "is protected"
2443 : "has protected accessibility");
2444 error ("within this context");
2446 return error_mark_node;
2449 /* From here on down, BASETYPE is the type that INSTANCE_PTR's
2450 type (if it exists) is a pointer to. */
2452 if (DECL_ABSTRACT_VIRTUAL_P (function)
2453 && instance == current_class_ref
2454 && DECL_CONSTRUCTOR_P (current_function_decl)
2455 && ! (flags & LOOKUP_NONVIRTUAL)
2456 && value_member (function, get_abstract_virtuals (basetype)))
2457 cp_error ("abstract virtual `%#D' called from constructor", function);
2459 if (IS_SIGNATURE (basetype))
2461 if (static_call_context)
2463 cp_error ("cannot call signature member function `%T::%D' without signature pointer/reference",
2464 basetype, save_name);
2465 return error_mark_node;
2467 return build_signature_method_call (function, parms);
2470 function = DECL_MAIN_VARIANT (function);
2471 mark_used (function);
2473 fntype = TREE_TYPE (function);
2474 if (TREE_CODE (fntype) == POINTER_TYPE)
2475 fntype = TREE_TYPE (fntype);
2476 basetype = DECL_CLASS_CONTEXT (function);
2478 /* If we are referencing a virtual function from an object
2479 of effectively static type, then there is no need
2480 to go through the virtual function table. */
2481 if (need_vtbl == maybe_needed)
2483 int fixed_type = resolves_to_fixed_type_p (instance, 0);
2485 if (all_virtual == 1
2486 && DECL_VINDEX (function)
2487 && may_be_remote (basetype))
2488 need_vtbl = needed;
2489 else if (DECL_VINDEX (function))
2490 need_vtbl = fixed_type ? unneeded : needed;
2491 else
2492 need_vtbl = not_needed;
2495 if (TREE_CODE (fntype) == METHOD_TYPE && static_call_context
2496 && !DECL_CONSTRUCTOR_P (function))
2498 /* Let's be nasty to the user now, and give reasonable
2499 error messages. */
2500 instance_ptr = current_class_ptr;
2501 if (instance_ptr)
2503 if (basetype != current_class_type)
2505 if (basetype == error_mark_node)
2506 return error_mark_node;
2507 else
2509 if (orig_basetype != NULL_TREE)
2510 error_not_base_type (orig_basetype, current_class_type);
2511 else
2512 error_not_base_type (function, current_class_type);
2513 return error_mark_node;
2517 /* Only allow a static member function to call another static member
2518 function. */
2519 else if (DECL_LANG_SPECIFIC (function)
2520 && !DECL_STATIC_FUNCTION_P (function))
2522 cp_error ("cannot call member function `%D' without object",
2523 function);
2524 return error_mark_node;
2528 value_type = TREE_TYPE (fntype) ? TREE_TYPE (fntype) : void_type_node;
2530 if (TYPE_SIZE (complete_type (value_type)) == 0)
2532 if (flags & LOOKUP_COMPLAIN)
2533 incomplete_type_error (0, value_type);
2534 return error_mark_node;
2537 if (DECL_STATIC_FUNCTION_P (function))
2538 parms = convert_arguments (NULL_TREE, TYPE_ARG_TYPES (fntype),
2539 TREE_CHAIN (parms), function, LOOKUP_NORMAL);
2540 else if (need_vtbl == unneeded)
2542 int sub_flags = DECL_CONSTRUCTOR_P (function) ? flags : LOOKUP_NORMAL;
2543 basetype = TREE_TYPE (instance);
2544 if (TYPE_METHOD_BASETYPE (TREE_TYPE (function))
2545 != TYPE_MAIN_VARIANT (basetype))
2547 basetype = DECL_CLASS_CONTEXT (function);
2548 instance_ptr = convert_pointer_to (basetype, instance_ptr);
2549 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2551 parms = tree_cons (NULL_TREE, instance_ptr,
2552 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, sub_flags));
2554 else
2556 if ((flags & LOOKUP_NONVIRTUAL) == 0)
2557 basetype = DECL_CONTEXT (function);
2559 /* First parm could be integer_zerop with casts like
2560 ((Object*)0)->Object::IsA() */
2561 if (!integer_zerop (TREE_VALUE (parms)))
2563 /* Since we can't have inheritance with a union, doing get_binfo
2564 on it won't work. We do all the convert_pointer_to_real
2565 stuff to handle MI correctly...for unions, that's not
2566 an issue, so we must short-circuit that extra work here. */
2567 tree tmp = TREE_TYPE (TREE_TYPE (TREE_VALUE (parms)));
2568 if (tmp != NULL_TREE && TREE_CODE (tmp) == UNION_TYPE)
2569 instance_ptr = TREE_VALUE (parms);
2570 else
2572 tree binfo = get_binfo (basetype,
2573 TREE_TYPE (TREE_TYPE (TREE_VALUE (parms))),
2575 instance_ptr = convert_pointer_to_real (binfo, TREE_VALUE (parms));
2577 instance_ptr
2578 = convert_pointer_to (build_type_variant (basetype,
2579 constp, volatilep),
2580 instance_ptr);
2582 if (TREE_CODE (instance_ptr) == COND_EXPR)
2584 instance_ptr = save_expr (instance_ptr);
2585 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2587 else if (TREE_CODE (instance_ptr) == NOP_EXPR
2588 && TREE_CODE (TREE_OPERAND (instance_ptr, 0)) == ADDR_EXPR
2589 && TREE_OPERAND (TREE_OPERAND (instance_ptr, 0), 0) == instance)
2591 /* The call to `convert_pointer_to' may return error_mark_node. */
2592 else if (instance_ptr == error_mark_node)
2593 return instance_ptr;
2594 else if (instance == NULL_TREE
2595 || TREE_CODE (instance) != INDIRECT_REF
2596 || TREE_OPERAND (instance, 0) != instance_ptr)
2597 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2599 parms = tree_cons (NULL_TREE, instance_ptr,
2600 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, LOOKUP_NORMAL));
2603 if (parms == error_mark_node
2604 || (parms && TREE_CHAIN (parms) == error_mark_node))
2605 return error_mark_node;
2607 if (need_vtbl == needed)
2609 function = build_vfn_ref (&TREE_VALUE (parms), instance,
2610 DECL_VINDEX (function));
2611 TREE_TYPE (function) = build_pointer_type (fntype);
2614 if (TREE_CODE (function) == FUNCTION_DECL)
2615 GNU_xref_call (current_function_decl,
2616 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function)));
2618 result = build_call (function, value_type, parms);
2619 if (IS_AGGR_TYPE (value_type))
2620 result = build_cplus_new (value_type, result);
2621 result = convert_from_reference (result);
2622 return result;
2625 /* Similar to `build_method_call', but for overloaded non-member functions.
2626 The name of this function comes through NAME. The name depends
2627 on PARMS.
2629 Note that this function must handle simple `C' promotions,
2630 as well as variable numbers of arguments (...), and
2631 default arguments to boot.
2633 If the overloading is successful, we return a tree node which
2634 contains the call to the function.
2636 If overloading produces candidates which are probable, but not definite,
2637 we hold these candidates. If FINAL_CP is non-zero, then we are free
2638 to assume that final_cp points to enough storage for all candidates that
2639 this function might generate. The `harshness' array is preallocated for
2640 the first candidate, but not for subsequent ones.
2642 Note that the DECL_RTL of FUNCTION must be made to agree with this
2643 function's new name. */
2645 tree
2646 build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
2647 tree fnname, parms;
2648 int flags;
2649 struct candidate *final_cp;
2650 int require_complete;
2652 /* must check for overloading here */
2653 tree functions, function;
2654 tree parmtypes, last;
2655 register tree outer;
2656 int length;
2657 int parmlength = list_length (parms);
2659 struct candidate *candidates, *cp;
2661 if (final_cp)
2663 final_cp[0].h.code = 0;
2664 final_cp[0].h.distance = 0;
2665 final_cp[0].function = 0;
2666 /* end marker. */
2667 final_cp[1].h.code = EVIL_CODE;
2670 parmtypes = default_parm_conversions (parms, &last);
2671 if (parmtypes == error_mark_node)
2673 if (final_cp)
2674 final_cp->h.code = EVIL_CODE;
2675 return error_mark_node;
2678 if (last)
2679 TREE_CHAIN (last) = void_list_node;
2680 else
2681 parmtypes = void_list_node;
2683 if (is_overloaded_fn (fnname))
2685 functions = fnname;
2686 if (TREE_CODE (fnname) == TREE_LIST)
2687 fnname = TREE_PURPOSE (functions);
2688 else if (TREE_CODE (fnname) == FUNCTION_DECL)
2689 fnname = DECL_NAME (functions);
2691 else
2692 functions = lookup_name_nonclass (fnname);
2694 if (functions == NULL_TREE)
2696 if (flags & LOOKUP_SPECULATIVELY)
2697 return NULL_TREE;
2698 if (flags & LOOKUP_COMPLAIN)
2699 error ("only member functions apply");
2700 if (final_cp)
2701 final_cp->h.code = EVIL_CODE;
2702 return error_mark_node;
2705 if (TREE_CODE (functions) == FUNCTION_DECL && ! IDENTIFIER_OPNAME_P (fnname))
2707 functions = DECL_MAIN_VARIANT (functions);
2708 if (final_cp)
2710 /* We are just curious whether this is a viable alternative or
2711 not. */
2712 compute_conversion_costs (functions, parms, final_cp, parmlength);
2713 return functions;
2715 else
2716 return build_function_call_real (functions, parms, 1, flags);
2719 if (TREE_CODE (functions) == TREE_LIST
2720 && TREE_VALUE (functions) == NULL_TREE)
2722 if (flags & LOOKUP_SPECULATIVELY)
2723 return NULL_TREE;
2725 if (flags & LOOKUP_COMPLAIN)
2726 cp_error ("function `%D' declared overloaded, but no instances of that function declared",
2727 TREE_PURPOSE (functions));
2728 if (final_cp)
2729 final_cp->h.code = EVIL_CODE;
2730 return error_mark_node;
2733 length = count_functions (functions);
2735 if (final_cp)
2736 candidates = final_cp;
2737 else
2739 candidates
2740 = (struct candidate *)alloca ((length+1) * sizeof (struct candidate));
2741 bzero ((char *) candidates, (length + 1) * sizeof (struct candidate));
2744 cp = candidates;
2746 my_friendly_assert (is_overloaded_fn (functions), 169);
2748 functions = get_first_fn (functions);
2750 /* OUTER is the list of FUNCTION_DECLS, in a TREE_LIST. */
2751 for (outer = functions; outer; outer = DECL_CHAIN (outer))
2753 int template_cost = 0;
2754 function = outer;
2755 if (TREE_CODE (function) != FUNCTION_DECL
2756 && ! (TREE_CODE (function) == TEMPLATE_DECL
2757 && TREE_CODE (DECL_TEMPLATE_RESULT (function)) == FUNCTION_DECL))
2759 enum tree_code code = TREE_CODE (function);
2760 if (code == TEMPLATE_DECL)
2761 code = TREE_CODE (DECL_TEMPLATE_RESULT (function));
2762 if (code == CONST_DECL)
2763 cp_error_at
2764 ("enumeral value `%D' conflicts with function of same name",
2765 function);
2766 else if (code == VAR_DECL)
2768 if (TREE_STATIC (function))
2769 cp_error_at
2770 ("variable `%D' conflicts with function of same name",
2771 function);
2772 else
2773 cp_error_at
2774 ("constant field `%D' conflicts with function of same name",
2775 function);
2777 else if (code == TYPE_DECL)
2778 continue;
2779 else
2780 my_friendly_abort (2);
2781 error ("at this point in file");
2782 continue;
2784 if (TREE_CODE (function) == TEMPLATE_DECL)
2786 int ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (function));
2787 tree *targs = (tree *) alloca (sizeof (tree) * ntparms);
2788 int i;
2790 i = type_unification (DECL_TEMPLATE_PARMS (function), targs,
2791 TYPE_ARG_TYPES (TREE_TYPE (function)),
2792 parms, &template_cost, 0, 0);
2793 if (i == 0)
2795 function = instantiate_template (function, targs);
2796 if (function == error_mark_node)
2797 return function;
2801 if (TREE_CODE (function) == TEMPLATE_DECL)
2803 /* Unconverted template -- failed match. */
2804 cp->function = function;
2805 cp->u.bad_arg = -4;
2806 cp->h.code = EVIL_CODE;
2808 else
2810 struct candidate *cp2;
2812 /* Check that this decl is not the same as a function that's in
2813 the list due to some template instantiation. */
2814 cp2 = candidates;
2815 while (cp2 != cp)
2816 if (cp2->function == function)
2817 break;
2818 else
2819 cp2 += 1;
2820 if (cp2->function == function)
2821 continue;
2823 function = DECL_MAIN_VARIANT (function);
2825 /* Can't use alloca here, since result might be
2826 passed to calling function. */
2827 cp->h_len = parmlength;
2828 cp->harshness = (struct harshness_code *)
2829 oballoc ((parmlength + 1) * sizeof (struct harshness_code));
2831 compute_conversion_costs (function, parms, cp, parmlength);
2833 /* Make sure this is clear as well. */
2834 cp->h.int_penalty += template_cost;
2836 if ((cp[0].h.code & EVIL_CODE) == 0)
2838 cp[1].h.code = EVIL_CODE;
2839 cp++;
2844 if (cp - candidates)
2846 tree rval = error_mark_node;
2848 /* Leave marker. */
2849 cp[0].h.code = EVIL_CODE;
2850 if (cp - candidates > 1)
2852 struct candidate *best_cp
2853 = ideal_candidate (candidates, cp - candidates, parmlength);
2854 if (best_cp == (struct candidate *)0)
2856 if (flags & LOOKUP_COMPLAIN)
2858 cp_error ("call of overloaded `%D' is ambiguous", fnname);
2859 print_n_candidates (candidates, cp - candidates);
2861 return error_mark_node;
2863 else
2864 rval = best_cp->function;
2866 else
2868 cp -= 1;
2869 if (cp->h.code & EVIL_CODE)
2871 if (flags & LOOKUP_COMPLAIN)
2872 error ("type conversion ambiguous");
2874 else
2875 rval = cp->function;
2878 if (final_cp)
2879 return rval;
2881 return build_function_call_real (rval, parms, require_complete, flags);
2884 if (flags & LOOKUP_SPECULATIVELY)
2885 return NULL_TREE;
2887 if (flags & LOOKUP_COMPLAIN)
2888 report_type_mismatch (cp, parms, "function",
2889 decl_as_string (cp->function, 1));
2891 return error_mark_node;
2894 /* This requires a complete type on the result of the call. */
2896 tree
2897 build_overload_call (fnname, parms, flags)
2898 tree fnname, parms;
2899 int flags;
2901 return build_overload_call_real (fnname, parms, flags, (struct candidate *)0, 1);
2904 /* New overloading code. */
2906 struct z_candidate {
2907 tree fn;
2908 tree convs;
2909 tree second_conv;
2910 int viable;
2911 tree basetype_path;
2912 tree template;
2913 struct z_candidate *next;
2916 #define IDENTITY_RANK 0
2917 #define EXACT_RANK 1
2918 #define PROMO_RANK 2
2919 #define STD_RANK 3
2920 #define PBOOL_RANK 4
2921 #define USER_RANK 5
2922 #define ELLIPSIS_RANK 6
2923 #define BAD_RANK 7
2925 #define ICS_RANK(NODE) \
2926 (ICS_BAD_FLAG (NODE) ? BAD_RANK \
2927 : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK \
2928 : ICS_USER_FLAG (NODE) ? USER_RANK \
2929 : ICS_STD_RANK (NODE))
2931 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
2933 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
2934 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2935 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
2936 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
2938 #define USER_CONV_FN(NODE) TREE_OPERAND (NODE, 1)
2940 static struct z_candidate * build_user_type_conversion_1 ();
2941 static tree convert_like ();
2942 static tree build_over_call ();
2943 static struct z_candidate * tourney ();
2944 static void enforce_access ();
2947 null_ptr_cst_p (t)
2948 tree t;
2950 if (t == null_node
2951 || integer_zerop (t) && INTEGRAL_TYPE_P (TREE_TYPE (t)))
2952 return 1;
2953 /* Remove this eventually. */
2954 if (! pedantic && TREE_TYPE (t) == ptr_type_node && integer_zerop (t))
2955 return 1;
2956 return 0;
2959 static tree
2960 build_conv (code, type, from)
2961 enum tree_code code;
2962 tree type, from;
2964 tree t = build1 (code, type, from);
2965 int rank = ICS_STD_RANK (from);
2966 switch (code)
2968 case PTR_CONV:
2969 case PMEM_CONV:
2970 case BASE_CONV:
2971 case STD_CONV:
2972 if (rank < STD_RANK)
2973 rank = STD_RANK;
2974 break;
2976 case LVALUE_CONV:
2977 case QUAL_CONV:
2978 case RVALUE_CONV:
2979 if (rank < EXACT_RANK)
2980 rank = EXACT_RANK;
2982 default:
2983 break;
2985 ICS_STD_RANK (t) = rank;
2986 ICS_USER_FLAG (t) = ICS_USER_FLAG (from);
2987 ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
2988 return t;
2991 static tree
2992 non_reference (t)
2993 tree t;
2995 if (TREE_CODE (t) == REFERENCE_TYPE)
2996 t = TREE_TYPE (t);
2997 return t;
3000 static tree
3001 strip_top_quals (t)
3002 tree t;
3004 if (TREE_CODE (t) == ARRAY_TYPE)
3005 return t;
3006 return TYPE_MAIN_VARIANT (t);
3009 /* Returns the standard conversion path (see [conv]) from type FROM to type
3010 TO, if any. For proper handling of null pointer constants, you must
3011 also pass the expression EXPR to convert from. */
3013 static tree
3014 standard_conversion (to, from, expr)
3015 tree to, from, expr;
3017 enum tree_code fcode, tcode;
3018 tree conv;
3019 int fromref = 0;
3021 if (TREE_CODE (to) == REFERENCE_TYPE)
3022 to = TREE_TYPE (to);
3023 if (TREE_CODE (from) == REFERENCE_TYPE)
3025 fromref = 1;
3026 from = TREE_TYPE (from);
3028 to = strip_top_quals (to);
3029 from = strip_top_quals (from);
3031 fcode = TREE_CODE (from);
3032 tcode = TREE_CODE (to);
3034 conv = build1 (IDENTITY_CONV, from, expr);
3036 if (fcode == FUNCTION_TYPE)
3038 from = build_pointer_type (from);
3039 fcode = TREE_CODE (from);
3040 conv = build_conv (LVALUE_CONV, from, conv);
3042 else if (fcode == ARRAY_TYPE)
3044 from = build_pointer_type (TREE_TYPE (from));
3045 fcode = TREE_CODE (from);
3046 conv = build_conv (LVALUE_CONV, from, conv);
3048 else if (fromref || (expr && real_lvalue_p (expr)))
3049 conv = build_conv (RVALUE_CONV, from, conv);
3051 if (from == to)
3052 return conv;
3054 if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
3055 && expr && null_ptr_cst_p (expr))
3057 conv = build_conv (STD_CONV, to, conv);
3059 else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
3061 enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
3062 enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
3063 tree nconv = NULL_TREE;
3065 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (from)),
3066 TYPE_MAIN_VARIANT (TREE_TYPE (to)), 1))
3067 nconv = conv;
3068 else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
3069 && ufcode != FUNCTION_TYPE)
3071 from = build_pointer_type
3072 (cp_build_type_variant (void_type_node,
3073 TYPE_READONLY (TREE_TYPE (from)),
3074 TYPE_VOLATILE (TREE_TYPE (from))));
3075 nconv = build_conv (PTR_CONV, from, conv);
3077 else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
3079 tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
3080 tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
3082 if (DERIVED_FROM_P (fbase, tbase)
3083 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (from))),
3084 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (to))),
3085 1)))
3087 from = build_offset_type (tbase, TREE_TYPE (TREE_TYPE (from)));
3088 from = build_pointer_type (from);
3089 nconv = build_conv (PMEM_CONV, from, conv);
3092 else if (IS_AGGR_TYPE (TREE_TYPE (from))
3093 && IS_AGGR_TYPE (TREE_TYPE (to)))
3095 if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
3097 from = cp_build_type_variant (TREE_TYPE (to),
3098 TYPE_READONLY (TREE_TYPE (from)),
3099 TYPE_VOLATILE (TREE_TYPE (from)));
3100 from = build_pointer_type (from);
3101 nconv = build_conv (PTR_CONV, from, conv);
3105 if (nconv && comptypes (from, to, 1))
3106 conv = nconv;
3107 else if (nconv && comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
3108 conv = build_conv (QUAL_CONV, to, nconv);
3109 else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
3111 conv = build_conv (PTR_CONV, to, conv);
3112 ICS_BAD_FLAG (conv) = 1;
3114 else
3115 return 0;
3117 from = to;
3119 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
3121 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
3122 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
3123 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
3124 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
3126 if (! DERIVED_FROM_P (fbase, tbase)
3127 || ! comptypes (TREE_TYPE (fromfn), TREE_TYPE (tofn), 1)
3128 || ! compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
3129 TREE_CHAIN (TYPE_ARG_TYPES (tofn)), 1)
3130 || TYPE_READONLY (fbase) != TYPE_READONLY (tbase)
3131 || TYPE_VOLATILE (fbase) != TYPE_VOLATILE (tbase))
3132 return 0;
3134 from = cp_build_type_variant (tbase, TYPE_READONLY (fbase),
3135 TYPE_VOLATILE (fbase));
3136 from = build_cplus_method_type (from, TREE_TYPE (fromfn),
3137 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
3138 from = build_ptrmemfunc_type (build_pointer_type (from));
3139 conv = build_conv (PMEM_CONV, from, conv);
3141 else if (tcode == BOOLEAN_TYPE)
3143 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
3144 || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
3145 return 0;
3147 conv = build_conv (STD_CONV, to, conv);
3148 if (fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)
3149 && ICS_STD_RANK (conv) < PBOOL_RANK)
3150 ICS_STD_RANK (conv) = PBOOL_RANK;
3152 /* We don't check for ENUMERAL_TYPE here because there are no standard
3153 conversions to enum type. */
3154 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
3155 || tcode == REAL_TYPE)
3157 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
3158 return 0;
3159 conv = build_conv (STD_CONV, to, conv);
3161 /* Give this a better rank if it's a promotion. */
3162 if (to == type_promotes_to (from)
3163 && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
3164 ICS_STD_RANK (conv) = PROMO_RANK;
3166 else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3167 && DERIVED_FROM_P (to, from))
3168 conv = build_conv (BASE_CONV, to, conv);
3169 else
3170 return 0;
3172 return conv;
3175 /* Returns the conversion path from type FROM to reference type TO for
3176 purposes of reference binding. For lvalue binding, either pass a
3177 reference type to FROM or an lvalue expression to EXPR.
3179 Currently does not distinguish in the generated trees between binding to
3180 an lvalue and a temporary. Should it? */
3182 static tree
3183 reference_binding (rto, rfrom, expr, flags)
3184 tree rto, rfrom, expr;
3185 int flags;
3187 tree conv;
3188 int lvalue = 1;
3189 tree to = TREE_TYPE (rto);
3190 tree from = rfrom;
3191 int related;
3193 if (TREE_CODE (from) == REFERENCE_TYPE)
3194 from = TREE_TYPE (from);
3195 else if (! expr || ! real_lvalue_p (expr))
3196 lvalue = 0;
3198 related = (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from)
3199 || (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3200 && DERIVED_FROM_P (to, from)));
3202 if (lvalue && related
3203 && TYPE_READONLY (to) >= TYPE_READONLY (from)
3204 && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
3206 conv = build1 (IDENTITY_CONV, from, expr);
3208 if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
3209 conv = build_conv (REF_BIND, rto, conv);
3210 else
3212 conv = build_conv (REF_BIND, rto, conv);
3213 ICS_STD_RANK (conv) = STD_RANK;
3216 else
3217 conv = NULL_TREE;
3219 if (! conv)
3221 conv = standard_conversion (to, rfrom, expr);
3222 if (conv)
3224 conv = build_conv (REF_BIND, rto, conv);
3226 /* Bind directly to a base subobject of a class rvalue. Do it
3227 after building the conversion for proper handling of ICS_RANK. */
3228 if (TREE_CODE (TREE_OPERAND (conv, 0)) == BASE_CONV)
3229 TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
3231 if (conv
3232 && ((! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
3233 && (flags & LOOKUP_NO_TEMP_BIND) == 0))
3234 /* If T1 is reference-related to T2, cv1 must be the same
3235 cv-qualification as, or greater cv-qualification than,
3236 cv2; otherwise, the program is ill-formed. */
3237 || (related
3238 && (TYPE_READONLY (to) < TYPE_READONLY (from)
3239 || TYPE_VOLATILE (to) < TYPE_VOLATILE (from)))))
3240 ICS_BAD_FLAG (conv) = 1;
3243 return conv;
3246 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
3247 to type TO. The optional expression EXPR may affect the conversion.
3248 FLAGS are the usual overloading flags. Only LOOKUP_NO_CONVERSION is
3249 significant. */
3251 static tree
3252 implicit_conversion (to, from, expr, flags)
3253 tree to, from, expr;
3254 int flags;
3256 tree conv;
3257 struct z_candidate *cand;
3259 if (expr && type_unknown_p (expr))
3261 expr = instantiate_type (to, expr, 0);
3262 if (expr == error_mark_node)
3263 return 0;
3264 from = TREE_TYPE (expr);
3267 if (TREE_CODE (to) == REFERENCE_TYPE)
3268 conv = reference_binding (to, from, expr, flags);
3269 else
3270 conv = standard_conversion (to, from, expr);
3272 if (conv)
3274 else if ((IS_AGGR_TYPE (non_reference (from))
3275 || IS_AGGR_TYPE (non_reference (to)))
3276 && (flags & LOOKUP_NO_CONVERSION) == 0)
3278 cand = build_user_type_conversion_1
3279 (to, expr, LOOKUP_ONLYCONVERTING);
3280 if (cand)
3281 conv = cand->second_conv;
3282 if ((! conv || ICS_BAD_FLAG (conv))
3283 && TREE_CODE (to) == REFERENCE_TYPE
3284 && (flags & LOOKUP_NO_TEMP_BIND) == 0)
3286 cand = build_user_type_conversion_1
3287 (TYPE_MAIN_VARIANT (TREE_TYPE (to)), expr, LOOKUP_ONLYCONVERTING);
3288 if (cand)
3290 if (! TYPE_READONLY (TREE_TYPE (to))
3291 || TYPE_VOLATILE (TREE_TYPE (to)))
3292 ICS_BAD_FLAG (cand->second_conv) = 1;
3293 if (!conv || (ICS_BAD_FLAG (conv)
3294 > ICS_BAD_FLAG (cand->second_conv)))
3295 conv = build_conv (REF_BIND, to, cand->second_conv);
3300 return conv;
3303 /* Create an overload candidate for the function or method FN called with
3304 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
3305 to implicit_conversion. */
3307 static struct z_candidate *
3308 add_function_candidate (candidates, fn, arglist, flags)
3309 struct z_candidate *candidates;
3310 tree fn, arglist;
3311 int flags;
3313 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
3314 int i, len;
3315 tree convs;
3316 tree parmnode = parmlist;
3317 tree argnode = arglist;
3318 int viable = 1;
3319 struct z_candidate *cand;
3321 /* The `this' and `in_chrg' arguments to constructors are not considered
3322 in overload resolution. */
3323 if (DECL_CONSTRUCTOR_P (fn))
3325 parmnode = TREE_CHAIN (parmnode);
3326 argnode = TREE_CHAIN (argnode);
3327 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
3329 parmnode = TREE_CHAIN (parmnode);
3330 argnode = TREE_CHAIN (argnode);
3334 len = list_length (argnode);
3335 convs = make_tree_vec (len);
3337 for (i = 0; i < len; ++i)
3339 tree arg = TREE_VALUE (argnode);
3340 tree argtype = TREE_TYPE (arg);
3341 tree t;
3343 argtype = cp_build_type_variant
3344 (argtype, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg));
3346 if (parmnode == void_list_node)
3347 break;
3348 else if (parmnode)
3349 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3350 else
3352 t = build1 (IDENTITY_CONV, argtype, arg);
3353 ICS_ELLIPSIS_FLAG (t) = 1;
3356 if (i == 0 && t && TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
3357 && ! DECL_CONSTRUCTOR_P (fn))
3358 ICS_THIS_FLAG (t) = 1;
3360 TREE_VEC_ELT (convs, i) = t;
3361 if (! t)
3362 break;
3364 if (ICS_BAD_FLAG (t))
3365 viable = -1;
3367 if (parmnode)
3368 parmnode = TREE_CHAIN (parmnode);
3369 argnode = TREE_CHAIN (argnode);
3372 if (i < len)
3373 viable = 0;
3375 /* Make sure there are default args for the rest of the parms. */
3376 for (; parmnode && parmnode != void_list_node;
3377 parmnode = TREE_CHAIN (parmnode))
3378 if (! TREE_PURPOSE (parmnode))
3380 viable = 0;
3381 break;
3384 cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
3386 cand->fn = fn;
3387 cand->convs = convs;
3388 cand->second_conv = NULL_TREE;
3389 cand->viable = viable;
3390 cand->basetype_path = NULL_TREE;
3391 cand->template = NULL_TREE;
3392 cand->next = candidates;
3394 return cand;
3397 /* Create an overload candidate for the conversion function FN which will
3398 be invoked for expression OBJ, producing a pointer-to-function which
3399 will in turn be called with the argument list ARGLIST, and add it to
3400 CANDIDATES. FLAGS is passed on to implicit_conversion. */
3402 static struct z_candidate *
3403 add_conv_candidate (candidates, fn, obj, arglist)
3404 struct z_candidate *candidates;
3405 tree fn, obj, arglist;
3407 tree totype = TREE_TYPE (TREE_TYPE (fn));
3408 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
3409 int i, len = list_length (arglist) + 1;
3410 tree convs = make_tree_vec (len);
3411 tree parmnode = parmlist;
3412 tree argnode = arglist;
3413 int viable = 1;
3414 struct z_candidate *cand;
3415 int flags = LOOKUP_NORMAL;
3417 for (i = 0; i < len; ++i)
3419 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
3420 tree argtype = lvalue_type (arg);
3421 tree t;
3423 if (i == 0)
3424 t = implicit_conversion (totype, argtype, arg, flags);
3425 else if (parmnode == void_list_node)
3426 break;
3427 else if (parmnode)
3428 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3429 else
3431 t = build1 (IDENTITY_CONV, argtype, arg);
3432 ICS_ELLIPSIS_FLAG (t) = 1;
3435 TREE_VEC_ELT (convs, i) = t;
3436 if (! t)
3437 break;
3439 if (ICS_BAD_FLAG (t))
3440 viable = -1;
3442 if (i == 0)
3443 continue;
3445 if (parmnode)
3446 parmnode = TREE_CHAIN (parmnode);
3447 argnode = TREE_CHAIN (argnode);
3450 if (i < len)
3451 viable = 0;
3453 for (; parmnode && parmnode != void_list_node;
3454 parmnode = TREE_CHAIN (parmnode))
3455 if (! TREE_PURPOSE (parmnode))
3457 viable = 0;
3458 break;
3461 cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
3463 cand->fn = fn;
3464 cand->convs = convs;
3465 cand->second_conv = NULL_TREE;
3466 cand->viable = viable;
3467 cand->basetype_path = NULL_TREE;
3468 cand->template = NULL_TREE;
3469 cand->next = candidates;
3471 return cand;
3474 static struct z_candidate *
3475 build_builtin_candidate (candidates, fnname, type1, type2,
3476 args, argtypes, flags)
3477 struct z_candidate *candidates;
3478 tree fnname, type1, type2, *args, *argtypes;
3479 int flags;
3482 tree t, convs;
3483 int viable = 1, i;
3484 struct z_candidate *cand;
3485 tree types[2];
3487 types[0] = type1;
3488 types[1] = type2;
3490 convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
3492 for (i = 0; i < 2; ++i)
3494 if (! args[i])
3495 break;
3497 t = implicit_conversion (types[i], argtypes[i], args[i], flags);
3498 if (! t)
3500 viable = 0;
3501 /* We need something for printing the candidate. */
3502 t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
3504 else if (ICS_BAD_FLAG (t))
3505 viable = 0;
3506 TREE_VEC_ELT (convs, i) = t;
3509 /* For COND_EXPR we rearranged the arguments; undo that now. */
3510 if (args[2])
3512 TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
3513 TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
3514 t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
3515 if (t)
3516 TREE_VEC_ELT (convs, 0) = t;
3517 else
3518 viable = 0;
3521 cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
3523 cand->fn = fnname;
3524 cand->convs = convs;
3525 cand->second_conv = NULL_TREE;
3526 cand->viable = viable;
3527 cand->basetype_path = NULL_TREE;
3528 cand->template = NULL_TREE;
3529 cand->next = candidates;
3531 return cand;
3534 static int
3535 is_complete (t)
3536 tree t;
3538 return TYPE_SIZE (complete_type (t)) != NULL_TREE;
3541 /* Create any builtin operator overload candidates for the operator in
3542 question given the converted operand types TYPE1 and TYPE2. The other
3543 args are passed through from add_builtin_candidates to
3544 build_builtin_candidate. */
3546 static struct z_candidate *
3547 add_builtin_candidate (candidates, code, code2, fnname, type1, type2,
3548 args, argtypes, flags)
3549 struct z_candidate *candidates;
3550 enum tree_code code, code2;
3551 tree fnname, type1, type2, *args, *argtypes;
3552 int flags;
3554 switch (code)
3556 case POSTINCREMENT_EXPR:
3557 case POSTDECREMENT_EXPR:
3558 args[1] = integer_zero_node;
3559 type2 = integer_type_node;
3562 switch (code)
3565 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
3566 and VQ is either volatile or empty, there exist candidate operator
3567 functions of the form
3568 VQ T& operator++(VQ T&);
3569 T operator++(VQ T&, int);
3570 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
3571 type other than bool, and VQ is either volatile or empty, there exist
3572 candidate operator functions of the form
3573 VQ T& operator--(VQ T&);
3574 T operator--(VQ T&, int);
3575 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
3576 complete object type, and VQ is either volatile or empty, there exist
3577 candidate operator functions of the form
3578 T*VQ& operator++(T*VQ&);
3579 T*VQ& operator--(T*VQ&);
3580 T* operator++(T*VQ&, int);
3581 T* operator--(T*VQ&, int); */
3583 case POSTDECREMENT_EXPR:
3584 case PREDECREMENT_EXPR:
3585 if (TREE_CODE (type1) == BOOLEAN_TYPE)
3586 return candidates;
3587 case POSTINCREMENT_EXPR:
3588 case PREINCREMENT_EXPR:
3589 if ((ARITHMETIC_TYPE_P (type1) && TREE_CODE (type1) != ENUMERAL_TYPE)
3590 || TYPE_PTROB_P (type1))
3592 type1 = build_reference_type (type1);
3593 break;
3595 return candidates;
3597 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
3598 exist candidate operator functions of the form
3600 T& operator*(T*);
3602 8 For every function type T, there exist candidate operator functions of
3603 the form
3604 T& operator*(T*); */
3606 case INDIRECT_REF:
3607 if (TREE_CODE (type1) == POINTER_TYPE
3608 && (TYPE_PTROB_P (type1)
3609 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
3610 break;
3611 return candidates;
3613 /* 9 For every type T, there exist candidate operator functions of the form
3614 T* operator+(T*);
3616 10For every promoted arithmetic type T, there exist candidate operator
3617 functions of the form
3618 T operator+(T);
3619 T operator-(T); */
3621 case CONVERT_EXPR: /* unary + */
3622 if (TREE_CODE (type1) == POINTER_TYPE
3623 && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
3624 break;
3625 case NEGATE_EXPR:
3626 if (ARITHMETIC_TYPE_P (type1))
3627 break;
3628 return candidates;
3630 /* 11For every promoted integral type T, there exist candidate operator
3631 functions of the form
3632 T operator~(T); */
3634 case BIT_NOT_EXPR:
3635 if (INTEGRAL_TYPE_P (type1))
3636 break;
3637 return candidates;
3639 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
3640 is the same type as C2 or is a derived class of C2, T is a complete
3641 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3642 there exist candidate operator functions of the form
3643 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3644 where CV12 is the union of CV1 and CV2. */
3646 case MEMBER_REF:
3647 if (TREE_CODE (type1) == POINTER_TYPE
3648 && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
3650 tree c1 = TREE_TYPE (type1);
3651 tree c2 = (TYPE_PTRMEMFUNC_P (type2)
3652 ? TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2))
3653 : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
3655 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
3656 && (TYPE_PTRMEMFUNC_P (type2)
3657 || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
3658 break;
3660 return candidates;
3662 /* 13For every pair of promoted arithmetic types L and R, there exist can-
3663 didate operator functions of the form
3664 LR operator*(L, R);
3665 LR operator/(L, R);
3666 LR operator+(L, R);
3667 LR operator-(L, R);
3668 bool operator<(L, R);
3669 bool operator>(L, R);
3670 bool operator<=(L, R);
3671 bool operator>=(L, R);
3672 bool operator==(L, R);
3673 bool operator!=(L, R);
3674 where LR is the result of the usual arithmetic conversions between
3675 types L and R.
3677 14For every pair of types T and I, where T is a cv-qualified or cv-
3678 unqualified complete object type and I is a promoted integral type,
3679 there exist candidate operator functions of the form
3680 T* operator+(T*, I);
3681 T& operator[](T*, I);
3682 T* operator-(T*, I);
3683 T* operator+(I, T*);
3684 T& operator[](I, T*);
3686 15For every T, where T is a pointer to complete object type, there exist
3687 candidate operator functions of the form112)
3688 ptrdiff_t operator-(T, T);
3690 16For every pointer type T, there exist candidate operator functions of
3691 the form
3692 bool operator<(T, T);
3693 bool operator>(T, T);
3694 bool operator<=(T, T);
3695 bool operator>=(T, T);
3696 bool operator==(T, T);
3697 bool operator!=(T, T);
3699 17For every pointer to member type T, there exist candidate operator
3700 functions of the form
3701 bool operator==(T, T);
3702 bool operator!=(T, T); */
3704 case MINUS_EXPR:
3705 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
3706 break;
3707 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3709 type2 = ptrdiff_type_node;
3710 break;
3712 case MULT_EXPR:
3713 case TRUNC_DIV_EXPR:
3714 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3715 break;
3716 return candidates;
3718 case EQ_EXPR:
3719 case NE_EXPR:
3720 if (TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2)
3721 || TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3722 break;
3723 if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
3724 && null_ptr_cst_p (args[1]))
3726 type2 = type1;
3727 break;
3729 if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
3730 && null_ptr_cst_p (args[0]))
3732 type1 = type2;
3733 break;
3735 case LT_EXPR:
3736 case GT_EXPR:
3737 case LE_EXPR:
3738 case GE_EXPR:
3739 case MAX_EXPR:
3740 case MIN_EXPR:
3741 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2)
3742 || TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3743 break;
3744 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
3746 type2 = type1;
3747 break;
3749 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
3751 type1 = type2;
3752 break;
3754 return candidates;
3756 case PLUS_EXPR:
3757 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3758 break;
3759 case ARRAY_REF:
3760 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
3762 type1 = ptrdiff_type_node;
3763 break;
3765 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3767 type2 = ptrdiff_type_node;
3768 break;
3770 return candidates;
3772 /* 18For every pair of promoted integral types L and R, there exist candi-
3773 date operator functions of the form
3774 LR operator%(L, R);
3775 LR operator&(L, R);
3776 LR operator^(L, R);
3777 LR operator|(L, R);
3778 L operator<<(L, R);
3779 L operator>>(L, R);
3780 where LR is the result of the usual arithmetic conversions between
3781 types L and R. */
3783 case TRUNC_MOD_EXPR:
3784 case BIT_AND_EXPR:
3785 case BIT_IOR_EXPR:
3786 case BIT_XOR_EXPR:
3787 case LSHIFT_EXPR:
3788 case RSHIFT_EXPR:
3789 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3790 break;
3791 return candidates;
3793 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
3794 type, VQ is either volatile or empty, and R is a promoted arithmetic
3795 type, there exist candidate operator functions of the form
3796 VQ L& operator=(VQ L&, R);
3797 VQ L& operator*=(VQ L&, R);
3798 VQ L& operator/=(VQ L&, R);
3799 VQ L& operator+=(VQ L&, R);
3800 VQ L& operator-=(VQ L&, R);
3802 20For every pair T, VQ), where T is any type and VQ is either volatile
3803 or empty, there exist candidate operator functions of the form
3804 T*VQ& operator=(T*VQ&, T*);
3806 21For every pair T, VQ), where T is a pointer to member type and VQ is
3807 either volatile or empty, there exist candidate operator functions of
3808 the form
3809 VQ T& operator=(VQ T&, T);
3811 22For every triple T, VQ, I), where T is a cv-qualified or cv-
3812 unqualified complete object type, VQ is either volatile or empty, and
3813 I is a promoted integral type, there exist candidate operator func-
3814 tions of the form
3815 T*VQ& operator+=(T*VQ&, I);
3816 T*VQ& operator-=(T*VQ&, I);
3818 23For every triple L, VQ, R), where L is an integral or enumeration
3819 type, VQ is either volatile or empty, and R is a promoted integral
3820 type, there exist candidate operator functions of the form
3822 VQ L& operator%=(VQ L&, R);
3823 VQ L& operator<<=(VQ L&, R);
3824 VQ L& operator>>=(VQ L&, R);
3825 VQ L& operator&=(VQ L&, R);
3826 VQ L& operator^=(VQ L&, R);
3827 VQ L& operator|=(VQ L&, R); */
3829 case MODIFY_EXPR:
3830 switch (code2)
3832 case PLUS_EXPR:
3833 case MINUS_EXPR:
3834 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3836 type2 = ptrdiff_type_node;
3837 break;
3839 case MULT_EXPR:
3840 case TRUNC_DIV_EXPR:
3841 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3842 break;
3843 return candidates;
3845 case TRUNC_MOD_EXPR:
3846 case BIT_AND_EXPR:
3847 case BIT_IOR_EXPR:
3848 case BIT_XOR_EXPR:
3849 case LSHIFT_EXPR:
3850 case RSHIFT_EXPR:
3851 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3852 break;
3853 return candidates;
3855 case NOP_EXPR:
3856 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3857 break;
3858 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
3859 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3860 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3861 || ((TYPE_PTRMEMFUNC_P (type1)
3862 || TREE_CODE (type1) == POINTER_TYPE)
3863 && null_ptr_cst_p (args[1])))
3865 type2 = type1;
3866 break;
3868 return candidates;
3870 default:
3871 my_friendly_abort (367);
3873 type1 = build_reference_type (type1);
3874 break;
3876 case COND_EXPR:
3877 /* Kludge around broken overloading rules whereby
3878 bool ? const char& : enum is ambiguous
3879 (between int and const char&). */
3880 flags |= LOOKUP_NO_TEMP_BIND;
3882 /* Extension: Support ?: of enumeral type. Hopefully this will not
3883 be an extension for long. */
3884 if (TREE_CODE (type1) == ENUMERAL_TYPE && type1 == type2)
3885 break;
3886 else if (TREE_CODE (type1) == ENUMERAL_TYPE
3887 || TREE_CODE (type2) == ENUMERAL_TYPE)
3888 return candidates;
3889 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3890 break;
3891 if (TREE_CODE (type1) == TREE_CODE (type2)
3892 && (TREE_CODE (type1) == REFERENCE_TYPE
3893 || TREE_CODE (type1) == POINTER_TYPE
3894 || TYPE_PTRMEMFUNC_P (type1)
3895 || IS_AGGR_TYPE (type1)))
3896 break;
3897 if (TREE_CODE (type1) == REFERENCE_TYPE
3898 || TREE_CODE (type2) == REFERENCE_TYPE)
3899 return candidates;
3900 if (((TYPE_PTRMEMFUNC_P (type1) || TREE_CODE (type1) == POINTER_TYPE)
3901 && null_ptr_cst_p (args[1]))
3902 || IS_AGGR_TYPE (type1))
3904 type2 = type1;
3905 break;
3907 if (((TYPE_PTRMEMFUNC_P (type2) || TREE_CODE (type2) == POINTER_TYPE)
3908 && null_ptr_cst_p (args[0]))
3909 || IS_AGGR_TYPE (type2))
3911 type1 = type2;
3912 break;
3914 return candidates;
3916 default:
3917 my_friendly_abort (367);
3920 /* If we're dealing with two pointer types, we need candidates
3921 for both of them. */
3922 if (type2 && type1 != type2
3923 && TREE_CODE (type1) == TREE_CODE (type2)
3924 && (TREE_CODE (type1) == REFERENCE_TYPE
3925 || (TREE_CODE (type1) == POINTER_TYPE
3926 && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
3927 || TYPE_PTRMEMFUNC_P (type1)
3928 || IS_AGGR_TYPE (type1)))
3930 candidates = build_builtin_candidate
3931 (candidates, fnname, type1, type1, args, argtypes, flags);
3932 return build_builtin_candidate
3933 (candidates, fnname, type2, type2, args, argtypes, flags);
3936 return build_builtin_candidate
3937 (candidates, fnname, type1, type2, args, argtypes, flags);
3940 tree
3941 type_decays_to (type)
3942 tree type;
3944 if (TREE_CODE (type) == ARRAY_TYPE)
3945 return build_pointer_type (TREE_TYPE (type));
3946 if (TREE_CODE (type) == FUNCTION_TYPE)
3947 return build_pointer_type (type);
3948 return type;
3951 /* There are three conditions of builtin candidates:
3953 1) bool-taking candidates. These are the same regardless of the input.
3954 2) pointer-pair taking candidates. These are generated for each type
3955 one of the input types converts to.
3956 3) arithmetic candidates. According to the WP, we should generate
3957 all of these, but I'm trying not to... */
3959 static struct z_candidate *
3960 add_builtin_candidates (candidates, code, code2, fnname, args, flags)
3961 struct z_candidate *candidates;
3962 enum tree_code code, code2;
3963 tree fnname, *args;
3964 int flags;
3966 int ref1, i;
3967 tree type, argtypes[3], types[2];
3969 for (i = 0; i < 3; ++i)
3971 if (args[i])
3972 argtypes[i] = lvalue_type (args[i]);
3973 else
3974 argtypes[i] = NULL_TREE;
3977 switch (code)
3979 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
3980 and VQ is either volatile or empty, there exist candidate operator
3981 functions of the form
3982 VQ T& operator++(VQ T&); */
3984 case POSTINCREMENT_EXPR:
3985 case PREINCREMENT_EXPR:
3986 case POSTDECREMENT_EXPR:
3987 case PREDECREMENT_EXPR:
3988 case MODIFY_EXPR:
3989 ref1 = 1;
3990 break;
3992 /* 24There also exist candidate operator functions of the form
3993 bool operator!(bool);
3994 bool operator&&(bool, bool);
3995 bool operator||(bool, bool); */
3997 case TRUTH_NOT_EXPR:
3998 return build_builtin_candidate
3999 (candidates, fnname, boolean_type_node,
4000 NULL_TREE, args, argtypes, flags);
4002 case TRUTH_ORIF_EXPR:
4003 case TRUTH_ANDIF_EXPR:
4004 return build_builtin_candidate
4005 (candidates, fnname, boolean_type_node,
4006 boolean_type_node, args, argtypes, flags);
4008 case ADDR_EXPR:
4009 case COMPOUND_EXPR:
4010 case COMPONENT_REF:
4011 return candidates;
4013 default:
4014 ref1 = 0;
4017 types[0] = types[1] = NULL_TREE;
4019 for (i = 0; i < 2; ++i)
4021 if (! args[i])
4023 else if (IS_AGGR_TYPE (argtypes[i]))
4025 tree convs = lookup_conversions (argtypes[i]);
4027 if (code == COND_EXPR)
4029 if (real_lvalue_p (args[i]))
4030 types[i] = tree_cons
4031 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4033 types[i] = tree_cons
4034 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
4037 else if (! convs || (i == 0 && code == MODIFY_EXPR
4038 && code2 == NOP_EXPR))
4039 return candidates;
4041 for (; convs; convs = TREE_CHAIN (convs))
4043 type = TREE_TYPE (TREE_TYPE (TREE_VALUE (convs)));
4045 if (i == 0 && ref1
4046 && (TREE_CODE (type) != REFERENCE_TYPE
4047 || TYPE_READONLY (TREE_TYPE (type))))
4048 continue;
4050 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
4051 types[i] = tree_cons (NULL_TREE, type, types[i]);
4053 type = non_reference (type);
4054 if (i != 0 || ! ref1)
4056 type = TYPE_MAIN_VARIANT (type_decays_to (type));
4057 if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4058 types[i] = tree_cons (NULL_TREE, type, types[i]);
4059 if (INTEGRAL_TYPE_P (type))
4060 type = type_promotes_to (type);
4063 if (! value_member (type, types[i]))
4064 types[i] = tree_cons (NULL_TREE, type, types[i]);
4067 else
4069 if (code == COND_EXPR && real_lvalue_p (args[i]))
4070 types[i] = tree_cons
4071 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4072 type = non_reference (argtypes[i]);
4073 if (i != 0 || ! ref1)
4075 type = TYPE_MAIN_VARIANT (type_decays_to (type));
4076 if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4077 types[i] = tree_cons (NULL_TREE, type, types[i]);
4078 if (INTEGRAL_TYPE_P (type))
4079 type = type_promotes_to (type);
4081 types[i] = tree_cons (NULL_TREE, type, types[i]);
4085 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
4087 if (types[1])
4088 for (type = types[1]; type; type = TREE_CHAIN (type))
4089 candidates = add_builtin_candidate
4090 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4091 TREE_VALUE (type), args, argtypes, flags);
4092 else
4093 candidates = add_builtin_candidate
4094 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4095 NULL_TREE, args, argtypes, flags);
4098 return candidates;
4101 static struct z_candidate *
4102 add_template_candidate (candidates, tmpl, arglist, flags)
4103 struct z_candidate *candidates;
4104 tree tmpl, arglist;
4105 int flags;
4107 int ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (tmpl));
4108 tree *targs = (tree *) alloca (sizeof (tree) * ntparms);
4109 struct z_candidate *cand;
4110 int i, dummy = 0;
4111 tree fn;
4113 i = type_unification (DECL_TEMPLATE_PARMS (tmpl), targs,
4114 TYPE_ARG_TYPES (TREE_TYPE (tmpl)),
4115 arglist, &dummy, 0, 0);
4116 if (i != 0)
4117 return candidates;
4119 fn = instantiate_template (tmpl, targs);
4120 if (fn == error_mark_node)
4121 return candidates;
4123 cand = add_function_candidate (candidates, fn, arglist, flags);
4124 cand->template = DECL_TEMPLATE_INFO (fn);
4125 return cand;
4128 static int
4129 any_viable (cands)
4130 struct z_candidate *cands;
4132 for (; cands; cands = cands->next)
4133 if (pedantic ? cands->viable == 1 : cands->viable)
4134 return 1;
4135 return 0;
4138 static struct z_candidate *
4139 splice_viable (cands)
4140 struct z_candidate *cands;
4142 struct z_candidate **p = &cands;
4144 for (; *p; )
4146 if (pedantic ? (*p)->viable == 1 : (*p)->viable)
4147 p = &((*p)->next);
4148 else
4149 *p = (*p)->next;
4152 return cands;
4155 static tree
4156 build_this (obj)
4157 tree obj;
4159 /* Fix this to work on non-lvalues. */
4160 if (IS_SIGNATURE_POINTER (TREE_TYPE (obj))
4161 || IS_SIGNATURE_REFERENCE (TREE_TYPE (obj)))
4162 return obj;
4163 else
4164 return build_unary_op (ADDR_EXPR, obj, 0);
4167 static void
4168 print_z_candidates (candidates)
4169 struct z_candidate *candidates;
4171 char *str = "candidates are:";
4172 for (; candidates; candidates = candidates->next)
4174 if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
4176 if (candidates->fn == ansi_opname [COND_EXPR])
4177 cp_error ("%s %D(%T, %T, %T) <builtin>", str, candidates->fn,
4178 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4179 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
4180 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
4181 else if (TREE_VEC_LENGTH (candidates->convs) == 2)
4182 cp_error ("%s %D(%T, %T) <builtin>", str, candidates->fn,
4183 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4184 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
4185 else
4186 cp_error ("%s %D(%T) <builtin>", str, candidates->fn,
4187 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
4189 else
4190 cp_error_at ("%s %+D%s", str, candidates->fn,
4191 candidates->viable == -1 ? " <near match>" : "");
4192 str = " ";
4196 /* Returns the best overload candidate to perform the requested
4197 conversion. This function is used for three the overloading situations
4198 described in [over.match.copy], [over.match.conv], and [over.match.ref].
4199 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
4200 per [dcl.init.ref], so we ignore temporary bindings. */
4202 static struct z_candidate *
4203 build_user_type_conversion_1 (totype, expr, flags)
4204 tree totype, expr;
4205 int flags;
4207 struct z_candidate *candidates, *cand;
4208 tree fromtype = TREE_TYPE (expr);
4209 tree ctors = NULL_TREE, convs = NULL_TREE, *p;
4210 tree args;
4212 if (IS_AGGR_TYPE (totype))
4213 ctors = lookup_fnfields (TYPE_BINFO (totype), ctor_identifier, 0);
4214 if (IS_AGGR_TYPE (fromtype)
4215 && (! IS_AGGR_TYPE (totype) || ! DERIVED_FROM_P (totype, fromtype)))
4216 convs = lookup_conversions (fromtype);
4218 candidates = 0;
4219 flags |= LOOKUP_NO_CONVERSION;
4221 if (ctors)
4223 tree t = build_int_2 (0, 0);
4224 TREE_TYPE (t) = build_pointer_type (totype);
4225 args = build_tree_list (NULL_TREE, expr);
4226 if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
4227 args = tree_cons (NULL_TREE, integer_one_node, args);
4228 args = tree_cons (NULL_TREE, t, args);
4230 ctors = TREE_VALUE (ctors);
4232 for (; ctors; ctors = DECL_CHAIN (ctors))
4234 if (DECL_NONCONVERTING_P (ctors))
4235 continue;
4237 candidates = add_function_candidate (candidates, ctors, args, flags);
4238 candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
4239 candidates->basetype_path = TYPE_BINFO (totype);
4242 if (convs)
4243 args = build_tree_list (NULL_TREE, build_this (expr));
4245 for (; convs; convs = TREE_CHAIN (convs))
4247 tree fn = TREE_VALUE (convs);
4248 int convflags = LOOKUP_NO_CONVERSION;
4249 tree ics;
4251 /* If we are called to convert to a reference type, we are trying to
4252 find an lvalue binding, so don't even consider temporaries. If
4253 we don't find an lvalue binding, the caller will try again to
4254 look for a temporary binding. */
4255 if (TREE_CODE (totype) == REFERENCE_TYPE)
4256 convflags |= LOOKUP_NO_TEMP_BIND;
4258 ics = implicit_conversion
4259 (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
4261 if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
4262 /* ignore the near match. */;
4263 else if (ics)
4264 for (; fn; fn = DECL_CHAIN (fn))
4266 candidates = add_function_candidate (candidates, fn, args, flags);
4267 candidates->second_conv = ics;
4268 candidates->basetype_path = TREE_PURPOSE (convs);
4269 if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
4270 candidates->viable = -1;
4274 if (! any_viable (candidates))
4276 #if 0
4277 if (flags & LOOKUP_COMPLAIN)
4279 if (candidates && ! candidates->next)
4280 /* say why this one won't work or try to be loose */;
4281 else
4282 cp_error ("no viable candidates");
4284 #endif
4286 return 0;
4289 candidates = splice_viable (candidates);
4290 cand = tourney (candidates, totype);
4292 if (cand == 0)
4294 if (flags & LOOKUP_COMPLAIN)
4296 cp_error ("conversion from `%T' to `%T' is ambiguous",
4297 fromtype, totype);
4298 print_z_candidates (candidates);
4301 cand = candidates; /* any one will do */
4302 cand->second_conv = build1 (AMBIG_CONV, totype, expr);
4303 ICS_USER_FLAG (cand->second_conv) = 1;
4304 ICS_BAD_FLAG (cand->second_conv) = 1;
4306 return cand;
4309 for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
4310 p = &(TREE_OPERAND (*p, 0));
4312 *p = build
4313 (USER_CONV,
4314 (DECL_CONSTRUCTOR_P (cand->fn)
4315 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
4316 NULL_TREE, cand->fn, cand->convs, cand->basetype_path);
4317 ICS_USER_FLAG (cand->second_conv) = 1;
4318 if (cand->viable == -1)
4319 ICS_BAD_FLAG (cand->second_conv) = 1;
4321 return cand;
4324 tree
4325 build_user_type_conversion (totype, expr, flags)
4326 tree totype, expr;
4327 int flags;
4329 struct z_candidate *cand
4330 = build_user_type_conversion_1 (totype, expr, flags);
4332 if (cand)
4334 if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
4335 return error_mark_node;
4336 return convert_from_reference (convert_like (cand->second_conv, expr));
4338 return NULL_TREE;
4341 /* Do any initial processing on the arguments to a function call. */
4343 static tree
4344 resolve_args (args)
4345 tree args;
4347 tree t;
4348 for (t = args; t; t = TREE_CHAIN (t))
4350 if (TREE_VALUE (t) == error_mark_node)
4351 return error_mark_node;
4352 else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
4354 error ("invalid use of void expression");
4355 return error_mark_node;
4357 else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
4358 TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
4360 return args;
4363 tree
4364 build_new_function_call (fn, args, obj)
4365 tree fn, args, obj;
4367 struct z_candidate *candidates = 0, *cand;
4369 if (obj == NULL_TREE && TREE_CODE (fn) == TREE_LIST)
4371 tree t;
4372 tree templates = NULL_TREE;
4374 args = resolve_args (args);
4376 if (args == error_mark_node)
4377 return error_mark_node;
4379 for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
4381 if (TREE_CODE (t) == TEMPLATE_DECL)
4383 templates = decl_tree_cons (NULL_TREE, t, templates);
4384 candidates = add_template_candidate
4385 (candidates, t, args, LOOKUP_NORMAL);
4387 else
4388 candidates = add_function_candidate
4389 (candidates, t, args, LOOKUP_NORMAL);
4392 if (! any_viable (candidates))
4394 if (candidates && ! candidates->next)
4395 return build_function_call (candidates->fn, args);
4396 cp_error ("no matching function for call to `%D (%A)'",
4397 TREE_PURPOSE (fn), args);
4398 if (candidates)
4399 print_z_candidates (candidates);
4400 return error_mark_node;
4402 candidates = splice_viable (candidates);
4403 cand = tourney (candidates, NULL_TREE);
4405 if (cand == 0)
4407 cp_error ("call of overloaded `%D (%A)' is ambiguous",
4408 TREE_PURPOSE (fn), args);
4409 print_z_candidates (candidates);
4410 return error_mark_node;
4413 /* Pedantically, it is ill-formed to define a function that could
4414 also be a template instantiation, but we won't implement that
4415 until things settle down. */
4416 if (templates && ! cand->template && ! DECL_INITIAL (cand->fn))
4417 add_maybe_template (cand->fn, templates);
4419 return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
4422 return build_function_call (fn, args);
4425 static tree
4426 build_object_call (obj, args)
4427 tree obj, args;
4429 struct z_candidate *candidates = 0, *cand;
4430 tree fns, convs, mem_args;
4431 tree type = TREE_TYPE (obj);
4433 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
4435 args = resolve_args (args);
4437 if (args == error_mark_node)
4438 return error_mark_node;
4440 if (fns)
4442 tree fn = TREE_VALUE (fns);
4443 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
4445 for (; fn; fn = DECL_CHAIN (fn))
4447 candidates = add_function_candidate
4448 (candidates, fn, mem_args, LOOKUP_NORMAL);
4449 candidates->basetype_path = TREE_PURPOSE (fns);
4453 convs = lookup_conversions (type);
4455 for (; convs; convs = TREE_CHAIN (convs))
4457 tree fn = TREE_VALUE (convs);
4458 tree totype = TREE_TYPE (TREE_TYPE (fn));
4460 if (TREE_CODE (totype) == POINTER_TYPE
4461 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4462 for (; fn; fn = DECL_CHAIN (fn))
4464 candidates = add_conv_candidate (candidates, fn, obj, args);
4465 candidates->basetype_path = TREE_PURPOSE (convs);
4469 if (! any_viable (candidates))
4471 cp_error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
4472 print_z_candidates (candidates);
4473 return error_mark_node;
4476 candidates = splice_viable (candidates);
4477 cand = tourney (candidates, NULL_TREE);
4479 if (cand == 0)
4481 cp_error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
4482 print_z_candidates (candidates);
4483 return error_mark_node;
4486 if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
4487 return build_over_call (cand->fn, cand->convs, mem_args, LOOKUP_NORMAL);
4489 obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
4491 /* FIXME */
4492 return build_function_call (obj, args);
4495 static void
4496 op_error (code, code2, arg1, arg2, arg3, problem)
4497 enum tree_code code, code2;
4498 tree arg1, arg2, arg3;
4499 char *problem;
4501 char * opname
4502 = (code == MODIFY_EXPR ? assignop_tab [code2] : opname_tab [code]);
4504 switch (code)
4506 case COND_EXPR:
4507 cp_error ("%s for `%T ? %T : %T'", problem,
4508 error_type (arg1), error_type (arg2), error_type (arg3));
4509 break;
4510 case POSTINCREMENT_EXPR:
4511 case POSTDECREMENT_EXPR:
4512 cp_error ("%s for `%T%s'", problem, error_type (arg1), opname);
4513 break;
4514 case ARRAY_REF:
4515 cp_error ("%s for `%T[%T]'", problem,
4516 error_type (arg1), error_type (arg2));
4517 break;
4518 default:
4519 if (arg2)
4520 cp_error ("%s for `%T %s %T'", problem,
4521 error_type (arg1), opname, error_type (arg2));
4522 else
4523 cp_error ("%s for `%s%T'", problem, opname, error_type (arg1));
4527 tree
4528 build_new_op (code, flags, arg1, arg2, arg3)
4529 enum tree_code code;
4530 int flags;
4531 tree arg1, arg2, arg3;
4533 struct z_candidate *candidates = 0, *cand;
4534 tree fns, mem_arglist, arglist, fnname;
4535 enum tree_code code2 = NOP_EXPR;
4536 tree templates = NULL_TREE;
4538 if (arg1 == error_mark_node
4539 || arg2 == error_mark_node
4540 || arg3 == error_mark_node)
4541 return error_mark_node;
4543 if (code == MODIFY_EXPR)
4545 code2 = TREE_CODE (arg3);
4546 arg3 = NULL_TREE;
4547 fnname = ansi_assopname[code2];
4549 else
4550 fnname = ansi_opname[code];
4552 switch (code)
4554 case NEW_EXPR:
4555 case VEC_NEW_EXPR:
4557 tree rval;
4559 arglist = tree_cons (NULL_TREE, arg2, arg3);
4560 if (flags & LOOKUP_GLOBAL)
4561 return build_new_function_call
4562 (lookup_name_nonclass (fnname), arglist, NULL_TREE);
4564 /* FIXME */
4565 rval = build_method_call
4566 (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node),
4567 "new"),
4568 fnname, arglist, NULL_TREE, flags);
4569 if (rval == error_mark_node)
4570 /* User might declare fancy operator new, but invoke it
4571 like standard one. */
4572 return rval;
4574 TREE_TYPE (rval) = arg1;
4575 TREE_CALLS_NEW (rval) = 1;
4576 return rval;
4579 case VEC_DELETE_EXPR:
4580 case DELETE_EXPR:
4582 tree rval;
4584 if (flags & LOOKUP_GLOBAL)
4585 return build_new_function_call
4586 (lookup_name_nonclass (fnname),
4587 build_tree_list (NULL_TREE, arg1), NULL_TREE);
4589 arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
4591 arg1 = TREE_TYPE (arg1);
4593 /* This handles the case where we're trying to delete
4594 X (*a)[10];
4595 a=new X[5][10];
4596 delete[] a; */
4598 if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
4600 /* Strip off the pointer and the array. */
4601 arg1 = TREE_TYPE (TREE_TYPE (arg1));
4603 while (TREE_CODE (arg1) == ARRAY_TYPE)
4604 arg1 = (TREE_TYPE (arg1));
4606 arg1 = build_pointer_type (arg1);
4609 /* FIXME */
4610 rval = build_method_call
4611 (build_indirect_ref (build1 (NOP_EXPR, arg1,
4612 error_mark_node),
4613 NULL_PTR),
4614 fnname, arglist, NULL_TREE, flags);
4615 #if 0
4616 /* This can happen when operator delete is protected. */
4617 my_friendly_assert (rval != error_mark_node, 250);
4618 TREE_TYPE (rval) = void_type_node;
4619 #endif
4620 return rval;
4623 case CALL_EXPR:
4624 return build_object_call (arg1, arg2);
4627 /* The comma operator can have void args. */
4628 if (TREE_CODE (arg1) == OFFSET_REF)
4629 arg1 = resolve_offset_ref (arg1);
4630 if (arg2 && TREE_CODE (arg2) == OFFSET_REF)
4631 arg2 = resolve_offset_ref (arg2);
4632 if (arg3 && TREE_CODE (arg3) == OFFSET_REF)
4633 arg3 = resolve_offset_ref (arg3);
4635 if (code == COND_EXPR)
4637 if (arg2 == NULL_TREE
4638 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4639 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4640 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4641 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4642 goto builtin;
4644 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4645 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4646 goto builtin;
4648 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4649 arg2 = integer_zero_node;
4651 fns = lookup_name_nonclass (fnname);
4652 /* + Koenig lookup */
4654 if (arg2 && arg3)
4655 arglist = tree_cons (NULL_TREE, arg1, tree_cons
4656 (NULL_TREE, arg2, build_tree_list (NULL_TREE, arg3)));
4657 else if (arg2)
4658 arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
4659 else
4660 arglist = build_tree_list (NULL_TREE, arg1);
4662 if (fns && TREE_CODE (fns) == TREE_LIST)
4663 fns = TREE_VALUE (fns);
4664 for (; fns; fns = DECL_CHAIN (fns))
4666 if (TREE_CODE (fns) == TEMPLATE_DECL)
4668 templates = decl_tree_cons (NULL_TREE, fns, templates);
4669 candidates = add_template_candidate
4670 (candidates, fns, arglist, flags);
4672 else
4673 candidates = add_function_candidate (candidates, fns, arglist, flags);
4676 if (IS_AGGR_TYPE (TREE_TYPE (arg1)))
4677 fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 0);
4678 else
4679 fns = NULL_TREE;
4681 if (fns)
4683 tree fn = TREE_VALUE (fns);
4684 mem_arglist = tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
4685 for (; fn; fn = DECL_CHAIN (fn))
4687 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4688 candidates = add_function_candidate
4689 (candidates, fn, mem_arglist, flags);
4690 else
4691 candidates = add_function_candidate (candidates, fn, arglist, flags);
4693 candidates->basetype_path = TREE_PURPOSE (fns);
4698 tree args[3];
4700 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4701 to know about two args; a builtin candidate will always have a first
4702 parameter of type bool. We'll handle that in
4703 build_builtin_candidate. */
4704 if (code == COND_EXPR)
4706 args[0] = arg2;
4707 args[1] = arg3;
4708 args[2] = arg1;
4710 else
4712 args[0] = arg1;
4713 args[1] = arg2;
4714 args[2] = NULL_TREE;
4717 candidates = add_builtin_candidates
4718 (candidates, code, code2, fnname, args, flags);
4721 if (! any_viable (candidates))
4723 switch (code)
4725 case POSTINCREMENT_EXPR:
4726 case POSTDECREMENT_EXPR:
4727 /* Look for an `operator++ (int)'. If they didn't have
4728 one, then we fall back to the old way of doing things. */
4729 if (flags & LOOKUP_COMPLAIN)
4730 cp_pedwarn ("no `%D (int)' declared for postfix `%s', trying prefix operator instead",
4731 fnname, opname_tab [code]);
4732 if (code == POSTINCREMENT_EXPR)
4733 code = PREINCREMENT_EXPR;
4734 else
4735 code = PREDECREMENT_EXPR;
4736 return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
4738 /* The caller will deal with these. */
4739 case ADDR_EXPR:
4740 case COMPOUND_EXPR:
4741 case COMPONENT_REF:
4742 return NULL_TREE;
4744 if (flags & LOOKUP_COMPLAIN)
4746 op_error (code, code2, arg1, arg2, arg3, "no match");
4747 print_z_candidates (candidates);
4749 return error_mark_node;
4751 candidates = splice_viable (candidates);
4752 cand = tourney (candidates, NULL_TREE);
4754 if (cand == 0)
4756 if (flags & LOOKUP_COMPLAIN)
4758 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4759 print_z_candidates (candidates);
4761 return error_mark_node;
4764 if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4766 extern int warn_synth;
4767 if (warn_synth
4768 && fnname == ansi_opname[MODIFY_EXPR]
4769 && DECL_ARTIFICIAL (cand->fn)
4770 && candidates->next
4771 && ! candidates->next->next)
4773 cp_warning ("using synthesized `%#D' for copy assignment",
4774 cand->fn);
4775 cp_warning_at (" where cfront would use `%#D'",
4776 cand == candidates
4777 ? candidates->next->fn
4778 : candidates->fn);
4781 if (DECL_FUNCTION_MEMBER_P (cand->fn))
4782 enforce_access (cand->basetype_path, cand->fn);
4784 /* Pedantically, it is ill-formed to define a function that could
4785 also be a template instantiation, but we won't implement that
4786 until things settle down. */
4787 if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)
4788 && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4789 add_maybe_template (cand->fn, templates);
4791 return build_over_call
4792 (cand->fn, cand->convs,
4793 TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
4794 ? mem_arglist : arglist,
4795 LOOKUP_NORMAL);
4798 /* Check for comparison of different enum types. */
4799 switch (code)
4801 case GT_EXPR:
4802 case LT_EXPR:
4803 case GE_EXPR:
4804 case LE_EXPR:
4805 case EQ_EXPR:
4806 case NE_EXPR:
4807 if (flag_int_enum_equivalence == 0
4808 && TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4809 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4810 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4811 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
4813 cp_warning ("comparison between `%#T' and `%#T'",
4814 TREE_TYPE (arg1), TREE_TYPE (arg2));
4818 arg1 = convert_from_reference
4819 (convert_like (TREE_VEC_ELT (cand->convs, 0), arg1));
4820 if (arg2)
4821 arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
4822 if (arg3)
4823 arg3 = convert_like (TREE_VEC_ELT (cand->convs, 2), arg3);
4825 builtin:
4826 switch (code)
4828 case MODIFY_EXPR:
4829 return build_modify_expr (arg1, code2, arg2);
4831 case INDIRECT_REF:
4832 return build_indirect_ref (arg1, "unary *");
4834 case PLUS_EXPR:
4835 case MINUS_EXPR:
4836 case MULT_EXPR:
4837 case TRUNC_DIV_EXPR:
4838 case GT_EXPR:
4839 case LT_EXPR:
4840 case GE_EXPR:
4841 case LE_EXPR:
4842 case EQ_EXPR:
4843 case NE_EXPR:
4844 case MAX_EXPR:
4845 case MIN_EXPR:
4846 case LSHIFT_EXPR:
4847 case RSHIFT_EXPR:
4848 case TRUNC_MOD_EXPR:
4849 case BIT_AND_EXPR:
4850 case BIT_IOR_EXPR:
4851 case BIT_XOR_EXPR:
4852 case TRUTH_ANDIF_EXPR:
4853 case TRUTH_ORIF_EXPR:
4854 return build_binary_op_nodefault (code, arg1, arg2, code);
4856 case CONVERT_EXPR:
4857 case NEGATE_EXPR:
4858 case BIT_NOT_EXPR:
4859 case TRUTH_NOT_EXPR:
4860 case PREINCREMENT_EXPR:
4861 case POSTINCREMENT_EXPR:
4862 case PREDECREMENT_EXPR:
4863 case POSTDECREMENT_EXPR:
4864 case REALPART_EXPR:
4865 case IMAGPART_EXPR:
4866 return build_unary_op (code, arg1, candidates != 0);
4868 case ARRAY_REF:
4869 return build_array_ref (arg1, arg2);
4871 case COND_EXPR:
4872 return build_conditional_expr (arg1, arg2, arg3);
4874 case MEMBER_REF:
4875 return build_m_component_ref
4876 (build_indirect_ref (arg1, NULL_PTR), arg2);
4878 /* The caller will deal with these. */
4879 case ADDR_EXPR:
4880 case COMPONENT_REF:
4881 case COMPOUND_EXPR:
4882 return NULL_TREE;
4884 default:
4885 my_friendly_abort (367);
4889 static void
4890 enforce_access (basetype_path, function)
4891 tree basetype_path, function;
4893 tree access = compute_access (basetype_path, function);
4895 if (access == access_private_node)
4897 cp_error_at ("`%+#D' is %s", function,
4898 TREE_PRIVATE (function) ? "private"
4899 : "from private base class");
4900 error ("within this context");
4902 else if (access == access_protected_node)
4904 cp_error_at ("`%+#D' %s", function,
4905 TREE_PROTECTED (function) ? "is protected"
4906 : "has protected accessibility");
4907 error ("within this context");
4911 /* Perform the conversions in CONVS on the expression EXPR. */
4913 static tree
4914 convert_like (convs, expr)
4915 tree convs, expr;
4917 if (ICS_BAD_FLAG (convs)
4918 && TREE_CODE (convs) != USER_CONV
4919 && TREE_CODE (convs) != AMBIG_CONV)
4921 tree t = convs;
4922 for (; t; t = TREE_OPERAND (t, 0))
4924 if (TREE_CODE (t) == USER_CONV)
4926 expr = convert_like (t, expr);
4927 break;
4929 else if (TREE_CODE (t) == AMBIG_CONV)
4930 return convert_like (t, expr);
4931 else if (TREE_CODE (t) == IDENTITY_CONV)
4932 break;
4934 return convert_for_initialization
4935 (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
4936 "conversion", NULL_TREE, 0);
4939 switch (TREE_CODE (convs))
4941 case USER_CONV:
4943 tree fn = TREE_OPERAND (convs, 1);
4944 tree args;
4945 enforce_access (TREE_OPERAND (convs, 3), fn);
4947 if (DECL_CONSTRUCTOR_P (fn))
4949 tree t = build_int_2 (0, 0);
4950 TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
4952 args = build_tree_list (NULL_TREE, expr);
4953 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
4954 args = tree_cons (NULL_TREE, integer_one_node, args);
4955 args = tree_cons (NULL_TREE, t, args);
4957 else
4958 args = build_this (expr);
4959 expr = build_over_call
4960 (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
4961 args, LOOKUP_NORMAL);
4963 /* If this is a constructor or a function returning an aggr type,
4964 we need to build up a TARGET_EXPR. */
4965 if (DECL_CONSTRUCTOR_P (fn))
4966 expr = build_cplus_new (TREE_TYPE (convs), expr);
4968 return expr;
4970 case IDENTITY_CONV:
4971 if (type_unknown_p (expr))
4972 expr = instantiate_type (TREE_TYPE (convs), expr, 1);
4973 if (TREE_READONLY_DECL_P (expr))
4974 expr = decl_constant_value (expr);
4975 return expr;
4976 case AMBIG_CONV:
4977 /* Call build_user_type_conversion again for the error. */
4978 return build_user_type_conversion
4979 (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
4982 expr = convert_like (TREE_OPERAND (convs, 0), expr);
4983 if (expr == error_mark_node)
4984 return error_mark_node;
4986 switch (TREE_CODE (convs))
4988 case RVALUE_CONV:
4989 if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
4990 return expr;
4991 /* else fall through */
4992 case BASE_CONV:
4993 return build_user_type_conversion
4994 (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
4995 case REF_BIND:
4996 return convert_to_reference
4997 (TREE_TYPE (convs), expr,
4998 CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
4999 error_mark_node);
5000 case LVALUE_CONV:
5001 return decay_conversion (expr);
5003 return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5004 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5007 static tree
5008 convert_default_arg (type, arg)
5009 tree type, arg;
5011 arg = break_out_target_exprs (arg);
5013 if (TREE_CODE (arg) == CONSTRUCTOR)
5015 arg = digest_init (type, arg, 0);
5016 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5017 "default argument", 0, 0);
5019 else
5021 /* This could get clobbered by the following call. */
5022 if (TREE_HAS_CONSTRUCTOR (arg))
5023 arg = copy_node (arg);
5025 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5026 "default argument", 0, 0);
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 arg = default_conversion (arg);
5032 #endif
5035 return arg;
5038 static tree
5039 build_over_call (fn, convs, args, flags)
5040 tree fn, convs, args;
5041 int flags;
5043 tree converted_args = NULL_TREE;
5044 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5045 tree conv, arg, val;
5046 int i = 0;
5047 int is_method = 0;
5049 if (args && TREE_CODE (args) != TREE_LIST)
5050 args = build_tree_list (NULL_TREE, args);
5051 arg = args;
5053 /* The implicit parameters to a constructor are not considered by overload
5054 resolution, and must be of the proper type. */
5055 if (DECL_CONSTRUCTOR_P (fn))
5057 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5058 arg = TREE_CHAIN (arg);
5059 parm = TREE_CHAIN (parm);
5060 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5062 converted_args = tree_cons
5063 (NULL_TREE, TREE_VALUE (arg), converted_args);
5064 arg = TREE_CHAIN (arg);
5065 parm = TREE_CHAIN (parm);
5068 /* Bypass access control for 'this' parameter. */
5069 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5071 tree parmtype = TREE_VALUE (parm);
5072 tree argtype = TREE_TYPE (TREE_VALUE (arg));
5073 if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5075 int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5076 < TYPE_VOLATILE (TREE_TYPE (argtype)));
5077 int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5078 < TYPE_READONLY (TREE_TYPE (argtype)));
5079 char *p = (dv && dc ? "const and volatile"
5080 : dc ? "const" : dv ? "volatile" : "");
5082 cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5083 TREE_TYPE (argtype), fn, p);
5085 converted_args = tree_cons
5086 (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5087 converted_args);
5088 parm = TREE_CHAIN (parm);
5089 arg = TREE_CHAIN (arg);
5090 ++i;
5091 is_method = 1;
5094 for (; arg && parm;
5095 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5097 tree type = TREE_VALUE (parm);
5099 conv = TREE_VEC_ELT (convs, i);
5100 if (ICS_BAD_FLAG (conv))
5102 tree t = conv;
5103 val = TREE_VALUE (arg);
5105 for (; t; t = TREE_OPERAND (t, 0))
5107 if (TREE_CODE (t) == USER_CONV
5108 || TREE_CODE (t) == AMBIG_CONV)
5110 val = convert_like (t, val);
5111 break;
5113 else if (TREE_CODE (t) == IDENTITY_CONV)
5114 break;
5116 val = convert_for_initialization
5117 (NULL_TREE, type, val, LOOKUP_NORMAL,
5118 "argument passing", fn, i - is_method);
5120 else
5121 val = convert_like (conv, TREE_VALUE (arg));
5123 #ifdef PROMOTE_PROTOTYPES
5124 if ((TREE_CODE (type) == INTEGER_TYPE
5125 || TREE_CODE (type) == ENUMERAL_TYPE)
5126 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5127 val = default_conversion (val);
5128 #endif
5129 converted_args = tree_cons (NULL_TREE, val, converted_args);
5132 /* Default arguments */
5133 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5135 tree arg = TREE_PURPOSE (parm);
5137 if (DECL_TEMPLATE_INFO (fn))
5138 /* This came from a template. Instantiate the default arg here,
5139 not in tsubst. */
5140 arg = tsubst_expr (arg,
5141 &TREE_VEC_ELT (DECL_TI_ARGS (fn), 0),
5142 TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5143 converted_args = tree_cons
5144 (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5145 converted_args);
5148 /* Ellipsis */
5149 for (; arg; arg = TREE_CHAIN (arg))
5151 val = TREE_VALUE (arg);
5153 if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5154 && (TYPE_PRECISION (TREE_TYPE (val))
5155 < TYPE_PRECISION (double_type_node)))
5156 /* Convert `float' to `double'. */
5157 val = cp_convert (double_type_node, val);
5158 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5159 && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5160 cp_warning ("cannot pass objects of type `%T' through `...'",
5161 TREE_TYPE (val));
5162 else
5163 /* Convert `short' and `char' to full-size `int'. */
5164 val = default_conversion (val);
5166 converted_args = tree_cons (NULL_TREE, val, converted_args);
5169 converted_args = nreverse (converted_args);
5171 /* Avoid actually calling copy constructors and copy assignment operators,
5172 if possible. */
5173 if (DECL_CONSTRUCTOR_P (fn)
5174 && TREE_VEC_LENGTH (convs) == 1
5175 && copy_args_p (fn))
5177 tree targ;
5178 arg = TREE_VALUE (TREE_CHAIN (converted_args));
5180 /* Pull out the real argument, disregarding const-correctness. */
5181 targ = arg;
5182 while (TREE_CODE (targ) == NOP_EXPR
5183 || TREE_CODE (targ) == NON_LVALUE_EXPR
5184 || TREE_CODE (targ) == CONVERT_EXPR)
5185 targ = TREE_OPERAND (targ, 0);
5186 if (TREE_CODE (targ) == ADDR_EXPR)
5188 targ = TREE_OPERAND (targ, 0);
5189 if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5190 TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5191 targ = NULL_TREE;
5193 else
5194 targ = NULL_TREE;
5196 if (targ)
5197 arg = targ;
5198 else
5199 arg = build_indirect_ref (arg, 0);
5201 /* [class.copy]: the copy constructor is implicitly defined even if
5202 the implementation elided its use. */
5203 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5204 mark_used (fn);
5206 /* If we're creating a temp and we already have one, don't create a
5207 new one. If we're not creating a temp but we get one, use
5208 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5209 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5210 temp or an INIT_EXPR otherwise. */
5211 if (integer_zerop (TREE_VALUE (args)))
5213 if (! real_lvalue_p (arg))
5214 return arg;
5215 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5217 val = build (VAR_DECL, DECL_CONTEXT (fn));
5218 layout_decl (val, 0);
5219 val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5220 TREE_SIDE_EFFECTS (val) = 1;
5221 return val;
5224 else if (! real_lvalue_p (arg)
5225 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5227 tree to = stabilize_reference
5228 (build_indirect_ref (TREE_VALUE (args), 0));
5229 val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5230 TREE_SIDE_EFFECTS (val) = 1;
5231 return build_unary_op (ADDR_EXPR, val, 0);
5234 else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5235 && copy_args_p (fn)
5236 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5238 tree to = stabilize_reference
5239 (build_indirect_ref (TREE_VALUE (converted_args), 0));
5240 arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5241 val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5242 TREE_SIDE_EFFECTS (val) = 1;
5243 return val;
5246 mark_used (fn);
5248 if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5249 return build_signature_method_call (fn, converted_args);
5250 else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5252 tree t, *p = &TREE_VALUE (converted_args);
5253 tree binfo = get_binfo
5254 (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5255 *p = convert_pointer_to_real (binfo, *p);
5256 if (TREE_SIDE_EFFECTS (*p))
5257 *p = save_expr (*p);
5258 t = build_pointer_type (TREE_TYPE (fn));
5259 fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5260 TREE_TYPE (fn) = t;
5262 else if (DECL_INLINE (fn))
5263 fn = inline_conversion (fn);
5264 else
5265 fn = build_addr_func (fn);
5267 fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5268 if (TREE_TYPE (fn) == void_type_node)
5269 return fn;
5270 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5271 fn = build_cplus_new (TREE_TYPE (fn), fn);
5272 return convert_from_reference (require_complete_type (fn));
5275 static tree
5276 build_new_method_call (instance, name, args, basetype_path, flags)
5277 tree instance, name, args, basetype_path;
5278 int flags;
5280 struct z_candidate *candidates = 0, *cand;
5281 tree basetype, mem_args, fns, instance_ptr;
5282 tree pretty_name;
5283 tree user_args = args;
5285 /* If there is an extra argument for controlling virtual bases,
5286 remove it for error reporting. */
5287 if (flags & LOOKUP_HAS_IN_CHARGE)
5288 user_args = TREE_CHAIN (args);
5290 args = resolve_args (args);
5292 if (args == error_mark_node)
5293 return error_mark_node;
5295 if (instance == NULL_TREE)
5296 basetype = BINFO_TYPE (basetype_path);
5297 else
5299 if (TREE_CODE (instance) == OFFSET_REF)
5300 instance = resolve_offset_ref (instance);
5301 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5302 instance = convert_from_reference (instance);
5303 basetype = TREE_TYPE (instance);
5305 /* XXX this should be handled before we get here. */
5306 if (! IS_AGGR_TYPE (basetype)
5307 && ! (TYPE_LANG_SPECIFIC (basetype)
5308 && (IS_SIGNATURE_POINTER (basetype)
5309 || IS_SIGNATURE_REFERENCE (basetype))))
5311 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5312 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5313 name, instance, basetype);
5315 return error_mark_node;
5318 /* If `instance' is a signature pointer/reference and `name' is
5319 not a constructor, we are calling a signature member function.
5320 In that case set the `basetype' to the signature type. */
5321 if ((IS_SIGNATURE_POINTER (basetype)
5322 || IS_SIGNATURE_REFERENCE (basetype))
5323 && TYPE_IDENTIFIER (basetype) != name)
5324 basetype = SIGNATURE_TYPE (basetype);
5327 if (basetype_path == NULL_TREE)
5328 basetype_path = TYPE_BINFO (basetype);
5330 if (instance)
5332 instance_ptr = build_this (instance);
5334 /* XXX this should be handled before we get here. */
5335 fns = build_field_call (basetype_path, instance_ptr, name, args);
5336 if (fns)
5337 return fns;
5339 else
5341 instance_ptr = build_int_2 (0, 0);
5342 TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5345 pretty_name
5346 = (name == ctor_identifier ? constructor_name_full (basetype) : name);
5348 fns = lookup_fnfields (basetype_path, name, 1);
5350 if (fns == error_mark_node)
5351 return error_mark_node;
5352 if (fns)
5354 tree t = TREE_VALUE (fns);
5355 if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5356 && ! (flags & LOOKUP_HAS_IN_CHARGE))
5358 flags |= LOOKUP_HAS_IN_CHARGE;
5359 args = tree_cons (NULL_TREE, integer_one_node, args);
5361 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5362 for (; t; t = DECL_CHAIN (t))
5364 /* We can end up here for copy-init of same or base class. */
5365 if (name == ctor_identifier
5366 && (flags & LOOKUP_ONLYCONVERTING)
5367 && DECL_NONCONVERTING_P (t))
5368 continue;
5369 if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5370 candidates = add_function_candidate
5371 (candidates, t, mem_args, flags);
5372 else
5373 candidates = add_function_candidate (candidates, t, args, flags);
5374 candidates->basetype_path = TREE_PURPOSE (fns);
5378 if (! any_viable (candidates))
5380 /* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
5381 if (flags & LOOKUP_SPECULATIVELY)
5382 return NULL_TREE;
5383 cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5384 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5385 print_z_candidates (candidates);
5386 return error_mark_node;
5388 candidates = splice_viable (candidates);
5389 cand = tourney (candidates, NULL_TREE);
5391 if (cand == 0)
5393 cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5394 user_args);
5395 print_z_candidates (candidates);
5396 return error_mark_node;
5399 enforce_access (cand->basetype_path, cand->fn);
5400 if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5401 && instance == current_class_ref
5402 && DECL_CONSTRUCTOR_P (current_function_decl)
5403 && ! (flags & LOOKUP_NONVIRTUAL)
5404 && value_member (cand->fn, get_abstract_virtuals (basetype)))
5405 cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5406 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5407 && TREE_CODE (instance_ptr) == NOP_EXPR
5408 && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5409 cp_error ("cannot call member function `%D' without object", cand->fn);
5411 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5412 && ((instance == current_class_ref && (dtor_label || ctor_label))
5413 || resolves_to_fixed_type_p (instance, 0)))
5414 flags |= LOOKUP_NONVIRTUAL;
5416 return build_over_call
5417 (cand->fn, cand->convs,
5418 TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5419 flags);
5422 /* Compare two implicit conversion sequences that differ only in their
5423 qualification conversion. Subroutine of compare_ics. */
5425 static int
5426 compare_qual (ics1, ics2)
5427 tree ics1, ics2;
5429 tree to1 = TREE_TYPE (ics1);
5430 tree to2 = TREE_TYPE (ics2);
5432 to1 = TREE_TYPE (to1);
5433 to2 = TREE_TYPE (to2);
5435 if (TREE_CODE (to1) == OFFSET_TYPE)
5437 to1 = TREE_TYPE (to1);
5438 to2 = TREE_TYPE (to2);
5441 if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5442 && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5443 return -1;
5444 else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5445 && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5446 return -1;
5447 else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5448 && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5449 return 1;
5450 else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5451 && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5452 return 1;
5453 return 0;
5456 /* Compare two implicit conversion sequences according to the rules set out in
5457 [over.ics.rank]. Return values:
5459 1: ics1 is better than ics2
5460 -1: ics2 is better than ics1
5461 0: ics1 and ics2 are indistinguishable */
5463 static int
5464 compare_ics (ics1, ics2)
5465 tree ics1, ics2;
5467 tree main1, main2;
5469 if (TREE_CODE (ics1) == QUAL_CONV)
5470 main1 = TREE_OPERAND (ics1, 0);
5471 else
5472 main1 = ics1;
5474 if (TREE_CODE (ics2) == QUAL_CONV)
5475 main2 = TREE_OPERAND (ics2, 0);
5476 else
5477 main2 = ics2;
5479 /* Conversions for `this' are PTR_CONVs, but we compare them as though
5480 they were REF_BINDs. */
5481 if (ICS_THIS_FLAG (ics1))
5483 tree t = main1;
5484 if (TREE_CODE (t) == PTR_CONV)
5485 t = TREE_OPERAND (t, 0);
5486 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5487 t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5488 ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5489 main1 = ics1 = t;
5491 if (ICS_THIS_FLAG (ics2))
5493 tree t = main2;
5494 if (TREE_CODE (t) == PTR_CONV)
5495 t = TREE_OPERAND (t, 0);
5496 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5497 t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5498 ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5499 main2 = ics2 = t;
5502 if (ICS_RANK (ics1) > ICS_RANK (ics2))
5503 return -1;
5504 else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5505 return 1;
5507 if (ICS_RANK (ics1) == BAD_RANK)
5509 if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5510 || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5511 return -1;
5512 else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5513 || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5514 return 1;
5516 /* else fall through */
5519 /* User-defined conversion sequence U1 is a better conversion sequence
5520 than another user-defined conversion sequence U2 if they contain the
5521 same user-defined conversion operator or constructor and if the sec-
5522 ond standard conversion sequence of U1 is better than the second
5523 standard conversion sequence of U2. */
5525 if (ICS_USER_FLAG (ics1))
5527 tree t1, t2;
5529 for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5530 if (TREE_CODE (t1) == AMBIG_CONV)
5531 return 0;
5532 for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5533 if (TREE_CODE (t2) == AMBIG_CONV)
5534 return 0;
5536 if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5537 return 0;
5538 else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5539 return -1;
5540 else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5541 return 1;
5543 /* else fall through */
5546 #if 0 /* Handled by ranking */
5547 /* A conversion that is not a conversion of a pointer, or pointer to
5548 member, to bool is better than another conversion that is such a
5549 conversion. */
5550 #endif
5552 if (TREE_CODE (main1) != TREE_CODE (main2))
5553 return 0;
5555 if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5556 || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5558 tree to1 = TREE_TYPE (main1);
5559 tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5560 tree to2 = TREE_TYPE (main2);
5561 tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5562 int distf, distt;
5564 /* Standard conversion sequence S1 is a better conversion sequence than
5565 standard conversion sequence S2 if...
5567 S1 and S2 differ only in their qualification conversion and they
5568 yield types identical except for cv-qualifiers and S2 adds all the
5569 qualifiers that S1 adds (and in the same places) and S2 adds yet
5570 more cv-qualifiers than S1, or the similar case with reference
5571 binding15). */
5572 if (TREE_CODE (main1) == REF_BIND)
5574 if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
5575 == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
5576 return compare_qual (ics1, ics2);
5578 else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
5579 return compare_qual (ics1, ics2);
5581 if (TYPE_PTRMEMFUNC_P (to1))
5583 to1 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1));
5584 from1 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1));
5586 else if (TREE_CODE (main1) != BASE_CONV)
5588 to1 = TREE_TYPE (to1);
5589 if (TREE_CODE (main1) != REF_BIND)
5590 from1 = TREE_TYPE (from1);
5592 if (TREE_CODE (to1) == OFFSET_TYPE)
5594 to1 = TYPE_OFFSET_BASETYPE (to1);
5595 from1 = TYPE_OFFSET_BASETYPE (from1);
5599 if (TYPE_PTRMEMFUNC_P (to2))
5601 to2 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2));
5602 from2 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2));
5604 else if (TREE_CODE (main1) != BASE_CONV)
5606 to2 = TREE_TYPE (to2);
5607 if (TREE_CODE (main1) != REF_BIND)
5608 from2 = TREE_TYPE (from2);
5610 if (TREE_CODE (to2) == OFFSET_TYPE)
5612 to2 = TYPE_OFFSET_BASETYPE (to2);
5613 from2 = TYPE_OFFSET_BASETYPE (from2);
5617 if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
5618 return 0;
5620 /* The sense of pmem conversions is reversed from that of the other
5621 conversions. */
5622 if (TREE_CODE (main1) == PMEM_CONV)
5624 tree t = from1; from1 = from2; from2 = t;
5625 t = to1; to1 = to2; to2 = t;
5628 distf = get_base_distance (from1, from2, 0, 0);
5629 if (distf == -1)
5631 distf = -get_base_distance (from2, from1, 0, 0);
5632 if (distf == 1)
5633 return 0;
5636 /* If class B is derived directly or indirectly from class A,
5637 conver- sion of B* to A* is better than conversion of B* to
5638 void*, and conversion of A* to void* is better than
5639 conversion of B* to void*. */
5641 if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
5643 if (distf > 0)
5644 return 1;
5645 else if (distf < 0)
5646 return -1;
5648 else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
5649 && get_base_distance (to1, from1, 0, 0) != -1)
5650 return 1;
5651 else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
5652 && get_base_distance (to2, from2, 0, 0) != -1)
5653 return -1;
5655 if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
5656 return 0;
5658 /* If class B is derived directly or indirectly from class A and class
5659 C is derived directly or indirectly from B */
5661 distt = get_base_distance (to1, to2, 0, 0);
5662 if (distt == -1)
5664 distt = -get_base_distance (to2, to1, 0, 0);
5665 if (distt == 1)
5666 return 0;
5669 /* --conversion of C* to B* is better than conversion of C* to A*, */
5670 if (distf == 0)
5672 if (distt > 0)
5673 return -1;
5674 else if (distt < 0)
5675 return 1;
5677 /* --conversion of B* to A* is better than conversion of C* to A*, */
5678 else if (distt == 0)
5680 if (distf > 0)
5681 return 1;
5682 else if (distf < 0)
5683 return -1;
5686 else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
5687 || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
5689 if (TREE_TYPE (main1) == TREE_TYPE (main2))
5690 return compare_qual (ics1, ics2);
5692 #if 0 /* This is now handled by making identity better than anything else. */
5693 /* existing practice, not WP-endorsed: const char * -> const char *
5694 is better than char * -> const char *. (jason 6/29/96) */
5695 if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
5696 return -compare_qual (main1, main2);
5697 #endif
5700 return 0;
5703 /* Compare two candidates for overloading as described in
5704 [over.match.best]. Return values:
5706 1: cand1 is better than cand2
5707 -1: cand2 is better than cand1
5708 0: cand1 and cand2 are indistinguishable */
5710 static int
5711 joust (cand1, cand2)
5712 struct z_candidate *cand1, *cand2;
5714 int winner = 0;
5715 int i, off1 = 0, off2 = 0, len;
5717 /* Candidates that involve bad conversions are always worse than those
5718 that don't. */
5719 if (cand1->viable > cand2->viable)
5720 return 1;
5721 if (cand1->viable < cand2->viable)
5722 return -1;
5724 /* a viable function F1
5725 is defined to be a better function than another viable function F2 if
5726 for all arguments i, ICSi(F1) is not a worse conversion sequence than
5727 ICSi(F2), and then */
5729 /* for some argument j, ICSj(F1) is a better conversion sequence than
5730 ICSj(F2) */
5732 /* For comparing static and non-static member functions, we ignore the
5733 implicit object parameter of the non-static function. The WP says to
5734 pretend that the static function has an object parm, but that won't
5735 work with operator overloading. */
5736 len = TREE_VEC_LENGTH (cand1->convs);
5737 if (len != TREE_VEC_LENGTH (cand2->convs))
5739 if (DECL_STATIC_FUNCTION_P (cand1->fn)
5740 && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5741 off2 = 1;
5742 else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5743 && DECL_STATIC_FUNCTION_P (cand2->fn))
5745 off1 = 1;
5746 --len;
5748 else
5749 my_friendly_abort (42);
5752 for (i = 0; i < len; ++i)
5754 int comp = compare_ics (TREE_VEC_ELT (cand1->convs, i+off1),
5755 TREE_VEC_ELT (cand2->convs, i+off2));
5757 if (comp != 0)
5759 if (winner && comp != winner)
5761 winner = 0;
5762 goto tweak;
5764 winner = comp;
5768 if (winner)
5769 return winner;
5771 /* or, if not that,
5772 F1 is a non-template function and F2 is a template function */
5774 if (! cand1->template && cand2->template)
5775 return 1;
5776 else if (cand1->template && ! cand2->template)
5777 return -1;
5778 else if (cand1->template && cand2->template)
5779 winner = more_specialized
5780 (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
5782 /* or, if not that,
5783 the context is an initialization by user-defined conversion (see
5784 _dcl.init_ and _over.match.user_) and the standard conversion
5785 sequence from the return type of F1 to the destination type (i.e.,
5786 the type of the entity being initialized) is a better conversion
5787 sequence than the standard conversion sequence from the return type
5788 of F2 to the destination type. */
5790 if (! winner && cand1->second_conv)
5791 winner = compare_ics (cand1->second_conv, cand2->second_conv);
5793 /* If the built-in candidates are the same, arbitrarily pick one. */
5794 if (! winner && cand1->fn == cand2->fn
5795 && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
5797 for (i = 0; i < len; ++i)
5798 if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
5799 TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
5800 break;
5801 if (i == TREE_VEC_LENGTH (cand1->convs))
5802 return 1;
5803 #if 0
5804 /* Kludge around broken overloading rules whereby
5805 bool ? void *const & : void *const & is ambiguous. */
5806 /* Huh? Explain the problem better. */
5807 if (cand1->fn == ansi_opname[COND_EXPR])
5809 tree c1 = TREE_VEC_ELT (cand1->convs, 1);
5810 tree c2 = TREE_VEC_ELT (cand2->convs, 1);
5811 tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
5812 tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
5814 if (comptypes (t1, t2, 1))
5816 if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
5817 return 1;
5818 if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
5819 return -1;
5822 #endif
5825 tweak:
5827 /* Extension: If the worst conversion for one candidate is worse than the
5828 worst conversion for the other, take the first. */
5829 if (! winner && ! pedantic)
5831 int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
5833 for (i = 0; i < len; ++i)
5835 if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
5836 rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
5837 if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
5838 rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
5841 if (rank1 < rank2)
5842 return 1;
5843 if (rank1 > rank2)
5844 return -1;
5847 return winner;
5850 /* Given a list of candidates for overloading, find the best one, if any.
5851 This algorithm has a worst case of O(2n) (winner is last), and a best
5852 case of O(n/2) (totally ambiguous); much better than a sorting
5853 algorithm. */
5855 static struct z_candidate *
5856 tourney (candidates)
5857 struct z_candidate *candidates;
5859 struct z_candidate *champ = candidates, *challenger;
5860 int fate;
5862 /* Walk through the list once, comparing each current champ to the next
5863 candidate, knocking out a candidate or two with each comparison. */
5865 for (challenger = champ->next; challenger; )
5867 fate = joust (champ, challenger);
5868 if (fate == 1)
5869 challenger = challenger->next;
5870 else
5872 if (fate == 0)
5874 champ = challenger->next;
5875 if (champ == 0)
5876 return 0;
5878 else
5879 champ = challenger;
5881 challenger = champ->next;
5885 /* Make sure the champ is better than all the candidates it hasn't yet
5886 been compared to. This may do one more comparison than necessary. Oh
5887 well. */
5889 for (challenger = candidates; challenger != champ;
5890 challenger = challenger->next)
5892 fate = joust (champ, challenger);
5893 if (fate != 1)
5894 return 0;
5897 return champ;
5901 can_convert (to, from)
5902 tree to, from;
5904 if (flag_ansi_overloading)
5906 tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
5907 return (t && ! ICS_BAD_FLAG (t));
5909 else
5911 struct harshness_code h;
5912 h = convert_harshness (to, from, NULL_TREE);
5913 return (h.code < USER_CODE) && (h.distance >= 0);
5918 can_convert_arg (to, from, arg)
5919 tree to, from, arg;
5921 if (flag_ansi_overloading)
5923 tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
5924 return (t && ! ICS_BAD_FLAG (t));
5926 else
5928 struct harshness_code h;
5929 h = convert_harshness (to, from, arg);
5930 return (h.code < USER_CODE) && (h.distance >= 0);