import of gcc-2.8
[official-gcc.git] / gcc / cp / call.c
blob8dcbd95776a685674a9e03835f1529df4c1daaa1
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 #ifdef HAVE_STDLIB_H
35 #include <stdlib.h>
36 #endif
38 #include "obstack.h"
39 #define obstack_chunk_alloc xmalloc
40 #define obstack_chunk_free free
42 extern int inhibit_warnings;
43 extern tree ctor_label, dtor_label;
45 /* Compute the ease with which a conversion can be performed
46 between an expected and the given type. */
48 static struct harshness_code convert_harshness PROTO((register tree, register tree, tree));
49 static tree build_new_method_call PROTO((tree, tree, tree, tree, int));
51 static int rank_for_ideal PROTO((struct candidate *,
52 struct candidate *));
53 static int user_harshness PROTO((tree, tree));
54 static int strictly_better PROTO((unsigned int, unsigned int));
55 static struct candidate * ideal_candidate PROTO((struct candidate *,
56 int, int));
57 static int may_be_remote PROTO((tree));
58 static tree build_field_call PROTO((tree, tree, tree, tree));
59 static tree find_scoped_type PROTO((tree, tree, tree));
60 static void print_candidates PROTO((tree));
61 static struct z_candidate * tourney PROTO((struct z_candidate *));
62 static int joust PROTO((struct z_candidate *, struct z_candidate *));
63 static int compare_qual PROTO((tree, tree));
64 static int compare_ics PROTO((tree, tree));
65 static tree build_over_call PROTO((tree, tree, tree, int));
66 static tree convert_default_arg PROTO((tree, tree));
67 static void enforce_access PROTO((tree, tree));
68 static tree convert_like PROTO((tree, tree));
69 static void op_error PROTO((enum tree_code, enum tree_code, tree, tree,
70 tree, char *));
71 static tree build_object_call PROTO((tree, tree));
72 static tree resolve_args PROTO((tree));
73 static struct z_candidate * build_user_type_conversion_1
74 PROTO ((tree, tree, int));
75 static void print_z_candidates PROTO((struct z_candidate *));
76 static tree build_this PROTO((tree));
77 static struct z_candidate * splice_viable PROTO((struct z_candidate *));
78 static int any_viable PROTO((struct z_candidate *));
79 static struct z_candidate * add_template_candidate
80 PROTO((struct z_candidate *, tree, tree, tree, tree, int));
81 static struct z_candidate * add_template_conv_candidate
82 PROTO((struct z_candidate *, tree, tree, tree, tree));
83 static struct z_candidate * add_builtin_candidates
84 PROTO((struct z_candidate *, enum tree_code, enum tree_code,
85 tree, tree *, int));
86 static struct z_candidate * add_builtin_candidate
87 PROTO((struct z_candidate *, enum tree_code, enum tree_code,
88 tree, tree, tree, tree *, tree *, int));
89 static int is_complete PROTO((tree));
90 static struct z_candidate * build_builtin_candidate
91 PROTO((struct z_candidate *, tree, tree, tree, tree *, tree *,
92 int));
93 static struct z_candidate * add_conv_candidate
94 PROTO((struct z_candidate *, tree, tree, tree));
95 static struct z_candidate * add_function_candidate
96 PROTO((struct z_candidate *, tree, tree, int));
97 static tree implicit_conversion PROTO((tree, tree, tree, int));
98 static tree standard_conversion PROTO((tree, tree, tree));
99 static tree reference_binding PROTO((tree, tree, tree, int));
100 static tree strip_top_quals PROTO((tree));
101 static tree non_reference PROTO((tree));
102 static tree build_conv PROTO((enum tree_code, tree, tree));
103 static void print_n_candidates PROTO((struct candidate *, int));
104 static tree default_parm_conversions PROTO((tree, tree *));
105 static int is_subseq PROTO((tree, tree));
107 #define EVIL_RETURN(ARG) ((ARG).code = EVIL_CODE, (ARG))
108 #define STD_RETURN(ARG) ((ARG).code = STD_CODE, (ARG))
109 #define QUAL_RETURN(ARG) ((ARG).code = QUAL_CODE, (ARG))
110 #define TRIVIAL_RETURN(ARG) ((ARG).code = TRIVIAL_CODE, (ARG))
111 #define ZERO_RETURN(ARG) ((ARG).code = 0, (ARG))
113 /* Ordering function for overload resolution. Compare two candidates
114 by gross quality. */
117 rank_for_overload (x, y)
118 struct candidate *x, *y;
120 if (y->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
121 return y->h.code - x->h.code;
122 if (x->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
123 return -1;
125 /* This is set by compute_conversion_costs, for calling a non-const
126 member function from a const member function. */
127 if ((y->harshness[0].code & CONST_CODE) ^ (x->harshness[0].code & CONST_CODE))
128 return y->harshness[0].code - x->harshness[0].code;
130 if (y->h.code & STD_CODE)
132 if (x->h.code & STD_CODE)
133 return y->h.distance - x->h.distance;
134 return 1;
136 if (x->h.code & STD_CODE)
137 return -1;
139 return y->h.code - x->h.code;
142 /* Compare two candidates, argument by argument. */
144 static int
145 rank_for_ideal (x, y)
146 struct candidate *x, *y;
148 int i;
150 if (x->h_len != y->h_len)
151 abort ();
153 for (i = 0; i < x->h_len; i++)
155 if (y->harshness[i].code - x->harshness[i].code)
156 return y->harshness[i].code - x->harshness[i].code;
157 if ((y->harshness[i].code & STD_CODE)
158 && (y->harshness[i].distance - x->harshness[i].distance))
159 return y->harshness[i].distance - x->harshness[i].distance;
161 /* They're both the same code. Now see if we're dealing with an
162 integral promotion that needs a finer grain of accuracy. */
163 if (y->harshness[0].code & PROMO_CODE
164 && (y->harshness[i].int_penalty ^ x->harshness[i].int_penalty))
165 return y->harshness[i].int_penalty - x->harshness[i].int_penalty;
167 return 0;
170 /* TYPE is the type we wish to convert to. PARM is the parameter
171 we have to work with. We use a somewhat arbitrary cost function
172 to measure this conversion. */
174 static struct harshness_code
175 convert_harshness (type, parmtype, parm)
176 register tree type, parmtype;
177 tree parm;
179 struct harshness_code h;
180 register enum tree_code codel;
181 register enum tree_code coder;
182 int lvalue;
184 h.code = 0;
185 h.distance = 0;
186 h.int_penalty = 0;
188 #ifdef GATHER_STATISTICS
189 n_convert_harshness++;
190 #endif
192 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
194 if (parm)
195 parm = convert_from_reference (parm);
196 parmtype = TREE_TYPE (parmtype);
197 lvalue = 1;
199 else if (parm)
200 lvalue = lvalue_p (parm);
201 else
202 lvalue = 0;
204 if (TYPE_PTRMEMFUNC_P (type))
205 type = TYPE_PTRMEMFUNC_FN_TYPE (type);
206 if (TYPE_PTRMEMFUNC_P (parmtype))
207 parmtype = TYPE_PTRMEMFUNC_FN_TYPE (parmtype);
209 codel = TREE_CODE (type);
210 coder = TREE_CODE (parmtype);
212 if (TYPE_MAIN_VARIANT (parmtype) == TYPE_MAIN_VARIANT (type))
213 return ZERO_RETURN (h);
215 if (coder == ERROR_MARK)
216 return EVIL_RETURN (h);
218 if (codel == REFERENCE_TYPE)
220 tree ttl, ttr;
221 int constp = parm ? TREE_READONLY (parm) : TYPE_READONLY (parmtype);
222 int volatilep = (parm ? TREE_THIS_VOLATILE (parm)
223 : TYPE_VOLATILE (parmtype));
224 register tree intype = TYPE_MAIN_VARIANT (parmtype);
225 register enum tree_code form = TREE_CODE (intype);
226 int penalty = 0;
228 ttl = TREE_TYPE (type);
230 /* Only allow const reference binding if we were given a parm to deal
231 with, since it isn't really a conversion. This is a hack to
232 prevent build_type_conversion from finding this conversion, but
233 still allow overloading to find it. */
234 if (! lvalue && ! (parm && TYPE_READONLY (ttl)))
235 return EVIL_RETURN (h);
237 if ((TYPE_READONLY (ttl) < constp)
238 || (TYPE_VOLATILE (ttl) < volatilep))
239 return EVIL_RETURN (h);
241 /* When passing a non-const argument into a const reference, dig it a
242 little, so a non-const reference is preferred over this one. */
243 penalty = ((TYPE_READONLY (ttl) > constp)
244 + (TYPE_VOLATILE (ttl) > volatilep));
246 ttl = TYPE_MAIN_VARIANT (ttl);
248 if (form == OFFSET_TYPE)
250 intype = TREE_TYPE (intype);
251 form = TREE_CODE (intype);
254 ttr = intype;
256 if (TREE_CODE (ttl) == ARRAY_TYPE && TREE_CODE (ttr) == ARRAY_TYPE)
258 if (comptypes (ttl, ttr, 1))
259 return ZERO_RETURN (h);
260 return EVIL_RETURN (h);
263 h = convert_harshness (ttl, ttr, NULL_TREE);
264 if (penalty && h.code == 0)
266 h.code = QUAL_CODE;
267 h.int_penalty = penalty;
269 return h;
272 if (codel == POINTER_TYPE && fntype_p (parmtype))
274 tree p1, p2;
275 struct harshness_code h1, h2;
277 /* Get to the METHOD_TYPE or FUNCTION_TYPE that this might be. */
278 type = TREE_TYPE (type);
280 if (coder == POINTER_TYPE)
282 parmtype = TREE_TYPE (parmtype);
283 coder = TREE_CODE (parmtype);
286 if (coder != TREE_CODE (type))
287 return EVIL_RETURN (h);
289 if (type != parmtype && coder == METHOD_TYPE)
291 tree ttl = TYPE_METHOD_BASETYPE (type);
292 tree ttr = TYPE_METHOD_BASETYPE (parmtype);
294 int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
295 if (b_or_d < 0)
297 b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
298 if (b_or_d < 0)
299 return EVIL_RETURN (h);
300 h.distance = -b_or_d;
302 else
303 h.distance = b_or_d;
304 h.code = STD_CODE;
306 type = build_function_type
307 (TREE_TYPE (type), TREE_CHAIN (TYPE_ARG_TYPES (type)));
308 parmtype = build_function_type
309 (TREE_TYPE (parmtype), TREE_CHAIN (TYPE_ARG_TYPES (parmtype)));
312 /* We allow the default conversion between function type
313 and pointer-to-function type for free. */
314 if (comptypes (type, parmtype, 1))
315 return h;
317 if (pedantic)
318 return EVIL_RETURN (h);
320 /* Compare return types. */
321 p1 = TREE_TYPE (type);
322 p2 = TREE_TYPE (parmtype);
323 h2 = convert_harshness (p1, p2, NULL_TREE);
324 if (h2.code & EVIL_CODE)
325 return h2;
327 h1.code = TRIVIAL_CODE;
328 h1.distance = 0;
330 if (h2.distance != 0)
332 tree binfo;
334 /* This only works for pointers. */
335 if (TREE_CODE (p1) != POINTER_TYPE
336 && TREE_CODE (p1) != REFERENCE_TYPE)
337 return EVIL_RETURN (h);
339 p1 = TREE_TYPE (p1);
340 p2 = TREE_TYPE (p2);
341 /* Don't die if we happen to be dealing with void*. */
342 if (!IS_AGGR_TYPE (p1) || !IS_AGGR_TYPE (p2))
343 return EVIL_RETURN (h);
344 if (h2.distance < 0)
345 binfo = get_binfo (p2, p1, 0);
346 else
347 binfo = get_binfo (p1, p2, 0);
349 if (! BINFO_OFFSET_ZEROP (binfo))
351 #if 0
352 static int explained = 0;
353 if (h2.distance < 0)
354 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p2, p1);
355 else
356 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p1, p2);
358 if (! explained++)
359 sorry ("(because pointer values change during conversion)");
360 #endif
361 return EVIL_RETURN (h);
365 h1.code |= h2.code;
366 if (h2.distance > h1.distance)
367 h1.distance = h2.distance;
369 p1 = TYPE_ARG_TYPES (type);
370 p2 = TYPE_ARG_TYPES (parmtype);
371 while (p1 && TREE_VALUE (p1) != void_type_node
372 && p2 && TREE_VALUE (p2) != void_type_node)
374 h2 = convert_harshness (TREE_VALUE (p1), TREE_VALUE (p2),
375 NULL_TREE);
376 if (h2.code & EVIL_CODE)
377 return h2;
379 if (h2.distance)
381 /* This only works for pointers and references. */
382 if (TREE_CODE (TREE_VALUE (p1)) != POINTER_TYPE
383 && TREE_CODE (TREE_VALUE (p1)) != REFERENCE_TYPE)
384 return EVIL_RETURN (h);
385 h2.distance = - h2.distance;
388 h1.code |= h2.code;
389 if (h2.distance > h1.distance)
390 h1.distance = h2.distance;
391 p1 = TREE_CHAIN (p1);
392 p2 = TREE_CHAIN (p2);
394 if (p1 == p2)
395 return h1;
396 if (p2)
398 if (p1)
399 return EVIL_RETURN (h);
400 h1.code |= ELLIPSIS_CODE;
401 return h1;
403 if (p1)
405 if (TREE_PURPOSE (p1) == NULL_TREE)
406 h1.code |= EVIL_CODE;
407 return h1;
410 else if (codel == POINTER_TYPE && coder == OFFSET_TYPE)
412 tree ttl, ttr;
414 /* Get to the OFFSET_TYPE that this might be. */
415 type = TREE_TYPE (type);
417 if (coder != TREE_CODE (type))
418 return EVIL_RETURN (h);
420 ttl = TYPE_OFFSET_BASETYPE (type);
421 ttr = TYPE_OFFSET_BASETYPE (parmtype);
423 if (ttl == ttr)
424 h.code = 0;
425 else
427 int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
428 if (b_or_d < 0)
430 b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
431 if (b_or_d < 0)
432 return EVIL_RETURN (h);
433 h.distance = -b_or_d;
435 else
436 h.distance = b_or_d;
437 h.code = STD_CODE;
440 /* Now test the OFFSET_TYPE's target compatibility. */
441 type = TREE_TYPE (type);
442 parmtype = TREE_TYPE (parmtype);
445 if (coder == UNKNOWN_TYPE)
447 if (codel == FUNCTION_TYPE
448 || codel == METHOD_TYPE
449 || (codel == POINTER_TYPE
450 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
451 || TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)))
452 return TRIVIAL_RETURN (h);
453 return EVIL_RETURN (h);
456 if (coder == VOID_TYPE)
457 return EVIL_RETURN (h);
459 if (codel == BOOLEAN_TYPE)
461 if (INTEGRAL_CODE_P (coder) || coder == REAL_TYPE)
462 return STD_RETURN (h);
463 else if (coder == POINTER_TYPE || coder == OFFSET_TYPE)
465 /* Make this worse than any conversion to another pointer.
466 FIXME this is how I think the language should work, but it may not
467 end up being how the language is standardized (jason 1/30/95). */
468 h.distance = 32767;
469 return STD_RETURN (h);
471 return EVIL_RETURN (h);
474 if (INTEGRAL_CODE_P (codel))
476 /* Control equivalence of ints an enums. */
478 if (codel == ENUMERAL_TYPE
479 && flag_int_enum_equivalence == 0)
481 /* Enums can be converted to ints, but not vice-versa. */
482 if (coder != ENUMERAL_TYPE
483 || TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (parmtype))
484 return EVIL_RETURN (h);
487 /* else enums and ints (almost) freely interconvert. */
489 if (INTEGRAL_CODE_P (coder))
491 if (TYPE_MAIN_VARIANT (type)
492 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
494 h.code = PROMO_CODE;
496 else
497 h.code = STD_CODE;
499 return h;
501 else if (coder == REAL_TYPE)
503 h.code = STD_CODE;
504 h.distance = 0;
505 return h;
509 if (codel == REAL_TYPE)
511 if (coder == REAL_TYPE)
513 if (TYPE_MAIN_VARIANT (type)
514 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
515 h.code = PROMO_CODE;
516 else
517 h.code = STD_CODE;
519 return h;
521 else if (INTEGRAL_CODE_P (coder))
523 h.code = STD_CODE;
524 h.distance = 0;
525 return h;
529 /* Convert arrays which have not previously been converted. */
530 if (coder == ARRAY_TYPE)
532 coder = POINTER_TYPE;
533 if (parm)
535 parm = decay_conversion (parm);
536 parmtype = TREE_TYPE (parm);
538 else
539 parmtype = build_pointer_type (TREE_TYPE (parmtype));
542 /* Conversions among pointers */
543 if (codel == POINTER_TYPE && coder == POINTER_TYPE)
545 register tree ttl = TYPE_MAIN_VARIANT (TREE_TYPE (type));
546 register tree ttr = TYPE_MAIN_VARIANT (TREE_TYPE (parmtype));
547 int penalty = 4 * (ttl != ttr);
549 /* Anything converts to void *. Since this may be `const void *'
550 (etc.) use VOID_TYPE instead of void_type_node. Otherwise, the
551 targets must be the same, except that we do allow (at some cost)
552 conversion between signed and unsigned pointer types. */
554 if ((TREE_CODE (ttl) == METHOD_TYPE
555 || TREE_CODE (ttl) == FUNCTION_TYPE)
556 && TREE_CODE (ttl) == TREE_CODE (ttr))
558 if (comptypes (ttl, ttr, -1))
560 h.code = penalty ? STD_CODE : 0;
561 h.distance = 0;
563 else
564 h.code = EVIL_CODE;
565 return h;
568 #if 1
569 if (TREE_CODE (ttl) != VOID_TYPE
570 && (TREE_CODE (ttr) != VOID_TYPE || !parm || !null_ptr_cst_p (parm)))
572 if (comp_target_types (type, parmtype, 1) <= 0)
573 return EVIL_RETURN (h);
575 #else
576 if (!(TREE_CODE (ttl) == VOID_TYPE
577 || TREE_CODE (ttr) == VOID_TYPE
578 || (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (ttr)
579 && (ttl = unsigned_type (ttl),
580 ttr = unsigned_type (ttr),
581 penalty = 10, 0))
582 || (comp_target_types (ttl, ttr, 0) > 0)))
583 return EVIL_RETURN (h);
584 #endif
586 if (ttr == ttl)
588 tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
590 h.code = 0;
591 /* Note conversion from `T*' to `const T*',
592 or `T*' to `volatile T*'. */
593 if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
594 || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
595 h.code = EVIL_CODE;
596 else if ((TYPE_READONLY (tmp1) != TREE_READONLY (tmp2))
597 || (TYPE_VOLATILE (tmp1) != TYPE_VOLATILE (tmp2)))
598 h.code |= QUAL_CODE;
600 h.distance = 0;
601 return h;
605 if (TREE_CODE (ttl) == RECORD_TYPE && TREE_CODE (ttr) == RECORD_TYPE)
607 int b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
608 if (b_or_d < 0)
610 b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
611 if (b_or_d < 0)
612 return EVIL_RETURN (h);
613 h.distance = -b_or_d;
615 else
616 h.distance = b_or_d;
617 h.code = STD_CODE;
618 return h;
621 /* If converting from a `class*' to a `void*', make it
622 less favorable than any inheritance relationship. */
623 if (TREE_CODE (ttl) == VOID_TYPE && IS_AGGR_TYPE (ttr))
625 h.code = STD_CODE;
626 h.distance = CLASSTYPE_MAX_DEPTH (ttr)+1;
627 return h;
630 h.code = penalty ? STD_CODE : PROMO_CODE;
631 /* Catch things like `const char *' -> `const void *'
632 vs `const char *' -> `void *'. */
633 if (ttl != ttr)
635 tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
636 if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
637 || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
638 h.code = EVIL_CODE;
639 else if ((TYPE_READONLY (tmp1) > TREE_READONLY (tmp2))
640 || (TYPE_VOLATILE (tmp1) > TYPE_VOLATILE (tmp2)))
641 h.code |= QUAL_CODE;
643 return h;
646 if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
648 /* This is not a bad match, but don't let it beat
649 integer-enum combinations. */
650 if (parm && integer_zerop (parm))
652 h.code = STD_CODE;
653 h.distance = 0;
654 return h;
658 /* C++: Since the `this' parameter of a signature member function
659 is represented as a signature pointer to handle default implementations
660 correctly, we can have the case that `type' is a signature pointer
661 while `parmtype' is a pointer to a signature table. We don't really
662 do any conversions in this case, so just return 0. */
664 if (codel == RECORD_TYPE && coder == POINTER_TYPE
665 && IS_SIGNATURE_POINTER (type) && IS_SIGNATURE (TREE_TYPE (parmtype)))
666 return ZERO_RETURN (h);
668 if (codel == RECORD_TYPE && coder == RECORD_TYPE)
670 int b_or_d = get_base_distance (type, parmtype, 0, (tree*)0);
671 if (b_or_d < 0)
673 b_or_d = get_base_distance (parmtype, type, 0, (tree*)0);
674 if (b_or_d < 0)
675 return EVIL_RETURN (h);
676 h.distance = -b_or_d;
678 else
679 h.distance = b_or_d;
680 h.code = STD_CODE;
681 return h;
683 return EVIL_RETURN (h);
686 /* A clone of build_type_conversion for checking user-defined conversions in
687 overload resolution. */
689 static int
690 user_harshness (type, parmtype)
691 register tree type, parmtype;
693 tree conv;
694 tree winner = NULL_TREE;
695 int code;
698 tree typename = build_typename_overload (type);
699 if (lookup_fnfields (TYPE_BINFO (parmtype), typename, 0))
700 return 0;
703 for (conv = lookup_conversions (parmtype); conv; conv = TREE_CHAIN (conv))
705 struct harshness_code tmp;
706 tree cand = TREE_VALUE (conv);
708 if (winner && winner == cand)
709 continue;
711 tmp = convert_harshness (type, TREE_TYPE (TREE_TYPE (cand)), NULL_TREE);
712 if ((tmp.code < USER_CODE) && (tmp.distance >= 0))
714 if (winner)
715 return EVIL_CODE;
716 else
718 winner = cand;
719 code = tmp.code;
724 if (winner)
725 return code;
727 return -1;
730 #ifdef DEBUG_MATCHING
731 static char *
732 print_harshness (h)
733 struct harshness_code *h;
735 static char buf[1024];
736 char tmp[1024];
738 bzero (buf, 1024 * sizeof (char));
739 strcat (buf, "codes=[");
740 if (h->code & EVIL_CODE)
741 strcat (buf, "EVIL");
742 if (h->code & CONST_CODE)
743 strcat (buf, " CONST");
744 if (h->code & ELLIPSIS_CODE)
745 strcat (buf, " ELLIPSIS");
746 if (h->code & USER_CODE)
747 strcat (buf, " USER");
748 if (h->code & STD_CODE)
749 strcat (buf, " STD");
750 if (h->code & PROMO_CODE)
751 strcat (buf, " PROMO");
752 if (h->code & QUAL_CODE)
753 strcat (buf, " QUAL");
754 if (h->code & TRIVIAL_CODE)
755 strcat (buf, " TRIVIAL");
756 if (buf[0] == '\0')
757 strcat (buf, "0");
759 sprintf (tmp, "] distance=%d int_penalty=%d", h->distance, h->int_penalty);
761 strcat (buf, tmp);
763 return buf;
765 #endif
767 /* Algorithm: For each argument, calculate how difficult it is to
768 make FUNCTION accept that argument. If we can easily tell that
769 FUNCTION won't be acceptable to one of the arguments, then we
770 don't need to compute the ease of converting the other arguments,
771 since it will never show up in the intersection of all arguments'
772 favorite functions.
774 Conversions between builtin and user-defined types are allowed, but
775 no function involving such a conversion is preferred to one which
776 does not require such a conversion. Furthermore, such conversions
777 must be unique. */
779 void
780 compute_conversion_costs (function, tta_in, cp, arglen)
781 tree function;
782 tree tta_in;
783 struct candidate *cp;
784 int arglen;
786 tree ttf_in = TYPE_ARG_TYPES (TREE_TYPE (function));
787 tree ttf = ttf_in;
788 tree tta = tta_in;
790 /* Start out with no strikes against. */
791 int evil_strikes = 0;
792 int ellipsis_strikes = 0;
793 int user_strikes = 0;
794 int b_or_d_strikes = 0;
795 int easy_strikes = 0;
797 int strike_index = 0, win;
798 struct harshness_code lose;
799 extern int cp_silent;
801 #ifdef GATHER_STATISTICS
802 n_compute_conversion_costs++;
803 #endif
805 #ifndef DEBUG_MATCHING
806 /* We don't emit any warnings or errors while trying out each candidate. */
807 cp_silent = 1;
808 #endif
810 cp->function = function;
811 cp->arg = tta ? TREE_VALUE (tta) : NULL_TREE;
812 cp->u.bad_arg = 0; /* optimistic! */
814 cp->h.code = 0;
815 cp->h.distance = 0;
816 cp->h.int_penalty = 0;
817 bzero ((char *) cp->harshness,
818 (cp->h_len + 1) * sizeof (struct harshness_code));
820 while (ttf && tta)
822 struct harshness_code h;
824 if (ttf == void_list_node)
825 break;
827 if (type_unknown_p (TREE_VALUE (tta)))
829 /* Must perform some instantiation here. */
830 tree rhs = TREE_VALUE (tta);
831 tree lhstype = TREE_VALUE (ttf);
833 /* Keep quiet about possible contravariance violations. */
834 int old_inhibit_warnings = inhibit_warnings;
835 inhibit_warnings = 1;
837 /* @@ This is to undo what `grokdeclarator' does to
838 parameter types. It really should go through
839 something more general. */
841 TREE_TYPE (tta) = unknown_type_node;
842 rhs = instantiate_type (lhstype, rhs, 0);
843 inhibit_warnings = old_inhibit_warnings;
845 if (TREE_CODE (rhs) == ERROR_MARK)
846 h.code = EVIL_CODE;
847 else
848 h = convert_harshness (lhstype, TREE_TYPE (rhs), rhs);
850 else
852 #ifdef DEBUG_MATCHING
853 static tree old_function = NULL_TREE;
855 if (!old_function || function != old_function)
857 cp_error ("trying %D", function);
858 old_function = function;
861 cp_error (" doing (%T) %E against arg %T",
862 TREE_TYPE (TREE_VALUE (tta)), TREE_VALUE (tta),
863 TREE_VALUE (ttf));
864 #endif
866 h = convert_harshness (TREE_VALUE (ttf),
867 TREE_TYPE (TREE_VALUE (tta)),
868 TREE_VALUE (tta));
870 #ifdef DEBUG_MATCHING
871 cp_error (" evaluated %s", print_harshness (&h));
872 #endif
875 cp->harshness[strike_index] = h;
876 if ((h.code & EVIL_CODE)
877 || ((h.code & STD_CODE) && h.distance < 0))
879 cp->u.bad_arg = strike_index;
880 evil_strikes = 1;
882 else if (h.code & ELLIPSIS_CODE)
883 ellipsis_strikes += 1;
884 #if 0
885 /* This is never set by `convert_harshness'. */
886 else if (h.code & USER_CODE)
888 user_strikes += 1;
890 #endif
891 else
893 if ((h.code & STD_CODE) && h.distance)
895 if (h.distance > b_or_d_strikes)
896 b_or_d_strikes = h.distance;
898 else
899 easy_strikes += (h.code & (STD_CODE|PROMO_CODE|TRIVIAL_CODE));
900 cp->h.code |= h.code;
901 /* Make sure we communicate this. */
902 cp->h.int_penalty += h.int_penalty;
905 ttf = TREE_CHAIN (ttf);
906 tta = TREE_CHAIN (tta);
907 strike_index += 1;
910 if (tta)
912 /* ran out of formals, and parmlist is fixed size. */
913 if (ttf /* == void_type_node */)
915 cp->h.code = EVIL_CODE;
916 cp->u.bad_arg = -1;
917 cp_silent = 0;
918 return;
920 else
922 struct harshness_code h;
923 int l = list_length (tta);
924 ellipsis_strikes += l;
925 h.code = ELLIPSIS_CODE;
926 h.distance = 0;
927 h.int_penalty = 0;
928 for (; l; --l)
929 cp->harshness[strike_index++] = h;
932 else if (ttf && ttf != void_list_node)
934 /* ran out of actuals, and no defaults. */
935 if (TREE_PURPOSE (ttf) == NULL_TREE)
937 cp->h.code = EVIL_CODE;
938 cp->u.bad_arg = -2;
939 cp_silent = 0;
940 return;
942 /* Store index of first default. */
943 cp->harshness[arglen].distance = strike_index+1;
945 else
946 cp->harshness[arglen].distance = 0;
948 /* Argument list lengths work out, so don't need to check them again. */
949 if (evil_strikes)
951 /* We do not check for derived->base conversions here, since in
952 no case would they give evil strike counts, unless such conversions
953 are somehow ambiguous. */
955 /* See if any user-defined conversions apply.
956 But make sure that we do not loop. */
957 static int dont_convert_types = 0;
959 if (dont_convert_types)
961 cp->h.code = EVIL_CODE;
962 cp_silent = 0;
963 return;
966 win = 0; /* Only get one chance to win. */
967 ttf = TYPE_ARG_TYPES (TREE_TYPE (function));
968 tta = tta_in;
969 strike_index = 0;
970 evil_strikes = 0;
972 while (ttf && tta)
974 if (ttf == void_list_node)
975 break;
977 lose = cp->harshness[strike_index];
978 if ((lose.code & EVIL_CODE)
979 || ((lose.code & STD_CODE) && lose.distance < 0))
981 tree actual_type = TREE_TYPE (TREE_VALUE (tta));
982 tree formal_type = TREE_VALUE (ttf);
983 int extra_conversions = 0;
985 dont_convert_types = 1;
987 if (TREE_CODE (formal_type) == REFERENCE_TYPE)
988 formal_type = TREE_TYPE (formal_type);
989 if (TREE_CODE (actual_type) == REFERENCE_TYPE)
990 actual_type = TREE_TYPE (actual_type);
992 if (formal_type != error_mark_node
993 && actual_type != error_mark_node)
995 formal_type = complete_type (TYPE_MAIN_VARIANT (formal_type));
996 actual_type = complete_type (TYPE_MAIN_VARIANT (actual_type));
998 if (TYPE_HAS_CONSTRUCTOR (formal_type))
1000 /* If it has a constructor for this type,
1001 try to use it. */
1002 /* @@ There is no way to save this result yet, so
1003 success is a NULL_TREE for now. */
1004 if (convert_to_aggr (formal_type, TREE_VALUE (tta), 0, 1)
1005 != error_mark_node)
1006 win++;
1008 if (TYPE_LANG_SPECIFIC (actual_type)
1009 && TYPE_HAS_CONVERSION (actual_type))
1011 int extra = user_harshness (formal_type, actual_type);
1013 if (extra == EVIL_CODE)
1014 win += 2;
1015 else if (extra >= 0)
1017 win++;
1018 extra_conversions = extra;
1022 dont_convert_types = 0;
1024 if (win == 1)
1026 user_strikes += 1;
1027 cp->harshness[strike_index].code
1028 = USER_CODE | (extra_conversions ? STD_CODE : 0);
1029 win = 0;
1031 else
1033 if (cp->u.bad_arg > strike_index)
1034 cp->u.bad_arg = strike_index;
1036 evil_strikes = win ? 2 : 1;
1037 break;
1041 ttf = TREE_CHAIN (ttf);
1042 tta = TREE_CHAIN (tta);
1043 strike_index += 1;
1047 /* Const member functions get a small penalty because defaulting
1048 to const is less useful than defaulting to non-const. */
1049 /* This is bogus, it does not correspond to anything in the ARM.
1050 This code will be fixed when this entire section is rewritten
1051 to conform to the ARM. (mrs) */
1052 if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
1054 tree this_parm = TREE_VALUE (ttf_in);
1056 if (TREE_CODE (this_parm) == RECORD_TYPE /* Is `this' a sig ptr? */
1057 ? TYPE_READONLY (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (this_parm))))
1058 : TYPE_READONLY (TREE_TYPE (this_parm)))
1060 cp->harshness[0].code |= TRIVIAL_CODE;
1061 ++easy_strikes;
1063 else
1065 /* Calling a non-const member function from a const member function
1066 is probably invalid, but for now we let it only draw a warning.
1067 We indicate that such a mismatch has occurred by setting the
1068 harshness to a maximum value. */
1069 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tta_in))) == POINTER_TYPE
1070 && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (TREE_VALUE (tta_in))))))
1071 cp->harshness[0].code |= CONST_CODE;
1075 if (evil_strikes)
1076 cp->h.code = EVIL_CODE;
1077 if (ellipsis_strikes)
1078 cp->h.code |= ELLIPSIS_CODE;
1079 if (user_strikes)
1080 cp->h.code |= USER_CODE;
1081 cp_silent = 0;
1082 #ifdef DEBUG_MATCHING
1083 cp_error ("final eval %s", print_harshness (&cp->h));
1084 #endif
1087 /* Subroutine of ideal_candidate. See if X or Y is a better match
1088 than the other. */
1090 static int
1091 strictly_better (x, y)
1092 unsigned int x, y;
1094 unsigned short xor;
1096 if (x == y)
1097 return 0;
1099 xor = x ^ y;
1100 if (xor >= x || xor >= y)
1101 return 1;
1102 return 0;
1105 /* When one of several possible overloaded functions and/or methods
1106 can be called, choose the best candidate for overloading.
1108 BASETYPE is the context from which we start method resolution
1109 or NULL if we are comparing overloaded functions.
1110 CANDIDATES is the array of candidates we have to choose from.
1111 N_CANDIDATES is the length of CANDIDATES.
1112 PARMS is a TREE_LIST of parameters to the function we'll ultimately
1113 choose. It is modified in place when resolving methods. It is not
1114 modified in place when resolving overloaded functions.
1115 LEN is the length of the parameter list. */
1117 static struct candidate *
1118 ideal_candidate (candidates, n_candidates, len)
1119 struct candidate *candidates;
1120 int n_candidates;
1121 int len;
1123 struct candidate *cp = candidates+n_candidates;
1124 int i, j = -1, best_code;
1126 /* For each argument, sort the functions from best to worst for the arg.
1127 For each function that's not best for this arg, set its overall
1128 harshness to EVIL so that other args won't like it. The candidate
1129 list for the last argument is the intersection of all the best-liked
1130 functions. */
1132 qsort (candidates, n_candidates, sizeof (struct candidate),
1133 (int (*) PROTO((const void *, const void *))) rank_for_overload);
1134 best_code = cp[-1].h.code;
1136 /* If they're at least as good as each other, do an arg-by-arg check. */
1137 if (! strictly_better (cp[-1].h.code, cp[-2].h.code))
1139 int better = 0;
1140 int worse = 0;
1142 for (j = 0; j < n_candidates; j++)
1143 if (! strictly_better (candidates[j].h.code, best_code))
1144 break;
1146 qsort (candidates+j, n_candidates-j, sizeof (struct candidate),
1147 (int (*) PROTO((const void *, const void *))) rank_for_ideal);
1148 for (i = 0; i < len; i++)
1150 if (cp[-1].harshness[i].code < cp[-2].harshness[i].code)
1151 better = 1;
1152 else if (cp[-1].harshness[i].code > cp[-2].harshness[i].code)
1153 worse = 1;
1154 else if (cp[-1].harshness[i].code & STD_CODE)
1156 /* If it involves a standard conversion, let the
1157 inheritance lattice be the final arbiter. */
1158 if (cp[-1].harshness[i].distance > cp[-2].harshness[i].distance)
1159 worse = 1;
1160 else if (cp[-1].harshness[i].distance < cp[-2].harshness[i].distance)
1161 better = 1;
1163 else if (cp[-1].harshness[i].code & PROMO_CODE)
1165 /* For integral promotions, take into account a finer
1166 granularity for determining which types should be favored
1167 over others in such promotions. */
1168 if (cp[-1].harshness[i].int_penalty > cp[-2].harshness[i].int_penalty)
1169 worse = 1;
1170 else if (cp[-1].harshness[i].int_penalty < cp[-2].harshness[i].int_penalty)
1171 better = 1;
1175 if (! better || worse)
1176 return NULL;
1178 return cp-1;
1181 /* Assume that if the class referred to is not in the
1182 current class hierarchy, that it may be remote.
1183 PARENT is assumed to be of aggregate type here. */
1185 static int
1186 may_be_remote (parent)
1187 tree parent;
1189 if (TYPE_OVERLOADS_METHOD_CALL_EXPR (parent) == 0)
1190 return 0;
1192 if (current_class_type == NULL_TREE)
1193 return 0;
1195 if (parent == current_class_type)
1196 return 0;
1198 if (UNIQUELY_DERIVED_FROM_P (parent, current_class_type))
1199 return 0;
1200 return 1;
1203 tree
1204 build_vfield_ref (datum, type)
1205 tree datum, type;
1207 tree rval;
1208 int old_assume_nonnull_objects = flag_assume_nonnull_objects;
1210 if (datum == error_mark_node)
1211 return error_mark_node;
1213 /* Vtable references are always made from non-null objects. */
1214 flag_assume_nonnull_objects = 1;
1215 if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
1216 datum = convert_from_reference (datum);
1218 if (! TYPE_USES_COMPLEX_INHERITANCE (type))
1219 rval = build (COMPONENT_REF, TREE_TYPE (CLASSTYPE_VFIELD (type)),
1220 datum, CLASSTYPE_VFIELD (type));
1221 else
1222 rval = build_component_ref (datum, DECL_NAME (CLASSTYPE_VFIELD (type)), NULL_TREE, 0);
1223 flag_assume_nonnull_objects = old_assume_nonnull_objects;
1225 return rval;
1228 /* Build a call to a member of an object. I.e., one that overloads
1229 operator ()(), or is a pointer-to-function or pointer-to-method. */
1231 static tree
1232 build_field_call (basetype_path, instance_ptr, name, parms)
1233 tree basetype_path, instance_ptr, name, parms;
1235 tree field, instance;
1237 if (name == ctor_identifier || name == dtor_identifier)
1238 return NULL_TREE;
1240 if (instance_ptr == current_class_ptr)
1242 /* Check to see if we really have a reference to an instance variable
1243 with `operator()()' overloaded. */
1244 field = IDENTIFIER_CLASS_VALUE (name);
1246 if (field == NULL_TREE)
1248 cp_error ("`this' has no member named `%D'", name);
1249 return error_mark_node;
1252 if (TREE_CODE (field) == FIELD_DECL)
1254 /* If it's a field, try overloading operator (),
1255 or calling if the field is a pointer-to-function. */
1256 instance = build_component_ref_1 (current_class_ref, field, 0);
1257 if (instance == error_mark_node)
1258 return error_mark_node;
1260 if (TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1261 && (TYPE_OVERLOADS_CALL_EXPR (TREE_TYPE (instance))
1262 || flag_ansi_overloading))
1263 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL, instance, parms, NULL_TREE);
1265 if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1267 if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE)
1268 return build_function_call (instance, parms);
1269 else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE)
1270 return build_function_call (instance, expr_tree_cons (NULL_TREE, current_class_ptr, parms));
1273 return NULL_TREE;
1276 /* Check to see if this is not really a reference to an instance variable
1277 with `operator()()' overloaded. */
1278 field = lookup_field (basetype_path, name, 1, 0);
1280 /* This can happen if the reference was ambiguous or for access
1281 violations. */
1282 if (field == error_mark_node)
1283 return error_mark_node;
1285 if (field)
1287 tree basetype;
1288 tree ftype = TREE_TYPE (field);
1290 if (TREE_CODE (ftype) == REFERENCE_TYPE)
1291 ftype = TREE_TYPE (ftype);
1293 if (TYPE_LANG_SPECIFIC (ftype)
1294 && (TYPE_OVERLOADS_CALL_EXPR (ftype) || flag_ansi_overloading))
1296 /* Make the next search for this field very short. */
1297 basetype = DECL_FIELD_CONTEXT (field);
1298 instance_ptr = convert_pointer_to (basetype, instance_ptr);
1300 instance = build_indirect_ref (instance_ptr, NULL_PTR);
1301 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL,
1302 build_component_ref_1 (instance, field, 0),
1303 parms, NULL_TREE);
1305 if (TREE_CODE (ftype) == POINTER_TYPE)
1307 if (TREE_CODE (TREE_TYPE (ftype)) == FUNCTION_TYPE
1308 || TREE_CODE (TREE_TYPE (ftype)) == METHOD_TYPE)
1310 /* This is a member which is a pointer to function. */
1311 tree ref
1312 = build_component_ref_1 (build_indirect_ref (instance_ptr,
1313 NULL_PTR),
1314 field, LOOKUP_COMPLAIN);
1315 if (ref == error_mark_node)
1316 return error_mark_node;
1317 return build_function_call (ref, parms);
1320 else if (TREE_CODE (ftype) == METHOD_TYPE)
1322 error ("invalid call via pointer-to-member function");
1323 return error_mark_node;
1325 else
1326 return NULL_TREE;
1328 return NULL_TREE;
1331 static tree
1332 find_scoped_type (type, inner_name, inner_types)
1333 tree type, inner_name, inner_types;
1335 tree tags = CLASSTYPE_TAGS (type);
1337 while (tags)
1339 /* The TREE_PURPOSE of an enum tag (which becomes a member of the
1340 enclosing class) is set to the name for the enum type. So, if
1341 inner_name is `bar', and we strike `baz' for `enum bar { baz }',
1342 then this test will be true. */
1343 if (TREE_PURPOSE (tags) == inner_name)
1345 if (inner_types == NULL_TREE)
1346 return TYPE_MAIN_DECL (TREE_VALUE (tags));
1347 return resolve_scope_to_name (TREE_VALUE (tags), inner_types);
1349 tags = TREE_CHAIN (tags);
1352 /* Look for a TYPE_DECL. */
1353 for (tags = TYPE_FIELDS (type); tags; tags = TREE_CHAIN (tags))
1354 if (TREE_CODE (tags) == TYPE_DECL && DECL_NAME (tags) == inner_name)
1356 /* Code by raeburn. */
1357 if (inner_types == NULL_TREE)
1358 return tags;
1359 return resolve_scope_to_name (TREE_TYPE (tags), inner_types);
1362 return NULL_TREE;
1365 /* Resolve an expression NAME1::NAME2::...::NAMEn to
1366 the name that names the above nested type. INNER_TYPES
1367 is a chain of nested type names (held together by SCOPE_REFs);
1368 OUTER_TYPE is the type we know to enclose INNER_TYPES.
1369 Returns NULL_TREE if there is an error. */
1371 tree
1372 resolve_scope_to_name (outer_type, inner_stuff)
1373 tree outer_type, inner_stuff;
1375 register tree tmp;
1376 tree inner_name, inner_type;
1378 if (outer_type == NULL_TREE && current_class_type != NULL_TREE)
1380 /* We first try to look for a nesting in our current class context,
1381 then try any enclosing classes. */
1382 tree type = current_class_type;
1384 while (type && (TREE_CODE (type) == RECORD_TYPE
1385 || TREE_CODE (type) == UNION_TYPE))
1387 tree rval = resolve_scope_to_name (type, inner_stuff);
1389 if (rval != NULL_TREE)
1390 return rval;
1391 type = DECL_CONTEXT (TYPE_MAIN_DECL (type));
1395 if (TREE_CODE (inner_stuff) == SCOPE_REF)
1397 inner_name = TREE_OPERAND (inner_stuff, 0);
1398 inner_type = TREE_OPERAND (inner_stuff, 1);
1400 else
1402 inner_name = inner_stuff;
1403 inner_type = NULL_TREE;
1406 if (outer_type == NULL_TREE)
1408 tree x;
1409 /* If we have something that's already a type by itself,
1410 use that. */
1411 if (IDENTIFIER_HAS_TYPE_VALUE (inner_name))
1413 if (inner_type)
1414 return resolve_scope_to_name (IDENTIFIER_TYPE_VALUE (inner_name),
1415 inner_type);
1416 return inner_name;
1419 x = lookup_name (inner_name, 0);
1421 if (x && TREE_CODE (x) == NAMESPACE_DECL)
1423 x = lookup_namespace_name (x, inner_type);
1424 return x;
1426 return NULL_TREE;
1429 if (! IS_AGGR_TYPE (outer_type))
1430 return NULL_TREE;
1432 /* Look for member classes or enums. */
1433 tmp = find_scoped_type (outer_type, inner_name, inner_type);
1435 /* If it's not a type in this class, then go down into the
1436 base classes and search there. */
1437 if (! tmp && TYPE_BINFO (outer_type))
1439 tree binfos = TYPE_BINFO_BASETYPES (outer_type);
1440 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
1442 for (i = 0; i < n_baselinks; i++)
1444 tree base_binfo = TREE_VEC_ELT (binfos, i);
1445 tmp = resolve_scope_to_name (BINFO_TYPE (base_binfo), inner_stuff);
1446 if (tmp)
1447 return tmp;
1449 tmp = NULL_TREE;
1452 return tmp;
1455 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
1456 This is how virtual function calls are avoided. */
1458 tree
1459 build_scoped_method_call (exp, basetype, name, parms)
1460 tree exp, basetype, name, parms;
1462 /* Because this syntactic form does not allow
1463 a pointer to a base class to be `stolen',
1464 we need not protect the derived->base conversion
1465 that happens here.
1467 @@ But we do have to check access privileges later. */
1468 tree binfo, decl;
1469 tree type = TREE_TYPE (exp);
1471 if (type == error_mark_node
1472 || basetype == error_mark_node)
1473 return error_mark_node;
1475 if (processing_template_decl)
1477 if (TREE_CODE (name) == BIT_NOT_EXPR)
1479 tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1480 name = build_min_nt (BIT_NOT_EXPR, type);
1482 name = build_min_nt (SCOPE_REF, basetype, name);
1483 return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
1486 if (TREE_CODE (type) == REFERENCE_TYPE)
1487 type = TREE_TYPE (type);
1489 if (TREE_CODE (basetype) == TREE_VEC)
1491 binfo = basetype;
1492 basetype = BINFO_TYPE (binfo);
1494 else
1495 binfo = NULL_TREE;
1497 /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
1498 that explicit ~int is caught in the parser; this deals with typedefs
1499 and template parms. */
1500 if (TREE_CODE (name) == BIT_NOT_EXPR && ! IS_AGGR_TYPE (basetype))
1502 if (type != basetype)
1503 cp_error ("type of `%E' does not match destructor type `%T' (type was `%T')",
1504 exp, basetype, type);
1505 name = TREE_OPERAND (name, 0);
1506 if (basetype != name && basetype != get_type_value (name))
1507 cp_error ("qualified type `%T' does not match destructor name `~%T'",
1508 basetype, name);
1509 return cp_convert (void_type_node, exp);
1512 if (! is_aggr_type (basetype, 1))
1513 return error_mark_node;
1515 if (! IS_AGGR_TYPE (type))
1517 cp_error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
1518 exp, type);
1519 return error_mark_node;
1522 if (! binfo)
1524 binfo = get_binfo (basetype, type, 1);
1525 if (binfo == error_mark_node)
1526 return error_mark_node;
1527 if (! binfo)
1528 error_not_base_type (basetype, type);
1531 if (binfo)
1533 if (TREE_CODE (exp) == INDIRECT_REF)
1534 decl = build_indirect_ref
1535 (convert_pointer_to_real
1536 (binfo, build_unary_op (ADDR_EXPR, exp, 0)), NULL_PTR);
1537 else
1538 decl = build_scoped_ref (exp, basetype);
1540 /* Call to a destructor. */
1541 if (TREE_CODE (name) == BIT_NOT_EXPR)
1543 /* Explicit call to destructor. */
1544 name = TREE_OPERAND (name, 0);
1545 if (! (name == TYPE_MAIN_VARIANT (TREE_TYPE (decl))
1546 || name == constructor_name (TREE_TYPE (decl))
1547 || TREE_TYPE (decl) == get_type_value (name)))
1549 cp_error
1550 ("qualified type `%T' does not match destructor name `~%T'",
1551 TREE_TYPE (decl), name);
1552 return error_mark_node;
1554 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
1555 return cp_convert (void_type_node, exp);
1557 return build_delete (TREE_TYPE (decl), decl, integer_two_node,
1558 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
1562 /* Call to a method. */
1563 return build_method_call (decl, name, parms, binfo,
1564 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
1566 return error_mark_node;
1569 static void
1570 print_candidates (candidates)
1571 tree candidates;
1573 cp_error_at ("candidates are: %D", TREE_VALUE (candidates));
1574 candidates = TREE_CHAIN (candidates);
1576 while (candidates)
1578 cp_error_at (" %D", TREE_VALUE (candidates));
1579 candidates = TREE_CHAIN (candidates);
1583 static void
1584 print_n_candidates (candidates, n)
1585 struct candidate *candidates;
1586 int n;
1588 int i;
1590 cp_error_at ("candidates are: %D", candidates[0].function);
1591 for (i = 1; i < n; i++)
1592 cp_error_at (" %D", candidates[i].function);
1595 /* We want the address of a function or method. We avoid creating a
1596 pointer-to-member function. */
1598 tree
1599 build_addr_func (function)
1600 tree function;
1602 tree type = TREE_TYPE (function);
1604 /* We have to do these by hand to avoid real pointer to member
1605 functions. */
1606 if (TREE_CODE (type) == METHOD_TYPE)
1608 tree addr;
1610 type = build_pointer_type (type);
1612 if (mark_addressable (function) == 0)
1613 return error_mark_node;
1615 addr = build1 (ADDR_EXPR, type, function);
1617 /* Address of a static or external variable or function counts
1618 as a constant */
1619 if (staticp (function))
1620 TREE_CONSTANT (addr) = 1;
1622 function = addr;
1624 else
1625 function = default_conversion (function);
1627 return function;
1630 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
1631 POINTER_TYPE to those. Note, pointer to member function types
1632 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
1634 tree
1635 build_call (function, result_type, parms)
1636 tree function, result_type, parms;
1638 int is_constructor = 0;
1640 function = build_addr_func (function);
1642 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
1644 sorry ("unable to call pointer to member function here");
1645 return error_mark_node;
1648 if (TREE_CODE (function) == ADDR_EXPR
1649 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1650 && DECL_CONSTRUCTOR_P (TREE_OPERAND (function, 0)))
1651 is_constructor = 1;
1653 function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
1654 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
1655 TREE_TYPE (function) = result_type;
1656 TREE_SIDE_EFFECTS (function) = 1;
1658 return function;
1661 static tree
1662 default_parm_conversions (parms, last)
1663 tree parms, *last;
1665 tree parm, parmtypes = NULL_TREE;
1667 *last = NULL_TREE;
1669 for (parm = parms; parm; parm = TREE_CHAIN (parm))
1671 tree t = TREE_TYPE (TREE_VALUE (parm));
1673 if (TREE_CODE (t) == OFFSET_TYPE
1674 || TREE_CODE (t) == METHOD_TYPE
1675 || TREE_CODE (t) == FUNCTION_TYPE)
1677 TREE_VALUE (parm) = default_conversion (TREE_VALUE (parm));
1678 t = TREE_TYPE (TREE_VALUE (parm));
1681 if (t == error_mark_node)
1682 return error_mark_node;
1684 *last = build_tree_list (NULL_TREE, t);
1685 parmtypes = chainon (parmtypes, *last);
1688 return parmtypes;
1692 /* Build something of the form ptr->method (args)
1693 or object.method (args). This can also build
1694 calls to constructors, and find friends.
1696 Member functions always take their class variable
1697 as a pointer.
1699 INSTANCE is a class instance.
1701 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
1703 PARMS help to figure out what that NAME really refers to.
1705 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
1706 down to the real instance type to use for access checking. We need this
1707 information to get protected accesses correct. This parameter is used
1708 by build_member_call.
1710 FLAGS is the logical disjunction of zero or more LOOKUP_
1711 flags. See cp-tree.h for more info.
1713 If this is all OK, calls build_function_call with the resolved
1714 member function.
1716 This function must also handle being called to perform
1717 initialization, promotion/coercion of arguments, and
1718 instantiation of default parameters.
1720 Note that NAME may refer to an instance variable name. If
1721 `operator()()' is defined for the type of that field, then we return
1722 that result. */
1724 tree
1725 build_method_call (instance, name, parms, basetype_path, flags)
1726 tree instance, name, parms, basetype_path;
1727 int flags;
1729 register tree function, fntype, value_type;
1730 register tree basetype, save_basetype;
1731 register tree baselink, result, parmtypes;
1732 tree last;
1733 int pass;
1734 tree access = access_public_node;
1735 tree orig_basetype = basetype_path ? BINFO_TYPE (basetype_path) : NULL_TREE;
1737 /* Range of cases for vtable optimization. */
1738 enum vtable_needs { not_needed, maybe_needed, unneeded, needed };
1739 enum vtable_needs need_vtbl = not_needed;
1741 char *name_kind;
1742 tree save_name = name;
1743 int ever_seen = 0;
1744 tree instance_ptr = NULL_TREE;
1745 int all_virtual = flag_all_virtual;
1746 int static_call_context = 0;
1747 tree found_fns = NULL_TREE;
1749 /* Keep track of `const' and `volatile' objects. */
1750 int constp, volatilep;
1752 #ifdef GATHER_STATISTICS
1753 n_build_method_call++;
1754 #endif
1756 if (instance == error_mark_node
1757 || name == error_mark_node
1758 || parms == error_mark_node
1759 || (instance != NULL_TREE && TREE_TYPE (instance) == error_mark_node))
1760 return error_mark_node;
1762 if (processing_template_decl)
1764 if (TREE_CODE (name) == BIT_NOT_EXPR)
1766 tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1767 name = build_min_nt (BIT_NOT_EXPR, type);
1770 return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
1773 /* This is the logic that magically deletes the second argument to
1774 operator delete, if it is not needed. */
1775 if (name == ansi_opname[(int) DELETE_EXPR] && list_length (parms)==2)
1777 tree save_last = TREE_CHAIN (parms);
1778 tree result;
1779 /* get rid of unneeded argument */
1780 TREE_CHAIN (parms) = NULL_TREE;
1781 result = build_method_call (instance, name, parms, basetype_path,
1782 (LOOKUP_SPECULATIVELY|flags)
1783 &~LOOKUP_COMPLAIN);
1784 /* If it finds a match, return it. */
1785 if (result)
1786 return build_method_call (instance, name, parms, basetype_path, flags);
1787 /* If it doesn't work, two argument delete must work */
1788 TREE_CHAIN (parms) = save_last;
1790 /* We already know whether it's needed or not for vec delete. */
1791 else if (name == ansi_opname[(int) VEC_DELETE_EXPR]
1792 && TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1793 && ! TYPE_VEC_DELETE_TAKES_SIZE (TREE_TYPE (instance)))
1794 TREE_CHAIN (parms) = NULL_TREE;
1796 if (TREE_CODE (name) == BIT_NOT_EXPR)
1798 flags |= LOOKUP_DESTRUCTOR;
1799 name = TREE_OPERAND (name, 0);
1800 if (parms)
1801 error ("destructors take no parameters");
1802 basetype = TREE_TYPE (instance);
1803 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1804 basetype = TREE_TYPE (basetype);
1805 if (! (name == basetype
1806 || (IS_AGGR_TYPE (basetype)
1807 && name == constructor_name (basetype))
1808 || basetype == get_type_value (name)))
1810 cp_error ("destructor name `~%D' does not match type `%T' of expression",
1811 name, basetype);
1812 return cp_convert (void_type_node, instance);
1815 if (! TYPE_HAS_DESTRUCTOR (complete_type (basetype)))
1816 return cp_convert (void_type_node, instance);
1817 instance = default_conversion (instance);
1818 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1819 return build_delete (build_pointer_type (basetype),
1820 instance_ptr, integer_two_node,
1821 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
1824 if (flag_ansi_overloading)
1825 return build_new_method_call (instance, name, parms, basetype_path, flags);
1828 char *xref_name;
1830 /* Initialize name for error reporting. */
1831 if (IDENTIFIER_OPNAME_P (name) && ! IDENTIFIER_TYPENAME_P (name))
1833 char *p = operator_name_string (name);
1834 xref_name = (char *)alloca (strlen (p) + 10);
1835 sprintf (xref_name, "operator %s", p);
1837 else if (TREE_CODE (name) == SCOPE_REF)
1838 xref_name = IDENTIFIER_POINTER (TREE_OPERAND (name, 1));
1839 else
1840 xref_name = IDENTIFIER_POINTER (name);
1842 GNU_xref_call (current_function_decl, xref_name);
1845 if (instance == NULL_TREE)
1847 basetype = NULL_TREE;
1848 /* Check cases where this is really a call to raise
1849 an exception. */
1850 if (current_class_type && TREE_CODE (name) == IDENTIFIER_NODE)
1852 basetype = purpose_member (name, CLASSTYPE_TAGS (current_class_type));
1853 if (basetype)
1854 basetype = TREE_VALUE (basetype);
1856 else if (TREE_CODE (name) == SCOPE_REF
1857 && TREE_CODE (TREE_OPERAND (name, 0)) == IDENTIFIER_NODE)
1859 if (! is_aggr_typedef (TREE_OPERAND (name, 0), 1))
1860 return error_mark_node;
1861 basetype = purpose_member (TREE_OPERAND (name, 1),
1862 CLASSTYPE_TAGS (IDENTIFIER_TYPE_VALUE (TREE_OPERAND (name, 0))));
1863 if (basetype)
1864 basetype = TREE_VALUE (basetype);
1867 if (basetype != NULL_TREE)
1869 /* call to a constructor... */
1870 else if (basetype_path)
1872 basetype = BINFO_TYPE (basetype_path);
1873 if (name == TYPE_IDENTIFIER (basetype))
1874 name = ctor_identifier;
1876 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
1878 basetype = IDENTIFIER_TYPE_VALUE (name);
1879 name = ctor_identifier;
1881 else
1883 tree typedef_name = lookup_name (name, 1);
1884 if (typedef_name && TREE_CODE (typedef_name) == TYPE_DECL)
1886 /* Canonicalize the typedef name. */
1887 basetype = TREE_TYPE (typedef_name);
1888 name = ctor_identifier;
1890 else
1892 cp_error ("no constructor named `%T' in scope",
1893 name);
1894 return error_mark_node;
1898 if (! IS_AGGR_TYPE (basetype))
1900 non_aggr_error:
1901 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
1902 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
1903 name, instance, basetype);
1905 return error_mark_node;
1908 else if (instance == current_class_ref || instance == current_class_ptr)
1910 /* When doing initialization, we side-effect the TREE_TYPE of
1911 current_class_ref, hence we cannot set up BASETYPE from CURRENT_CLASS_TYPE. */
1912 basetype = TREE_TYPE (current_class_ref);
1914 /* Anything manifestly `this' in constructors and destructors
1915 has a known type, so virtual function tables are not needed. */
1916 if (TYPE_VIRTUAL_P (basetype)
1917 && !(flags & LOOKUP_NONVIRTUAL))
1918 need_vtbl = (dtor_label || ctor_label)
1919 ? unneeded : maybe_needed;
1921 /* If `this' is a signature pointer and `name' is not a constructor,
1922 we are calling a signature member function. In that case, set the
1923 `basetype' to the signature type and dereference the `optr' field. */
1924 if (IS_SIGNATURE_POINTER (basetype)
1925 && TYPE_IDENTIFIER (basetype) != name)
1927 basetype = SIGNATURE_TYPE (basetype);
1928 instance_ptr = instance;
1929 basetype_path = TYPE_BINFO (basetype);
1931 else
1933 instance = current_class_ref;
1934 instance_ptr = current_class_ptr;
1935 basetype_path = TYPE_BINFO (current_class_type);
1937 result = build_field_call (basetype_path, instance_ptr, name, parms);
1939 if (result)
1940 return result;
1942 else if (TREE_CODE (instance) == RESULT_DECL)
1944 basetype = TREE_TYPE (instance);
1945 /* Should we ever have to make a virtual function reference
1946 from a RESULT_DECL, know that it must be of fixed type
1947 within the scope of this function. */
1948 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
1949 need_vtbl = maybe_needed;
1950 instance_ptr = build1 (ADDR_EXPR, build_pointer_type (basetype), instance);
1952 else
1954 /* The MAIN_VARIANT of the type that `instance_ptr' winds up being. */
1955 tree inst_ptr_basetype;
1957 static_call_context
1958 = (TREE_CODE (instance) == INDIRECT_REF
1959 && TREE_CODE (TREE_OPERAND (instance, 0)) == NOP_EXPR
1960 && TREE_OPERAND (TREE_OPERAND (instance, 0), 0) == error_mark_node);
1962 if (TREE_CODE (instance) == OFFSET_REF)
1963 instance = resolve_offset_ref (instance);
1965 /* the base type of an instance variable is pointer to class */
1966 basetype = TREE_TYPE (instance);
1968 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1970 basetype = TREE_TYPE (basetype);
1971 if (! IS_AGGR_TYPE (basetype))
1972 goto non_aggr_error;
1973 /* Call to convert not needed because we are remaining
1974 within the same type. */
1975 instance_ptr = build1 (NOP_EXPR, build_pointer_type (basetype),
1976 instance);
1977 inst_ptr_basetype = TYPE_MAIN_VARIANT (basetype);
1979 else
1981 if (! IS_AGGR_TYPE (basetype)
1982 && ! (TYPE_LANG_SPECIFIC (basetype)
1983 && (IS_SIGNATURE_POINTER (basetype)
1984 || IS_SIGNATURE_REFERENCE (basetype))))
1985 goto non_aggr_error;
1987 /* If `instance' is a signature pointer/reference and `name' is
1988 not a constructor, we are calling a signature member function.
1989 In that case set the `basetype' to the signature type. */
1990 if ((IS_SIGNATURE_POINTER (basetype)
1991 || IS_SIGNATURE_REFERENCE (basetype))
1992 && TYPE_IDENTIFIER (basetype) != name)
1993 basetype = SIGNATURE_TYPE (basetype);
1995 basetype = complete_type (basetype);
1997 if ((IS_SIGNATURE (basetype)
1998 && (instance_ptr = instance))
1999 || (lvalue_p (instance)
2000 && (instance_ptr = build_unary_op (ADDR_EXPR, instance, 0)))
2001 || (instance_ptr = unary_complex_lvalue (ADDR_EXPR, instance)))
2003 if (instance_ptr == error_mark_node)
2004 return error_mark_node;
2006 else if (TREE_CODE (instance) == NOP_EXPR
2007 || TREE_CODE (instance) == CONSTRUCTOR)
2009 /* A cast is not an lvalue. Initialize a fresh temp
2010 with the value we are casting from, and proceed with
2011 that temporary. We can't cast to a reference type,
2012 so that simplifies the initialization to something
2013 we can manage. */
2014 tree temp = get_temp_name (TREE_TYPE (instance), 0);
2015 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
2016 expand_aggr_init (temp, instance, 0, flags);
2017 else
2019 store_init_value (temp, instance);
2020 expand_decl_init (temp);
2022 instance = temp;
2023 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
2025 else
2027 if (TREE_CODE (instance) != CALL_EXPR)
2028 my_friendly_abort (125);
2029 if (TYPE_NEEDS_CONSTRUCTING (basetype))
2030 instance = build_cplus_new (basetype, instance);
2031 else
2033 instance = get_temp_name (basetype, 0);
2034 TREE_ADDRESSABLE (instance) = 1;
2036 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
2038 /* @@ Should we call comp_target_types here? */
2039 if (IS_SIGNATURE (basetype))
2040 inst_ptr_basetype = basetype;
2041 else
2042 inst_ptr_basetype = TREE_TYPE (TREE_TYPE (instance_ptr));
2043 if (TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (inst_ptr_basetype))
2044 basetype = inst_ptr_basetype;
2045 else
2047 instance_ptr = cp_convert (build_pointer_type (basetype), instance_ptr);
2048 if (instance_ptr == error_mark_node)
2049 return error_mark_node;
2053 /* After converting `instance_ptr' above, `inst_ptr_basetype' was
2054 not updated, so we use `basetype' instead. */
2055 if (basetype_path == NULL_TREE
2056 && IS_SIGNATURE (basetype))
2057 basetype_path = TYPE_BINFO (basetype);
2058 else if (basetype_path == NULL_TREE
2059 || (BINFO_TYPE (basetype_path)
2060 != TYPE_MAIN_VARIANT (inst_ptr_basetype)))
2061 basetype_path = TYPE_BINFO (inst_ptr_basetype);
2063 result = build_field_call (basetype_path, instance_ptr, name, parms);
2064 if (result)
2065 return result;
2067 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
2069 if (TREE_SIDE_EFFECTS (instance_ptr))
2071 /* This action is needed because the instance is needed
2072 for providing the base of the virtual function table.
2073 Without using a SAVE_EXPR, the function we are building
2074 may be called twice, or side effects on the instance
2075 variable (such as a post-increment), may happen twice. */
2076 instance_ptr = save_expr (instance_ptr);
2077 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2079 else if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
2081 /* This happens when called for operator new (). */
2082 instance = build_indirect_ref (instance, NULL_PTR);
2085 need_vtbl = maybe_needed;
2089 if (save_name == ctor_identifier)
2090 save_name = TYPE_IDENTIFIER (basetype);
2092 if (TYPE_SIZE (complete_type (basetype)) == 0)
2094 /* This is worth complaining about, I think. */
2095 cp_error ("cannot lookup method in incomplete type `%T'", basetype);
2096 return error_mark_node;
2099 save_basetype = TYPE_MAIN_VARIANT (basetype);
2101 parmtypes = default_parm_conversions (parms, &last);
2102 if (parmtypes == error_mark_node)
2104 return error_mark_node;
2107 if (instance && IS_SIGNATURE (basetype))
2109 /* @@ Should this be the constp/volatilep flags for the optr field
2110 of the signature pointer? */
2111 constp = TYPE_READONLY (basetype);
2112 volatilep = TYPE_VOLATILE (basetype);
2113 parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
2115 else if (instance)
2117 /* TREE_READONLY (instance) fails for references. */
2118 constp = TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr)));
2119 volatilep = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr)));
2120 parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
2122 else
2124 /* Raw constructors are always in charge. */
2125 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2126 && ! (flags & LOOKUP_HAS_IN_CHARGE))
2128 flags |= LOOKUP_HAS_IN_CHARGE;
2129 parms = expr_tree_cons (NULL_TREE, integer_one_node, parms);
2130 parmtypes = scratch_tree_cons (NULL_TREE, integer_type_node, parmtypes);
2133 constp = 0;
2134 volatilep = 0;
2135 instance_ptr = build_int_2 (0, 0);
2136 TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
2137 parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
2140 parmtypes = scratch_tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes);
2142 if (last == NULL_TREE)
2143 last = parmtypes;
2145 /* Look up function name in the structure type definition. */
2147 /* FIXME Axe most of this now? */
2148 if ((IDENTIFIER_HAS_TYPE_VALUE (name)
2149 && ! IDENTIFIER_OPNAME_P (name)
2150 && IS_AGGR_TYPE (IDENTIFIER_TYPE_VALUE (name)))
2151 || name == constructor_name (basetype)
2152 || name == ctor_identifier)
2154 tree tmp = NULL_TREE;
2155 if (IDENTIFIER_TYPE_VALUE (name) == basetype
2156 || name == constructor_name (basetype)
2157 || name == ctor_identifier)
2158 tmp = TYPE_BINFO (basetype);
2159 else
2160 tmp = get_binfo (IDENTIFIER_TYPE_VALUE (name), basetype, 0);
2162 if (tmp != NULL_TREE)
2164 name_kind = "constructor";
2166 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2167 && ! (flags & LOOKUP_HAS_IN_CHARGE))
2169 /* Constructors called for initialization
2170 only are never in charge. */
2171 tree tmplist;
2173 flags |= LOOKUP_HAS_IN_CHARGE;
2174 tmplist = expr_tree_cons (NULL_TREE, integer_zero_node,
2175 TREE_CHAIN (parms));
2176 TREE_CHAIN (parms) = tmplist;
2177 tmplist = scratch_tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
2178 TREE_CHAIN (parmtypes) = tmplist;
2180 basetype = BINFO_TYPE (tmp);
2182 else
2183 name_kind = "method";
2185 else
2186 name_kind = "method";
2188 if (basetype_path == NULL_TREE
2189 || BINFO_TYPE (basetype_path) != TYPE_MAIN_VARIANT (basetype))
2190 basetype_path = TYPE_BINFO (basetype);
2191 result = lookup_fnfields (basetype_path, name,
2192 (flags & LOOKUP_COMPLAIN));
2193 if (result == error_mark_node)
2194 return error_mark_node;
2196 for (pass = 0; pass < 2; pass++)
2198 struct candidate *candidates;
2199 struct candidate *cp;
2200 int len;
2201 unsigned best = 1;
2203 baselink = result;
2205 if (pass > 0)
2207 candidates
2208 = (struct candidate *) alloca ((ever_seen+1)
2209 * sizeof (struct candidate));
2210 bzero ((char *) candidates, (ever_seen + 1) * sizeof (struct candidate));
2211 cp = candidates;
2212 len = list_length (parms);
2213 ever_seen = 0;
2215 /* First see if a global function has a shot at it. */
2216 if (flags & LOOKUP_GLOBAL)
2218 tree friend_parms;
2219 tree parm = instance_ptr;
2221 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE)
2222 parm = convert_from_reference (parm);
2223 else if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE)
2224 parm = build_indirect_ref (parm, "friendifying parms (compiler error)");
2225 else
2226 my_friendly_abort (167);
2228 friend_parms = expr_tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
2230 cp->h_len = len;
2231 cp->harshness = (struct harshness_code *)
2232 alloca ((len + 1) * sizeof (struct harshness_code));
2234 result = build_overload_call_real (name, friend_parms, 0, cp, 1);
2236 /* If it turns out to be the one we were actually looking for
2237 (it was probably a friend function), the return the
2238 good result. */
2239 if (TREE_CODE (result) == CALL_EXPR)
2240 return result;
2242 while ((cp->h.code & EVIL_CODE) == 0)
2244 /* non-standard uses: set the field to 0 to indicate
2245 we are using a non-member function. */
2246 cp->u.field = 0;
2247 if (cp->harshness[len].distance == 0
2248 && cp->h.code < best)
2249 best = cp->h.code;
2250 cp += 1;
2255 if (baselink)
2257 /* We have a hit (of sorts). If the parameter list is
2258 "error_mark_node", or some variant thereof, it won't
2259 match any methods. Since we have verified that the is
2260 some method vaguely matching this one (in name at least),
2261 silently return.
2263 Don't stop for friends, however. */
2264 basetype_path = TREE_PURPOSE (baselink);
2266 function = TREE_VALUE (baselink);
2267 if (TREE_CODE (basetype_path) == TREE_LIST)
2268 basetype_path = TREE_VALUE (basetype_path);
2269 basetype = BINFO_TYPE (basetype_path);
2271 for (; function; function = DECL_CHAIN (function))
2273 #ifdef GATHER_STATISTICS
2274 n_inner_fields_searched++;
2275 #endif
2276 ever_seen++;
2277 if (pass > 0)
2278 found_fns = scratch_tree_cons (NULL_TREE, function, found_fns);
2280 /* Not looking for friends here. */
2281 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE
2282 && ! DECL_STATIC_FUNCTION_P (function))
2283 continue;
2285 if (pass > 0)
2287 tree these_parms = parms;
2289 #ifdef GATHER_STATISTICS
2290 n_inner_fields_searched++;
2291 #endif
2292 cp->h_len = len;
2293 cp->harshness = (struct harshness_code *)
2294 alloca ((len + 1) * sizeof (struct harshness_code));
2296 if (DECL_STATIC_FUNCTION_P (function))
2297 these_parms = TREE_CHAIN (these_parms);
2298 compute_conversion_costs (function, these_parms, cp, len);
2300 if ((cp->h.code & EVIL_CODE) == 0)
2302 cp->u.field = function;
2303 cp->function = function;
2304 cp->basetypes = basetype_path;
2306 /* Don't allow non-converting constructors to convert. */
2307 if (flags & LOOKUP_ONLYCONVERTING
2308 && DECL_LANG_SPECIFIC (function)
2309 && DECL_NONCONVERTING_P (function))
2310 continue;
2312 /* No "two-level" conversions. */
2313 if (flags & LOOKUP_NO_CONVERSION
2314 && (cp->h.code & USER_CODE))
2315 continue;
2317 cp++;
2323 if (pass == 0)
2325 tree igv = lookup_name_nonclass (name);
2327 /* No exact match could be found. Now try to find match
2328 using default conversions. */
2329 if ((flags & LOOKUP_GLOBAL) && igv)
2331 if (TREE_CODE (igv) == FUNCTION_DECL)
2332 ever_seen += 1;
2333 else if (TREE_CODE (igv) == TREE_LIST)
2334 ever_seen += count_functions (igv);
2337 if (ever_seen == 0)
2339 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2340 == LOOKUP_SPECULATIVELY)
2341 return NULL_TREE;
2343 TREE_CHAIN (last) = void_list_node;
2344 if (flags & LOOKUP_GLOBAL)
2345 cp_error ("no global or member function `%D(%A)' defined",
2346 save_name, parmtypes);
2347 else
2348 cp_error ("no member function `%T::%D(%A)' defined",
2349 save_basetype, save_name, TREE_CHAIN (parmtypes));
2350 return error_mark_node;
2352 continue;
2355 if (cp - candidates != 0)
2357 /* Rank from worst to best. Then cp will point to best one.
2358 Private fields have their bits flipped. For unsigned
2359 numbers, this should make them look very large.
2360 If the best alternate has a (signed) negative value,
2361 then all we ever saw were private members. */
2362 if (cp - candidates > 1)
2364 int n_candidates = cp - candidates;
2365 extern int warn_synth;
2366 TREE_VALUE (parms) = instance_ptr;
2367 cp = ideal_candidate (candidates, n_candidates, len);
2368 if (cp == (struct candidate *)0)
2370 if (flags & LOOKUP_COMPLAIN)
2372 TREE_CHAIN (last) = void_list_node;
2373 cp_error ("call of overloaded %s `%D(%A)' is ambiguous",
2374 name_kind, save_name, TREE_CHAIN (parmtypes));
2375 print_n_candidates (candidates, n_candidates);
2377 return error_mark_node;
2379 if (cp->h.code & EVIL_CODE)
2380 return error_mark_node;
2381 if (warn_synth
2382 && DECL_NAME (cp->function) == ansi_opname[MODIFY_EXPR]
2383 && DECL_ARTIFICIAL (cp->function)
2384 && n_candidates == 2)
2386 cp_warning ("using synthesized `%#D' for copy assignment",
2387 cp->function);
2388 cp_warning_at (" where cfront would use `%#D'",
2389 candidates->function);
2392 else if (cp[-1].h.code & EVIL_CODE)
2394 if (flags & LOOKUP_COMPLAIN)
2395 cp_error ("ambiguous type conversion requested for %s `%D'",
2396 name_kind, save_name);
2397 return error_mark_node;
2399 else
2400 cp--;
2402 /* The global function was the best, so use it. */
2403 if (cp->u.field == 0)
2405 /* We must convert the instance pointer into a reference type.
2406 Global overloaded functions can only either take
2407 aggregate objects (which come for free from references)
2408 or reference data types anyway. */
2409 TREE_VALUE (parms) = copy_node (instance_ptr);
2410 TREE_TYPE (TREE_VALUE (parms)) = build_reference_type (TREE_TYPE (TREE_TYPE (instance_ptr)));
2411 return build_function_call (cp->function, parms);
2414 function = cp->function;
2415 basetype_path = cp->basetypes;
2416 if (! DECL_STATIC_FUNCTION_P (function))
2417 TREE_VALUE (parms) = cp->arg;
2418 goto found_and_maybe_warn;
2421 if (flags & (LOOKUP_COMPLAIN|LOOKUP_SPECULATIVELY))
2423 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2424 == LOOKUP_SPECULATIVELY)
2425 return NULL_TREE;
2427 if (DECL_STATIC_FUNCTION_P (cp->function))
2428 parms = TREE_CHAIN (parms);
2429 if (ever_seen)
2431 if (flags & LOOKUP_SPECULATIVELY)
2432 return NULL_TREE;
2433 if (static_call_context
2434 && TREE_CODE (TREE_TYPE (cp->function)) == METHOD_TYPE)
2435 cp_error ("object missing in call to `%D'", cp->function);
2436 else if (ever_seen > 1)
2438 TREE_CHAIN (last) = void_list_node;
2439 cp_error ("no matching function for call to `%T::%D (%A)%V'",
2440 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (instance_ptr))),
2441 save_name, TREE_CHAIN (parmtypes),
2442 TREE_TYPE (TREE_TYPE (instance_ptr)));
2443 TREE_CHAIN (last) = NULL_TREE;
2444 print_candidates (found_fns);
2446 else
2447 report_type_mismatch (cp, parms, name_kind);
2448 return error_mark_node;
2451 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2452 == LOOKUP_COMPLAIN)
2454 cp_error ("%T has no method named %D", save_basetype, save_name);
2455 return error_mark_node;
2457 return NULL_TREE;
2459 continue;
2461 found_and_maybe_warn:
2462 if ((cp->harshness[0].code & CONST_CODE)
2463 /* 12.1p2: Constructors can be called for const objects. */
2464 && ! DECL_CONSTRUCTOR_P (cp->function))
2466 if (flags & LOOKUP_COMPLAIN)
2468 cp_error_at ("non-const member function `%D'", cp->function);
2469 error ("called for const object at this point in file");
2471 /* Not good enough for a match. */
2472 else
2473 return error_mark_node;
2475 goto found;
2477 /* Silently return error_mark_node. */
2478 return error_mark_node;
2480 found:
2481 if (flags & LOOKUP_PROTECT)
2482 access = compute_access (basetype_path, function);
2484 if (access == access_private_node)
2486 if (flags & LOOKUP_COMPLAIN)
2488 cp_error_at ("%s `%+#D' is %s", name_kind, function,
2489 TREE_PRIVATE (function) ? "private"
2490 : "from private base class");
2491 error ("within this context");
2493 return error_mark_node;
2495 else if (access == access_protected_node)
2497 if (flags & LOOKUP_COMPLAIN)
2499 cp_error_at ("%s `%+#D' %s", name_kind, function,
2500 TREE_PROTECTED (function) ? "is protected"
2501 : "has protected accessibility");
2502 error ("within this context");
2504 return error_mark_node;
2507 /* From here on down, BASETYPE is the type that INSTANCE_PTR's
2508 type (if it exists) is a pointer to. */
2510 if (DECL_ABSTRACT_VIRTUAL_P (function)
2511 && instance == current_class_ref
2512 && DECL_CONSTRUCTOR_P (current_function_decl)
2513 && ! (flags & LOOKUP_NONVIRTUAL)
2514 && value_member (function, get_abstract_virtuals (basetype)))
2515 cp_error ("abstract virtual `%#D' called from constructor", function);
2517 if (IS_SIGNATURE (basetype))
2519 if (static_call_context)
2521 cp_error ("cannot call signature member function `%T::%D' without signature pointer/reference",
2522 basetype, save_name);
2523 return error_mark_node;
2525 return build_signature_method_call (function, parms);
2528 function = DECL_MAIN_VARIANT (function);
2529 mark_used (function);
2531 fntype = TREE_TYPE (function);
2532 if (TREE_CODE (fntype) == POINTER_TYPE)
2533 fntype = TREE_TYPE (fntype);
2534 basetype = DECL_CLASS_CONTEXT (function);
2536 /* If we are referencing a virtual function from an object
2537 of effectively static type, then there is no need
2538 to go through the virtual function table. */
2539 if (need_vtbl == maybe_needed)
2541 int fixed_type = resolves_to_fixed_type_p (instance, 0);
2543 if (all_virtual == 1
2544 && DECL_VINDEX (function)
2545 && may_be_remote (basetype))
2546 need_vtbl = needed;
2547 else if (DECL_VINDEX (function))
2548 need_vtbl = fixed_type ? unneeded : needed;
2549 else
2550 need_vtbl = not_needed;
2553 if (TREE_CODE (fntype) == METHOD_TYPE && static_call_context
2554 && !DECL_CONSTRUCTOR_P (function))
2556 /* Let's be nasty to the user now, and give reasonable
2557 error messages. */
2558 instance_ptr = current_class_ptr;
2559 if (instance_ptr)
2561 if (basetype != current_class_type)
2563 if (basetype == error_mark_node)
2564 return error_mark_node;
2565 else
2567 if (orig_basetype != NULL_TREE)
2568 error_not_base_type (orig_basetype, current_class_type);
2569 else
2570 error_not_base_type (function, current_class_type);
2571 return error_mark_node;
2575 /* Only allow a static member function to call another static member
2576 function. */
2577 else if (DECL_LANG_SPECIFIC (function)
2578 && !DECL_STATIC_FUNCTION_P (function))
2580 cp_error ("cannot call member function `%D' without object",
2581 function);
2582 return error_mark_node;
2586 value_type = TREE_TYPE (fntype) ? TREE_TYPE (fntype) : void_type_node;
2588 if (TYPE_SIZE (complete_type (value_type)) == 0)
2590 if (flags & LOOKUP_COMPLAIN)
2591 incomplete_type_error (0, value_type);
2592 return error_mark_node;
2595 if (DECL_STATIC_FUNCTION_P (function))
2596 parms = convert_arguments (NULL_TREE, TYPE_ARG_TYPES (fntype),
2597 TREE_CHAIN (parms), function, LOOKUP_NORMAL);
2598 else if (need_vtbl == unneeded)
2600 int sub_flags = DECL_CONSTRUCTOR_P (function) ? flags : LOOKUP_NORMAL;
2601 basetype = TREE_TYPE (instance);
2602 if (TYPE_METHOD_BASETYPE (TREE_TYPE (function))
2603 != TYPE_MAIN_VARIANT (basetype))
2605 basetype = DECL_CLASS_CONTEXT (function);
2606 instance_ptr = convert_pointer_to (basetype, instance_ptr);
2607 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2609 parms = expr_tree_cons (NULL_TREE, instance_ptr,
2610 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, sub_flags));
2612 else
2614 if ((flags & LOOKUP_NONVIRTUAL) == 0)
2615 basetype = DECL_CONTEXT (function);
2617 /* First parm could be integer_zerop with casts like
2618 ((Object*)0)->Object::IsA() */
2619 if (!integer_zerop (TREE_VALUE (parms)))
2621 /* Since we can't have inheritance with a union, doing get_binfo
2622 on it won't work. We do all the convert_pointer_to_real
2623 stuff to handle MI correctly...for unions, that's not
2624 an issue, so we must short-circuit that extra work here. */
2625 tree tmp = TREE_TYPE (TREE_TYPE (TREE_VALUE (parms)));
2626 if (tmp != NULL_TREE && TREE_CODE (tmp) == UNION_TYPE)
2627 instance_ptr = TREE_VALUE (parms);
2628 else
2630 tree binfo = get_binfo (basetype,
2631 TREE_TYPE (TREE_TYPE (TREE_VALUE (parms))),
2633 instance_ptr = convert_pointer_to_real (binfo, TREE_VALUE (parms));
2635 instance_ptr
2636 = convert_pointer_to (build_type_variant (basetype,
2637 constp, volatilep),
2638 instance_ptr);
2640 if (TREE_CODE (instance_ptr) == COND_EXPR)
2642 instance_ptr = save_expr (instance_ptr);
2643 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2645 else if (TREE_CODE (instance_ptr) == NOP_EXPR
2646 && TREE_CODE (TREE_OPERAND (instance_ptr, 0)) == ADDR_EXPR
2647 && TREE_OPERAND (TREE_OPERAND (instance_ptr, 0), 0) == instance)
2649 /* The call to `convert_pointer_to' may return error_mark_node. */
2650 else if (instance_ptr == error_mark_node)
2651 return instance_ptr;
2652 else if (instance == NULL_TREE
2653 || TREE_CODE (instance) != INDIRECT_REF
2654 || TREE_OPERAND (instance, 0) != instance_ptr)
2655 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2657 parms = expr_tree_cons (NULL_TREE, instance_ptr,
2658 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, LOOKUP_NORMAL));
2661 if (parms == error_mark_node
2662 || (parms && TREE_CHAIN (parms) == error_mark_node))
2663 return error_mark_node;
2665 if (need_vtbl == needed)
2667 function = build_vfn_ref (&TREE_VALUE (parms), instance,
2668 DECL_VINDEX (function));
2669 TREE_TYPE (function) = build_pointer_type (fntype);
2672 if (TREE_CODE (function) == FUNCTION_DECL)
2673 GNU_xref_call (current_function_decl,
2674 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function)));
2676 result = build_call (function, value_type, parms);
2677 if (IS_AGGR_TYPE (value_type))
2678 result = build_cplus_new (value_type, result);
2679 result = convert_from_reference (result);
2680 return result;
2683 /* Similar to `build_method_call', but for overloaded non-member functions.
2684 The name of this function comes through NAME. The name depends
2685 on PARMS.
2687 Note that this function must handle simple `C' promotions,
2688 as well as variable numbers of arguments (...), and
2689 default arguments to boot.
2691 If the overloading is successful, we return a tree node which
2692 contains the call to the function.
2694 If overloading produces candidates which are probable, but not definite,
2695 we hold these candidates. If FINAL_CP is non-zero, then we are free
2696 to assume that final_cp points to enough storage for all candidates that
2697 this function might generate. The `harshness' array is preallocated for
2698 the first candidate, but not for subsequent ones.
2700 Note that the DECL_RTL of FUNCTION must be made to agree with this
2701 function's new name. */
2703 tree
2704 build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
2705 tree fnname, parms;
2706 int flags;
2707 struct candidate *final_cp;
2708 int require_complete;
2710 /* must check for overloading here */
2711 tree functions, function;
2712 tree parmtypes, last;
2713 register tree outer;
2714 int length;
2715 int parmlength = list_length (parms);
2717 struct candidate *candidates, *cp;
2719 if (final_cp)
2721 final_cp[0].h.code = 0;
2722 final_cp[0].h.distance = 0;
2723 final_cp[0].function = 0;
2724 /* end marker. */
2725 final_cp[1].h.code = EVIL_CODE;
2728 parmtypes = default_parm_conversions (parms, &last);
2729 if (parmtypes == error_mark_node)
2731 if (final_cp)
2732 final_cp->h.code = EVIL_CODE;
2733 return error_mark_node;
2736 if (last)
2737 TREE_CHAIN (last) = void_list_node;
2738 else
2739 parmtypes = void_list_node;
2741 if (is_overloaded_fn (fnname))
2743 functions = fnname;
2744 if (TREE_CODE (fnname) == TREE_LIST)
2745 fnname = TREE_PURPOSE (functions);
2746 else if (TREE_CODE (fnname) == FUNCTION_DECL)
2747 fnname = DECL_NAME (functions);
2749 else
2750 functions = lookup_name_nonclass (fnname);
2752 if (functions == NULL_TREE)
2754 if (flags & LOOKUP_SPECULATIVELY)
2755 return NULL_TREE;
2756 if (flags & LOOKUP_COMPLAIN)
2757 error ("only member functions apply");
2758 if (final_cp)
2759 final_cp->h.code = EVIL_CODE;
2760 return error_mark_node;
2763 if (TREE_CODE (functions) == FUNCTION_DECL && ! IDENTIFIER_OPNAME_P (fnname))
2765 functions = DECL_MAIN_VARIANT (functions);
2766 if (final_cp)
2768 /* We are just curious whether this is a viable alternative or
2769 not. */
2770 compute_conversion_costs (functions, parms, final_cp, parmlength);
2771 return functions;
2773 else
2774 return build_function_call_real (functions, parms, 1, flags);
2777 if (TREE_CODE (functions) == TREE_LIST
2778 && TREE_VALUE (functions) == NULL_TREE)
2780 if (flags & LOOKUP_SPECULATIVELY)
2781 return NULL_TREE;
2783 if (flags & LOOKUP_COMPLAIN)
2784 cp_error ("function `%D' declared overloaded, but no instances of that function declared",
2785 TREE_PURPOSE (functions));
2786 if (final_cp)
2787 final_cp->h.code = EVIL_CODE;
2788 return error_mark_node;
2791 length = count_functions (functions);
2793 if (final_cp)
2794 candidates = final_cp;
2795 else
2797 candidates
2798 = (struct candidate *)alloca ((length+1) * sizeof (struct candidate));
2799 bzero ((char *) candidates, (length + 1) * sizeof (struct candidate));
2802 cp = candidates;
2804 my_friendly_assert (is_overloaded_fn (functions), 169);
2806 functions = get_first_fn (functions);
2808 /* OUTER is the list of FUNCTION_DECLS, in a TREE_LIST. */
2809 for (outer = functions; outer; outer = DECL_CHAIN (outer))
2811 int template_cost = 0;
2812 function = outer;
2813 if (TREE_CODE (function) != FUNCTION_DECL
2814 && ! (TREE_CODE (function) == TEMPLATE_DECL
2815 && TREE_CODE (DECL_TEMPLATE_RESULT (function)) == FUNCTION_DECL))
2817 enum tree_code code = TREE_CODE (function);
2818 if (code == TEMPLATE_DECL)
2819 code = TREE_CODE (DECL_TEMPLATE_RESULT (function));
2820 if (code == CONST_DECL)
2821 cp_error_at
2822 ("enumeral value `%D' conflicts with function of same name",
2823 function);
2824 else if (code == VAR_DECL)
2826 if (TREE_STATIC (function))
2827 cp_error_at
2828 ("variable `%D' conflicts with function of same name",
2829 function);
2830 else
2831 cp_error_at
2832 ("constant field `%D' conflicts with function of same name",
2833 function);
2835 else if (code == TYPE_DECL)
2836 continue;
2837 else
2838 my_friendly_abort (2);
2839 error ("at this point in file");
2840 continue;
2842 if (TREE_CODE (function) == TEMPLATE_DECL)
2844 int ntparms = DECL_NTPARMS (function);
2845 tree targs = make_scratch_vec (ntparms);
2846 int i;
2848 i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (function),
2849 &TREE_VEC_ELT (targs, 0),
2850 TYPE_ARG_TYPES (TREE_TYPE (function)),
2851 parms, NULL_TREE, &template_cost, 0, 0);
2852 if (i == 0)
2854 function = instantiate_template (function, targs);
2855 if (function == error_mark_node)
2856 return function;
2860 if (TREE_CODE (function) == TEMPLATE_DECL)
2862 /* Unconverted template -- failed match. */
2863 cp->function = function;
2864 cp->u.bad_arg = -4;
2865 cp->h.code = EVIL_CODE;
2867 else
2869 struct candidate *cp2;
2871 /* Check that this decl is not the same as a function that's in
2872 the list due to some template instantiation. */
2873 cp2 = candidates;
2874 while (cp2 != cp)
2875 if (cp2->function == function)
2876 break;
2877 else
2878 cp2 += 1;
2879 if (cp2->function == function)
2880 continue;
2882 function = DECL_MAIN_VARIANT (function);
2884 /* Can't use alloca here, since result might be
2885 passed to calling function. */
2886 cp->h_len = parmlength;
2887 cp->harshness = (struct harshness_code *)
2888 scratchalloc ((parmlength + 1) * sizeof (struct harshness_code));
2890 compute_conversion_costs (function, parms, cp, parmlength);
2892 /* Make sure this is clear as well. */
2893 cp->h.int_penalty += template_cost;
2895 if ((cp[0].h.code & EVIL_CODE) == 0)
2897 cp[1].h.code = EVIL_CODE;
2898 cp++;
2903 if (cp - candidates)
2905 tree rval = error_mark_node;
2907 /* Leave marker. */
2908 cp[0].h.code = EVIL_CODE;
2909 if (cp - candidates > 1)
2911 struct candidate *best_cp
2912 = ideal_candidate (candidates, cp - candidates, parmlength);
2913 if (best_cp == (struct candidate *)0)
2915 if (flags & LOOKUP_COMPLAIN)
2917 cp_error ("call of overloaded `%D' is ambiguous", fnname);
2918 print_n_candidates (candidates, cp - candidates);
2920 return error_mark_node;
2922 else
2923 rval = best_cp->function;
2925 else
2927 cp -= 1;
2928 if (cp->h.code & EVIL_CODE)
2930 if (flags & LOOKUP_COMPLAIN)
2931 error ("type conversion ambiguous");
2933 else
2934 rval = cp->function;
2937 if (final_cp)
2938 return rval;
2940 return build_function_call_real (rval, parms, require_complete, flags);
2943 if (flags & LOOKUP_SPECULATIVELY)
2944 return NULL_TREE;
2946 if (flags & LOOKUP_COMPLAIN)
2947 report_type_mismatch (cp, parms, "function");
2949 return error_mark_node;
2952 /* This requires a complete type on the result of the call. */
2954 tree
2955 build_overload_call (fnname, parms, flags)
2956 tree fnname, parms;
2957 int flags;
2959 return build_overload_call_real (fnname, parms, flags, (struct candidate *)0, 1);
2962 /* New overloading code. */
2964 struct z_candidate {
2965 tree fn;
2966 tree convs;
2967 tree second_conv;
2968 int viable;
2969 tree basetype_path;
2970 tree template;
2971 struct z_candidate *next;
2974 #define IDENTITY_RANK 0
2975 #define EXACT_RANK 1
2976 #define PROMO_RANK 2
2977 #define STD_RANK 3
2978 #define PBOOL_RANK 4
2979 #define USER_RANK 5
2980 #define ELLIPSIS_RANK 6
2981 #define BAD_RANK 7
2983 #define ICS_RANK(NODE) \
2984 (ICS_BAD_FLAG (NODE) ? BAD_RANK \
2985 : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK \
2986 : ICS_USER_FLAG (NODE) ? USER_RANK \
2987 : ICS_STD_RANK (NODE))
2989 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
2991 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
2992 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2993 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
2994 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
2996 #define USER_CONV_FN(NODE) TREE_OPERAND (NODE, 1)
2999 null_ptr_cst_p (t)
3000 tree t;
3002 if (t == null_node
3003 || integer_zerop (t) && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE)
3004 return 1;
3005 return 0;
3008 static tree
3009 build_conv (code, type, from)
3010 enum tree_code code;
3011 tree type, from;
3013 tree t = build1 (code, type, from);
3014 int rank = ICS_STD_RANK (from);
3015 switch (code)
3017 case PTR_CONV:
3018 case PMEM_CONV:
3019 case BASE_CONV:
3020 case STD_CONV:
3021 if (rank < STD_RANK)
3022 rank = STD_RANK;
3023 break;
3025 case QUAL_CONV:
3026 if (rank < EXACT_RANK)
3027 rank = EXACT_RANK;
3029 default:
3030 break;
3032 ICS_STD_RANK (t) = rank;
3033 ICS_USER_FLAG (t) = ICS_USER_FLAG (from);
3034 ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
3035 return t;
3038 static tree
3039 non_reference (t)
3040 tree t;
3042 if (TREE_CODE (t) == REFERENCE_TYPE)
3043 t = TREE_TYPE (t);
3044 return t;
3047 static tree
3048 strip_top_quals (t)
3049 tree t;
3051 if (TREE_CODE (t) == ARRAY_TYPE)
3052 return t;
3053 return TYPE_MAIN_VARIANT (t);
3056 /* Returns the standard conversion path (see [conv]) from type FROM to type
3057 TO, if any. For proper handling of null pointer constants, you must
3058 also pass the expression EXPR to convert from. */
3060 static tree
3061 standard_conversion (to, from, expr)
3062 tree to, from, expr;
3064 enum tree_code fcode, tcode;
3065 tree conv;
3066 int fromref = 0;
3068 if (TREE_CODE (to) == REFERENCE_TYPE)
3069 to = TREE_TYPE (to);
3070 if (TREE_CODE (from) == REFERENCE_TYPE)
3072 fromref = 1;
3073 from = TREE_TYPE (from);
3075 to = strip_top_quals (to);
3076 from = strip_top_quals (from);
3078 fcode = TREE_CODE (from);
3079 tcode = TREE_CODE (to);
3081 conv = build1 (IDENTITY_CONV, from, expr);
3083 if (fcode == FUNCTION_TYPE)
3085 from = build_pointer_type (from);
3086 fcode = TREE_CODE (from);
3087 conv = build_conv (LVALUE_CONV, from, conv);
3089 else if (fcode == ARRAY_TYPE)
3091 from = build_pointer_type (TREE_TYPE (from));
3092 fcode = TREE_CODE (from);
3093 conv = build_conv (LVALUE_CONV, from, conv);
3095 else if (fromref || (expr && real_lvalue_p (expr)))
3096 conv = build_conv (RVALUE_CONV, from, conv);
3098 if (from == to)
3099 return conv;
3101 if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
3102 && expr && null_ptr_cst_p (expr))
3104 conv = build_conv (STD_CONV, to, conv);
3106 else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
3108 enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
3109 enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
3110 tree nconv = NULL_TREE;
3112 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (from)),
3113 TYPE_MAIN_VARIANT (TREE_TYPE (to)), 1))
3114 nconv = conv;
3115 else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
3116 && ufcode != FUNCTION_TYPE)
3118 from = build_pointer_type
3119 (cp_build_type_variant (void_type_node,
3120 TYPE_READONLY (TREE_TYPE (from)),
3121 TYPE_VOLATILE (TREE_TYPE (from))));
3122 nconv = build_conv (PTR_CONV, from, conv);
3124 else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
3126 tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
3127 tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
3129 if (DERIVED_FROM_P (fbase, tbase)
3130 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (from))),
3131 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (to))),
3132 1)))
3134 from = build_offset_type (tbase, TREE_TYPE (TREE_TYPE (from)));
3135 from = build_pointer_type (from);
3136 nconv = build_conv (PMEM_CONV, from, conv);
3139 else if (IS_AGGR_TYPE (TREE_TYPE (from))
3140 && IS_AGGR_TYPE (TREE_TYPE (to)))
3142 if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
3144 from = cp_build_type_variant (TREE_TYPE (to),
3145 TYPE_READONLY (TREE_TYPE (from)),
3146 TYPE_VOLATILE (TREE_TYPE (from)));
3147 from = build_pointer_type (from);
3148 nconv = build_conv (PTR_CONV, from, conv);
3152 if (nconv && comptypes (from, to, 1))
3153 conv = nconv;
3154 else if (nconv && comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
3155 conv = build_conv (QUAL_CONV, to, nconv);
3156 else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
3158 conv = build_conv (PTR_CONV, to, conv);
3159 ICS_BAD_FLAG (conv) = 1;
3161 else
3162 return 0;
3164 from = to;
3166 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
3168 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
3169 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
3170 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
3171 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
3173 if (! DERIVED_FROM_P (fbase, tbase)
3174 || ! comptypes (TREE_TYPE (fromfn), TREE_TYPE (tofn), 1)
3175 || ! compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
3176 TREE_CHAIN (TYPE_ARG_TYPES (tofn)), 1)
3177 || TYPE_READONLY (fbase) != TYPE_READONLY (tbase)
3178 || TYPE_VOLATILE (fbase) != TYPE_VOLATILE (tbase))
3179 return 0;
3181 from = cp_build_type_variant (tbase, TYPE_READONLY (fbase),
3182 TYPE_VOLATILE (fbase));
3183 from = build_cplus_method_type (from, TREE_TYPE (fromfn),
3184 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
3185 from = build_ptrmemfunc_type (build_pointer_type (from));
3186 conv = build_conv (PMEM_CONV, from, conv);
3188 else if (tcode == BOOLEAN_TYPE)
3190 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
3191 || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
3192 return 0;
3194 conv = build_conv (STD_CONV, to, conv);
3195 if (fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)
3196 && ICS_STD_RANK (conv) < PBOOL_RANK)
3197 ICS_STD_RANK (conv) = PBOOL_RANK;
3199 /* We don't check for ENUMERAL_TYPE here because there are no standard
3200 conversions to enum type. */
3201 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
3202 || tcode == REAL_TYPE)
3204 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
3205 return 0;
3206 conv = build_conv (STD_CONV, to, conv);
3208 /* Give this a better rank if it's a promotion. */
3209 if (to == type_promotes_to (from)
3210 && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
3211 ICS_STD_RANK (conv) = PROMO_RANK;
3213 else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3214 && DERIVED_FROM_P (to, from))
3215 conv = build_conv (BASE_CONV, to, conv);
3216 else
3217 return 0;
3219 return conv;
3222 /* Returns the conversion path from type FROM to reference type TO for
3223 purposes of reference binding. For lvalue binding, either pass a
3224 reference type to FROM or an lvalue expression to EXPR.
3226 Currently does not distinguish in the generated trees between binding to
3227 an lvalue and a temporary. Should it? */
3229 static tree
3230 reference_binding (rto, rfrom, expr, flags)
3231 tree rto, rfrom, expr;
3232 int flags;
3234 tree conv;
3235 int lvalue = 1;
3236 tree to = TREE_TYPE (rto);
3237 tree from = rfrom;
3238 int related;
3240 if (TREE_CODE (from) == REFERENCE_TYPE)
3241 from = TREE_TYPE (from);
3242 else if (! expr || ! real_lvalue_p (expr))
3243 lvalue = 0;
3245 related = (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from)
3246 || (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3247 && DERIVED_FROM_P (to, from)));
3249 if (lvalue && related
3250 && TYPE_READONLY (to) >= TYPE_READONLY (from)
3251 && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
3253 conv = build1 (IDENTITY_CONV, from, expr);
3255 if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
3256 conv = build_conv (REF_BIND, rto, conv);
3257 else
3259 conv = build_conv (REF_BIND, rto, conv);
3260 ICS_STD_RANK (conv) = STD_RANK;
3263 else
3264 conv = NULL_TREE;
3266 if (! conv)
3268 conv = standard_conversion (to, rfrom, expr);
3269 if (conv)
3271 conv = build_conv (REF_BIND, rto, conv);
3273 /* Bind directly to a base subobject of a class rvalue. Do it
3274 after building the conversion for proper handling of ICS_RANK. */
3275 if (TREE_CODE (TREE_OPERAND (conv, 0)) == BASE_CONV)
3276 TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
3278 if (conv
3279 && ((! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
3280 && (flags & LOOKUP_NO_TEMP_BIND) == 0))
3281 /* If T1 is reference-related to T2, cv1 must be the same
3282 cv-qualification as, or greater cv-qualification than,
3283 cv2; otherwise, the program is ill-formed. */
3284 || (related
3285 && (TYPE_READONLY (to) < TYPE_READONLY (from)
3286 || TYPE_VOLATILE (to) < TYPE_VOLATILE (from)))))
3287 ICS_BAD_FLAG (conv) = 1;
3290 return conv;
3293 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
3294 to type TO. The optional expression EXPR may affect the conversion.
3295 FLAGS are the usual overloading flags. Only LOOKUP_NO_CONVERSION is
3296 significant. */
3298 static tree
3299 implicit_conversion (to, from, expr, flags)
3300 tree to, from, expr;
3301 int flags;
3303 tree conv;
3304 struct z_candidate *cand;
3306 if (expr && type_unknown_p (expr))
3308 expr = instantiate_type (to, expr, 0);
3309 if (expr == error_mark_node)
3310 return 0;
3311 from = TREE_TYPE (expr);
3314 if (TREE_CODE (to) == REFERENCE_TYPE)
3315 conv = reference_binding (to, from, expr, flags);
3316 else
3317 conv = standard_conversion (to, from, expr);
3319 if (conv)
3321 else if ((IS_AGGR_TYPE (non_reference (from))
3322 || IS_AGGR_TYPE (non_reference (to)))
3323 && (flags & LOOKUP_NO_CONVERSION) == 0)
3325 cand = build_user_type_conversion_1
3326 (to, expr, LOOKUP_ONLYCONVERTING);
3327 if (cand)
3328 conv = cand->second_conv;
3329 if ((! conv || ICS_BAD_FLAG (conv))
3330 && TREE_CODE (to) == REFERENCE_TYPE
3331 && (flags & LOOKUP_NO_TEMP_BIND) == 0)
3333 cand = build_user_type_conversion_1
3334 (TYPE_MAIN_VARIANT (TREE_TYPE (to)), expr, LOOKUP_ONLYCONVERTING);
3335 if (cand)
3337 if (! TYPE_READONLY (TREE_TYPE (to))
3338 || TYPE_VOLATILE (TREE_TYPE (to)))
3339 ICS_BAD_FLAG (cand->second_conv) = 1;
3340 if (!conv || (ICS_BAD_FLAG (conv)
3341 > ICS_BAD_FLAG (cand->second_conv)))
3342 conv = build_conv (REF_BIND, to, cand->second_conv);
3347 return conv;
3350 /* Create an overload candidate for the function or method FN called with
3351 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
3352 to implicit_conversion. */
3354 static struct z_candidate *
3355 add_function_candidate (candidates, fn, arglist, flags)
3356 struct z_candidate *candidates;
3357 tree fn, arglist;
3358 int flags;
3360 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
3361 int i, len;
3362 tree convs;
3363 tree parmnode = parmlist;
3364 tree argnode = arglist;
3365 int viable = 1;
3366 struct z_candidate *cand;
3368 /* The `this' and `in_chrg' arguments to constructors are not considered
3369 in overload resolution. */
3370 if (DECL_CONSTRUCTOR_P (fn))
3372 parmnode = TREE_CHAIN (parmnode);
3373 argnode = TREE_CHAIN (argnode);
3374 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
3376 parmnode = TREE_CHAIN (parmnode);
3377 argnode = TREE_CHAIN (argnode);
3381 len = list_length (argnode);
3382 convs = make_scratch_vec (len);
3384 for (i = 0; i < len; ++i)
3386 tree arg = TREE_VALUE (argnode);
3387 tree argtype = TREE_TYPE (arg);
3388 tree t;
3390 argtype = cp_build_type_variant
3391 (argtype, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg));
3393 if (parmnode == void_list_node)
3394 break;
3395 else if (parmnode)
3396 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3397 else
3399 t = build1 (IDENTITY_CONV, argtype, arg);
3400 ICS_ELLIPSIS_FLAG (t) = 1;
3403 if (i == 0 && t && TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
3404 && ! DECL_CONSTRUCTOR_P (fn))
3405 ICS_THIS_FLAG (t) = 1;
3407 TREE_VEC_ELT (convs, i) = t;
3408 if (! t)
3409 break;
3411 if (ICS_BAD_FLAG (t))
3412 viable = -1;
3414 if (parmnode)
3415 parmnode = TREE_CHAIN (parmnode);
3416 argnode = TREE_CHAIN (argnode);
3419 if (i < len)
3420 viable = 0;
3422 /* Make sure there are default args for the rest of the parms. */
3423 for (; parmnode && parmnode != void_list_node;
3424 parmnode = TREE_CHAIN (parmnode))
3425 if (! TREE_PURPOSE (parmnode))
3427 viable = 0;
3428 break;
3431 cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3433 cand->fn = fn;
3434 cand->convs = convs;
3435 cand->second_conv = NULL_TREE;
3436 cand->viable = viable;
3437 cand->basetype_path = NULL_TREE;
3438 cand->template = NULL_TREE;
3439 cand->next = candidates;
3441 return cand;
3444 /* Create an overload candidate for the conversion function FN which will
3445 be invoked for expression OBJ, producing a pointer-to-function which
3446 will in turn be called with the argument list ARGLIST, and add it to
3447 CANDIDATES. FLAGS is passed on to implicit_conversion. */
3449 static struct z_candidate *
3450 add_conv_candidate (candidates, fn, obj, arglist)
3451 struct z_candidate *candidates;
3452 tree fn, obj, arglist;
3454 tree totype = TREE_TYPE (TREE_TYPE (fn));
3455 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
3456 int i, len = list_length (arglist) + 1;
3457 tree convs = make_scratch_vec (len);
3458 tree parmnode = parmlist;
3459 tree argnode = arglist;
3460 int viable = 1;
3461 struct z_candidate *cand;
3462 int flags = LOOKUP_NORMAL;
3464 for (i = 0; i < len; ++i)
3466 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
3467 tree argtype = lvalue_type (arg);
3468 tree t;
3470 if (i == 0)
3471 t = implicit_conversion (totype, argtype, arg, flags);
3472 else if (parmnode == void_list_node)
3473 break;
3474 else if (parmnode)
3475 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3476 else
3478 t = build1 (IDENTITY_CONV, argtype, arg);
3479 ICS_ELLIPSIS_FLAG (t) = 1;
3482 TREE_VEC_ELT (convs, i) = t;
3483 if (! t)
3484 break;
3486 if (ICS_BAD_FLAG (t))
3487 viable = -1;
3489 if (i == 0)
3490 continue;
3492 if (parmnode)
3493 parmnode = TREE_CHAIN (parmnode);
3494 argnode = TREE_CHAIN (argnode);
3497 if (i < len)
3498 viable = 0;
3500 for (; parmnode && parmnode != void_list_node;
3501 parmnode = TREE_CHAIN (parmnode))
3502 if (! TREE_PURPOSE (parmnode))
3504 viable = 0;
3505 break;
3508 cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3510 cand->fn = fn;
3511 cand->convs = convs;
3512 cand->second_conv = NULL_TREE;
3513 cand->viable = viable;
3514 cand->basetype_path = NULL_TREE;
3515 cand->template = NULL_TREE;
3516 cand->next = candidates;
3518 return cand;
3521 static struct z_candidate *
3522 build_builtin_candidate (candidates, fnname, type1, type2,
3523 args, argtypes, flags)
3524 struct z_candidate *candidates;
3525 tree fnname, type1, type2, *args, *argtypes;
3526 int flags;
3529 tree t, convs;
3530 int viable = 1, i;
3531 struct z_candidate *cand;
3532 tree types[2];
3534 types[0] = type1;
3535 types[1] = type2;
3537 convs = make_scratch_vec (args[2] ? 3 : (args[1] ? 2 : 1));
3539 for (i = 0; i < 2; ++i)
3541 if (! args[i])
3542 break;
3544 t = implicit_conversion (types[i], argtypes[i], args[i], flags);
3545 if (! t)
3547 viable = 0;
3548 /* We need something for printing the candidate. */
3549 t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
3551 else if (ICS_BAD_FLAG (t))
3552 viable = 0;
3553 TREE_VEC_ELT (convs, i) = t;
3556 /* For COND_EXPR we rearranged the arguments; undo that now. */
3557 if (args[2])
3559 TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
3560 TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
3561 t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
3562 if (t)
3563 TREE_VEC_ELT (convs, 0) = t;
3564 else
3565 viable = 0;
3568 cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
3570 cand->fn = fnname;
3571 cand->convs = convs;
3572 cand->second_conv = NULL_TREE;
3573 cand->viable = viable;
3574 cand->basetype_path = NULL_TREE;
3575 cand->template = NULL_TREE;
3576 cand->next = candidates;
3578 return cand;
3581 static int
3582 is_complete (t)
3583 tree t;
3585 return TYPE_SIZE (complete_type (t)) != NULL_TREE;
3588 /* Create any builtin operator overload candidates for the operator in
3589 question given the converted operand types TYPE1 and TYPE2. The other
3590 args are passed through from add_builtin_candidates to
3591 build_builtin_candidate. */
3593 static struct z_candidate *
3594 add_builtin_candidate (candidates, code, code2, fnname, type1, type2,
3595 args, argtypes, flags)
3596 struct z_candidate *candidates;
3597 enum tree_code code, code2;
3598 tree fnname, type1, type2, *args, *argtypes;
3599 int flags;
3601 switch (code)
3603 case POSTINCREMENT_EXPR:
3604 case POSTDECREMENT_EXPR:
3605 args[1] = integer_zero_node;
3606 type2 = integer_type_node;
3609 switch (code)
3612 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
3613 and VQ is either volatile or empty, there exist candidate operator
3614 functions of the form
3615 VQ T& operator++(VQ T&);
3616 T operator++(VQ T&, int);
3617 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
3618 type other than bool, and VQ is either volatile or empty, there exist
3619 candidate operator functions of the form
3620 VQ T& operator--(VQ T&);
3621 T operator--(VQ T&, int);
3622 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
3623 complete object type, and VQ is either volatile or empty, there exist
3624 candidate operator functions of the form
3625 T*VQ& operator++(T*VQ&);
3626 T*VQ& operator--(T*VQ&);
3627 T* operator++(T*VQ&, int);
3628 T* operator--(T*VQ&, int); */
3630 case POSTDECREMENT_EXPR:
3631 case PREDECREMENT_EXPR:
3632 if (TREE_CODE (type1) == BOOLEAN_TYPE)
3633 return candidates;
3634 case POSTINCREMENT_EXPR:
3635 case PREINCREMENT_EXPR:
3636 if ((ARITHMETIC_TYPE_P (type1) && TREE_CODE (type1) != ENUMERAL_TYPE)
3637 || TYPE_PTROB_P (type1))
3639 type1 = build_reference_type (type1);
3640 break;
3642 return candidates;
3644 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
3645 exist candidate operator functions of the form
3647 T& operator*(T*);
3649 8 For every function type T, there exist candidate operator functions of
3650 the form
3651 T& operator*(T*); */
3653 case INDIRECT_REF:
3654 if (TREE_CODE (type1) == POINTER_TYPE
3655 && (TYPE_PTROB_P (type1)
3656 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
3657 break;
3658 return candidates;
3660 /* 9 For every type T, there exist candidate operator functions of the form
3661 T* operator+(T*);
3663 10For every promoted arithmetic type T, there exist candidate operator
3664 functions of the form
3665 T operator+(T);
3666 T operator-(T); */
3668 case CONVERT_EXPR: /* unary + */
3669 if (TREE_CODE (type1) == POINTER_TYPE
3670 && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
3671 break;
3672 case NEGATE_EXPR:
3673 if (ARITHMETIC_TYPE_P (type1))
3674 break;
3675 return candidates;
3677 /* 11For every promoted integral type T, there exist candidate operator
3678 functions of the form
3679 T operator~(T); */
3681 case BIT_NOT_EXPR:
3682 if (INTEGRAL_TYPE_P (type1))
3683 break;
3684 return candidates;
3686 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
3687 is the same type as C2 or is a derived class of C2, T is a complete
3688 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3689 there exist candidate operator functions of the form
3690 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3691 where CV12 is the union of CV1 and CV2. */
3693 case MEMBER_REF:
3694 if (TREE_CODE (type1) == POINTER_TYPE
3695 && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
3697 tree c1 = TREE_TYPE (type1);
3698 tree c2 = (TYPE_PTRMEMFUNC_P (type2)
3699 ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
3700 : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
3702 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
3703 && (TYPE_PTRMEMFUNC_P (type2)
3704 || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
3705 break;
3707 return candidates;
3709 /* 13For every pair of promoted arithmetic types L and R, there exist can-
3710 didate operator functions of the form
3711 LR operator*(L, R);
3712 LR operator/(L, R);
3713 LR operator+(L, R);
3714 LR operator-(L, R);
3715 bool operator<(L, R);
3716 bool operator>(L, R);
3717 bool operator<=(L, R);
3718 bool operator>=(L, R);
3719 bool operator==(L, R);
3720 bool operator!=(L, R);
3721 where LR is the result of the usual arithmetic conversions between
3722 types L and R.
3724 14For every pair of types T and I, where T is a cv-qualified or cv-
3725 unqualified complete object type and I is a promoted integral type,
3726 there exist candidate operator functions of the form
3727 T* operator+(T*, I);
3728 T& operator[](T*, I);
3729 T* operator-(T*, I);
3730 T* operator+(I, T*);
3731 T& operator[](I, T*);
3733 15For every T, where T is a pointer to complete object type, there exist
3734 candidate operator functions of the form112)
3735 ptrdiff_t operator-(T, T);
3737 16For every pointer type T, there exist candidate operator functions of
3738 the form
3739 bool operator<(T, T);
3740 bool operator>(T, T);
3741 bool operator<=(T, T);
3742 bool operator>=(T, T);
3743 bool operator==(T, T);
3744 bool operator!=(T, T);
3746 17For every pointer to member type T, there exist candidate operator
3747 functions of the form
3748 bool operator==(T, T);
3749 bool operator!=(T, T); */
3751 case MINUS_EXPR:
3752 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
3753 break;
3754 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3756 type2 = ptrdiff_type_node;
3757 break;
3759 case MULT_EXPR:
3760 case TRUNC_DIV_EXPR:
3761 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3762 break;
3763 return candidates;
3765 case EQ_EXPR:
3766 case NE_EXPR:
3767 if (TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2)
3768 || TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3769 break;
3770 if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
3771 && null_ptr_cst_p (args[1]))
3773 type2 = type1;
3774 break;
3776 if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
3777 && null_ptr_cst_p (args[0]))
3779 type1 = type2;
3780 break;
3782 case LT_EXPR:
3783 case GT_EXPR:
3784 case LE_EXPR:
3785 case GE_EXPR:
3786 case MAX_EXPR:
3787 case MIN_EXPR:
3788 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2)
3789 || TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3790 break;
3791 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
3793 type2 = type1;
3794 break;
3796 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
3798 type1 = type2;
3799 break;
3801 return candidates;
3803 case PLUS_EXPR:
3804 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3805 break;
3806 case ARRAY_REF:
3807 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
3809 type1 = ptrdiff_type_node;
3810 break;
3812 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3814 type2 = ptrdiff_type_node;
3815 break;
3817 return candidates;
3819 /* 18For every pair of promoted integral types L and R, there exist candi-
3820 date operator functions of the form
3821 LR operator%(L, R);
3822 LR operator&(L, R);
3823 LR operator^(L, R);
3824 LR operator|(L, R);
3825 L operator<<(L, R);
3826 L operator>>(L, R);
3827 where LR is the result of the usual arithmetic conversions between
3828 types L and R. */
3830 case TRUNC_MOD_EXPR:
3831 case BIT_AND_EXPR:
3832 case BIT_IOR_EXPR:
3833 case BIT_XOR_EXPR:
3834 case LSHIFT_EXPR:
3835 case RSHIFT_EXPR:
3836 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3837 break;
3838 return candidates;
3840 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
3841 type, VQ is either volatile or empty, and R is a promoted arithmetic
3842 type, there exist candidate operator functions of the form
3843 VQ L& operator=(VQ L&, R);
3844 VQ L& operator*=(VQ L&, R);
3845 VQ L& operator/=(VQ L&, R);
3846 VQ L& operator+=(VQ L&, R);
3847 VQ L& operator-=(VQ L&, R);
3849 20For every pair T, VQ), where T is any type and VQ is either volatile
3850 or empty, there exist candidate operator functions of the form
3851 T*VQ& operator=(T*VQ&, T*);
3853 21For every pair T, VQ), where T is a pointer to member type and VQ is
3854 either volatile or empty, there exist candidate operator functions of
3855 the form
3856 VQ T& operator=(VQ T&, T);
3858 22For every triple T, VQ, I), where T is a cv-qualified or cv-
3859 unqualified complete object type, VQ is either volatile or empty, and
3860 I is a promoted integral type, there exist candidate operator func-
3861 tions of the form
3862 T*VQ& operator+=(T*VQ&, I);
3863 T*VQ& operator-=(T*VQ&, I);
3865 23For every triple L, VQ, R), where L is an integral or enumeration
3866 type, VQ is either volatile or empty, and R is a promoted integral
3867 type, there exist candidate operator functions of the form
3869 VQ L& operator%=(VQ L&, R);
3870 VQ L& operator<<=(VQ L&, R);
3871 VQ L& operator>>=(VQ L&, R);
3872 VQ L& operator&=(VQ L&, R);
3873 VQ L& operator^=(VQ L&, R);
3874 VQ L& operator|=(VQ L&, R); */
3876 case MODIFY_EXPR:
3877 switch (code2)
3879 case PLUS_EXPR:
3880 case MINUS_EXPR:
3881 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3883 type2 = ptrdiff_type_node;
3884 break;
3886 case MULT_EXPR:
3887 case TRUNC_DIV_EXPR:
3888 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3889 break;
3890 return candidates;
3892 case TRUNC_MOD_EXPR:
3893 case BIT_AND_EXPR:
3894 case BIT_IOR_EXPR:
3895 case BIT_XOR_EXPR:
3896 case LSHIFT_EXPR:
3897 case RSHIFT_EXPR:
3898 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3899 break;
3900 return candidates;
3902 case NOP_EXPR:
3903 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3904 break;
3905 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
3906 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3907 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3908 || ((TYPE_PTRMEMFUNC_P (type1)
3909 || TREE_CODE (type1) == POINTER_TYPE)
3910 && null_ptr_cst_p (args[1])))
3912 type2 = type1;
3913 break;
3915 return candidates;
3917 default:
3918 my_friendly_abort (367);
3920 type1 = build_reference_type (type1);
3921 break;
3923 case COND_EXPR:
3924 /* Kludge around broken overloading rules whereby
3925 bool ? const char& : enum is ambiguous
3926 (between int and const char&). */
3927 flags |= LOOKUP_NO_TEMP_BIND;
3929 /* Extension: Support ?: of enumeral type. Hopefully this will not
3930 be an extension for long. */
3931 if (TREE_CODE (type1) == ENUMERAL_TYPE && type1 == type2)
3932 break;
3933 else if (TREE_CODE (type1) == ENUMERAL_TYPE
3934 || TREE_CODE (type2) == ENUMERAL_TYPE)
3935 return candidates;
3936 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3937 break;
3938 if (TREE_CODE (type1) == TREE_CODE (type2)
3939 && (TREE_CODE (type1) == REFERENCE_TYPE
3940 || TREE_CODE (type1) == POINTER_TYPE
3941 || TYPE_PTRMEMFUNC_P (type1)
3942 || IS_AGGR_TYPE (type1)))
3943 break;
3944 if (TREE_CODE (type1) == REFERENCE_TYPE
3945 || TREE_CODE (type2) == REFERENCE_TYPE)
3946 return candidates;
3947 if (((TYPE_PTRMEMFUNC_P (type1) || TREE_CODE (type1) == POINTER_TYPE)
3948 && null_ptr_cst_p (args[1]))
3949 || IS_AGGR_TYPE (type1))
3951 type2 = type1;
3952 break;
3954 if (((TYPE_PTRMEMFUNC_P (type2) || TREE_CODE (type2) == POINTER_TYPE)
3955 && null_ptr_cst_p (args[0]))
3956 || IS_AGGR_TYPE (type2))
3958 type1 = type2;
3959 break;
3961 return candidates;
3963 default:
3964 my_friendly_abort (367);
3967 /* If we're dealing with two pointer types, we need candidates
3968 for both of them. */
3969 if (type2 && type1 != type2
3970 && TREE_CODE (type1) == TREE_CODE (type2)
3971 && (TREE_CODE (type1) == REFERENCE_TYPE
3972 || (TREE_CODE (type1) == POINTER_TYPE
3973 && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
3974 || TYPE_PTRMEMFUNC_P (type1)
3975 || IS_AGGR_TYPE (type1)))
3977 candidates = build_builtin_candidate
3978 (candidates, fnname, type1, type1, args, argtypes, flags);
3979 return build_builtin_candidate
3980 (candidates, fnname, type2, type2, args, argtypes, flags);
3983 return build_builtin_candidate
3984 (candidates, fnname, type1, type2, args, argtypes, flags);
3987 tree
3988 type_decays_to (type)
3989 tree type;
3991 if (TREE_CODE (type) == ARRAY_TYPE)
3992 return build_pointer_type (TREE_TYPE (type));
3993 if (TREE_CODE (type) == FUNCTION_TYPE)
3994 return build_pointer_type (type);
3995 return type;
3998 /* There are three conditions of builtin candidates:
4000 1) bool-taking candidates. These are the same regardless of the input.
4001 2) pointer-pair taking candidates. These are generated for each type
4002 one of the input types converts to.
4003 3) arithmetic candidates. According to the WP, we should generate
4004 all of these, but I'm trying not to... */
4006 static struct z_candidate *
4007 add_builtin_candidates (candidates, code, code2, fnname, args, flags)
4008 struct z_candidate *candidates;
4009 enum tree_code code, code2;
4010 tree fnname, *args;
4011 int flags;
4013 int ref1, i;
4014 tree type, argtypes[3], types[2];
4016 for (i = 0; i < 3; ++i)
4018 if (args[i])
4019 argtypes[i] = lvalue_type (args[i]);
4020 else
4021 argtypes[i] = NULL_TREE;
4024 switch (code)
4026 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
4027 and VQ is either volatile or empty, there exist candidate operator
4028 functions of the form
4029 VQ T& operator++(VQ T&); */
4031 case POSTINCREMENT_EXPR:
4032 case PREINCREMENT_EXPR:
4033 case POSTDECREMENT_EXPR:
4034 case PREDECREMENT_EXPR:
4035 case MODIFY_EXPR:
4036 ref1 = 1;
4037 break;
4039 /* 24There also exist candidate operator functions of the form
4040 bool operator!(bool);
4041 bool operator&&(bool, bool);
4042 bool operator||(bool, bool); */
4044 case TRUTH_NOT_EXPR:
4045 return build_builtin_candidate
4046 (candidates, fnname, boolean_type_node,
4047 NULL_TREE, args, argtypes, flags);
4049 case TRUTH_ORIF_EXPR:
4050 case TRUTH_ANDIF_EXPR:
4051 return build_builtin_candidate
4052 (candidates, fnname, boolean_type_node,
4053 boolean_type_node, args, argtypes, flags);
4055 case ADDR_EXPR:
4056 case COMPOUND_EXPR:
4057 case COMPONENT_REF:
4058 return candidates;
4060 default:
4061 ref1 = 0;
4064 types[0] = types[1] = NULL_TREE;
4066 for (i = 0; i < 2; ++i)
4068 if (! args[i])
4070 else if (IS_AGGR_TYPE (argtypes[i]))
4072 tree convs = lookup_conversions (argtypes[i]);
4074 if (code == COND_EXPR)
4076 if (real_lvalue_p (args[i]))
4077 types[i] = scratch_tree_cons
4078 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4080 types[i] = scratch_tree_cons
4081 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
4084 else if (! convs || (i == 0 && code == MODIFY_EXPR
4085 && code2 == NOP_EXPR))
4086 return candidates;
4088 for (; convs; convs = TREE_CHAIN (convs))
4090 type = TREE_TYPE (TREE_TYPE (TREE_VALUE (convs)));
4092 if (i == 0 && ref1
4093 && (TREE_CODE (type) != REFERENCE_TYPE
4094 || TYPE_READONLY (TREE_TYPE (type))))
4095 continue;
4097 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
4098 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4100 type = non_reference (type);
4101 if (i != 0 || ! ref1)
4103 type = TYPE_MAIN_VARIANT (type_decays_to (type));
4104 if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4105 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4106 if (INTEGRAL_TYPE_P (type))
4107 type = type_promotes_to (type);
4110 if (! value_member (type, types[i]))
4111 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4114 else
4116 if (code == COND_EXPR && real_lvalue_p (args[i]))
4117 types[i] = scratch_tree_cons
4118 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4119 type = non_reference (argtypes[i]);
4120 if (i != 0 || ! ref1)
4122 type = TYPE_MAIN_VARIANT (type_decays_to (type));
4123 if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4124 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4125 if (INTEGRAL_TYPE_P (type))
4126 type = type_promotes_to (type);
4128 types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
4132 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
4134 if (types[1])
4135 for (type = types[1]; type; type = TREE_CHAIN (type))
4136 candidates = add_builtin_candidate
4137 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4138 TREE_VALUE (type), args, argtypes, flags);
4139 else
4140 candidates = add_builtin_candidate
4141 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4142 NULL_TREE, args, argtypes, flags);
4145 return candidates;
4148 /* If TMPL can be successfully instantiated as indicated by
4149 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
4151 TMPL is the template. EXPLICIT_TARGS are any explicit template arguments.
4152 ARGLIST is the arguments provided at the call-site. The RETURN_TYPE
4153 is the desired type for conversion operators. FLAGS are as for
4154 add_function_candidate. */
4156 static struct z_candidate *
4157 add_template_candidate (candidates, tmpl, explicit_targs,
4158 arglist, return_type, flags)
4159 struct z_candidate *candidates;
4160 tree tmpl, explicit_targs, arglist, return_type;
4161 int flags;
4163 int ntparms = DECL_NTPARMS (tmpl);
4164 tree targs = make_scratch_vec (ntparms);
4165 struct z_candidate *cand;
4166 int i;
4167 tree fn;
4169 i = fn_type_unification (tmpl, explicit_targs, targs, arglist,
4170 return_type, 0);
4172 if (i != 0)
4173 return candidates;
4175 fn = instantiate_template (tmpl, targs);
4176 if (fn == error_mark_node)
4177 return candidates;
4179 cand = add_function_candidate (candidates, fn, arglist, flags);
4180 cand->template = DECL_TEMPLATE_INFO (fn);
4181 return cand;
4185 static struct z_candidate *
4186 add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type)
4187 struct z_candidate *candidates;
4188 tree tmpl, obj, arglist, return_type;
4190 int ntparms = DECL_NTPARMS (tmpl);
4191 tree targs = make_scratch_vec (ntparms);
4192 struct z_candidate *cand;
4193 int i;
4194 tree fn;
4196 i = fn_type_unification (tmpl, NULL_TREE, targs, arglist, return_type, 0);
4198 if (i != 0)
4199 return candidates;
4201 fn = instantiate_template (tmpl, targs);
4202 if (fn == error_mark_node)
4203 return candidates;
4205 cand = add_conv_candidate (candidates, fn, obj, arglist);
4206 cand->template = DECL_TEMPLATE_INFO (fn);
4207 return cand;
4211 static int
4212 any_viable (cands)
4213 struct z_candidate *cands;
4215 for (; cands; cands = cands->next)
4216 if (pedantic ? cands->viable == 1 : cands->viable)
4217 return 1;
4218 return 0;
4221 static struct z_candidate *
4222 splice_viable (cands)
4223 struct z_candidate *cands;
4225 struct z_candidate **p = &cands;
4227 for (; *p; )
4229 if (pedantic ? (*p)->viable == 1 : (*p)->viable)
4230 p = &((*p)->next);
4231 else
4232 *p = (*p)->next;
4235 return cands;
4238 static tree
4239 build_this (obj)
4240 tree obj;
4242 /* Fix this to work on non-lvalues. */
4243 if (IS_SIGNATURE_POINTER (TREE_TYPE (obj))
4244 || IS_SIGNATURE_REFERENCE (TREE_TYPE (obj)))
4245 return obj;
4246 else
4247 return build_unary_op (ADDR_EXPR, obj, 0);
4250 static void
4251 print_z_candidates (candidates)
4252 struct z_candidate *candidates;
4254 char *str = "candidates are:";
4255 for (; candidates; candidates = candidates->next)
4257 if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
4259 if (candidates->fn == ansi_opname [COND_EXPR])
4260 cp_error ("%s %D(%T, %T, %T) <builtin>", str, candidates->fn,
4261 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4262 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
4263 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
4264 else if (TREE_VEC_LENGTH (candidates->convs) == 2)
4265 cp_error ("%s %D(%T, %T) <builtin>", str, candidates->fn,
4266 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4267 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
4268 else
4269 cp_error ("%s %D(%T) <builtin>", str, candidates->fn,
4270 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
4272 else
4273 cp_error_at ("%s %+D%s", str, candidates->fn,
4274 candidates->viable == -1 ? " <near match>" : "");
4275 str = " ";
4279 /* Returns the best overload candidate to perform the requested
4280 conversion. This function is used for three the overloading situations
4281 described in [over.match.copy], [over.match.conv], and [over.match.ref].
4282 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
4283 per [dcl.init.ref], so we ignore temporary bindings. */
4285 static struct z_candidate *
4286 build_user_type_conversion_1 (totype, expr, flags)
4287 tree totype, expr;
4288 int flags;
4290 struct z_candidate *candidates, *cand;
4291 tree fromtype = TREE_TYPE (expr);
4292 tree ctors = NULL_TREE, convs = NULL_TREE, *p;
4293 tree args;
4294 tree templates = NULL_TREE;
4296 if (IS_AGGR_TYPE (totype))
4297 ctors = lookup_fnfields (TYPE_BINFO (totype), ctor_identifier, 0);
4298 if (IS_AGGR_TYPE (fromtype)
4299 && (! IS_AGGR_TYPE (totype) || ! DERIVED_FROM_P (totype, fromtype)))
4300 convs = lookup_conversions (fromtype);
4302 candidates = 0;
4303 flags |= LOOKUP_NO_CONVERSION;
4305 if (ctors)
4307 tree t = build_int_2 (0, 0);
4308 TREE_TYPE (t) = build_pointer_type (totype);
4309 args = build_scratch_list (NULL_TREE, expr);
4310 if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
4311 args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
4312 args = scratch_tree_cons (NULL_TREE, t, args);
4314 ctors = TREE_VALUE (ctors);
4316 for (; ctors; ctors = DECL_CHAIN (ctors))
4318 if (DECL_NONCONVERTING_P (ctors))
4319 continue;
4321 if (TREE_CODE (ctors) == TEMPLATE_DECL)
4323 templates = scratch_tree_cons (NULL_TREE, ctors, templates);
4324 candidates =
4325 add_template_candidate (candidates, ctors,
4326 NULL_TREE, args, NULL_TREE, flags);
4328 else
4329 candidates = add_function_candidate (candidates, ctors,
4330 args, flags);
4332 if (candidates)
4334 candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
4335 candidates->basetype_path = TYPE_BINFO (totype);
4339 if (convs)
4340 args = build_scratch_list (NULL_TREE, build_this (expr));
4342 for (; convs; convs = TREE_CHAIN (convs))
4344 tree fn = TREE_VALUE (convs);
4345 int convflags = LOOKUP_NO_CONVERSION;
4346 tree ics;
4348 /* If we are called to convert to a reference type, we are trying to
4349 find an lvalue binding, so don't even consider temporaries. If
4350 we don't find an lvalue binding, the caller will try again to
4351 look for a temporary binding. */
4352 if (TREE_CODE (totype) == REFERENCE_TYPE)
4353 convflags |= LOOKUP_NO_TEMP_BIND;
4355 ics = implicit_conversion
4356 (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
4358 if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
4359 /* ignore the near match. */;
4360 else if (ics)
4361 for (; fn; fn = DECL_CHAIN (fn))
4363 if (TREE_CODE (fn) == TEMPLATE_DECL)
4365 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4366 candidates =
4367 add_template_candidate (candidates, fn, NULL_TREE,
4368 args, totype, flags);
4370 else
4371 candidates = add_function_candidate (candidates, fn,
4372 args, flags);
4374 if (candidates)
4376 candidates->second_conv = ics;
4377 candidates->basetype_path = TREE_PURPOSE (convs);
4378 if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
4379 candidates->viable = -1;
4384 if (! any_viable (candidates))
4386 #if 0
4387 if (flags & LOOKUP_COMPLAIN)
4389 if (candidates && ! candidates->next)
4390 /* say why this one won't work or try to be loose */;
4391 else
4392 cp_error ("no viable candidates");
4394 #endif
4396 return 0;
4399 candidates = splice_viable (candidates);
4400 cand = tourney (candidates);
4402 if (cand == 0)
4404 if (flags & LOOKUP_COMPLAIN)
4406 cp_error ("conversion from `%T' to `%T' is ambiguous",
4407 fromtype, totype);
4408 print_z_candidates (candidates);
4411 cand = candidates; /* any one will do */
4412 cand->second_conv = build1 (AMBIG_CONV, totype, expr);
4413 ICS_USER_FLAG (cand->second_conv) = 1;
4414 ICS_BAD_FLAG (cand->second_conv) = 1;
4416 return cand;
4419 for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
4420 p = &(TREE_OPERAND (*p, 0));
4422 /* Pedantically, normal function declarations are never considered
4423 to refer to template instantiations, so we only do this with
4424 -fguiding-decls. */
4425 if (flag_guiding_decls && templates && ! cand->template
4426 && !DECL_INITIAL (cand->fn)
4427 && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4428 add_maybe_template (cand->fn, templates);
4430 *p = build
4431 (USER_CONV,
4432 (DECL_CONSTRUCTOR_P (cand->fn)
4433 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
4434 expr, cand->fn, cand->convs, cand->basetype_path);
4435 ICS_USER_FLAG (cand->second_conv) = 1;
4436 if (cand->viable == -1)
4437 ICS_BAD_FLAG (cand->second_conv) = 1;
4439 return cand;
4442 tree
4443 build_user_type_conversion (totype, expr, flags)
4444 tree totype, expr;
4445 int flags;
4447 struct z_candidate *cand
4448 = build_user_type_conversion_1 (totype, expr, flags);
4450 if (cand)
4452 if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
4453 return error_mark_node;
4454 return convert_from_reference (convert_like (cand->second_conv, expr));
4456 return NULL_TREE;
4459 /* Do any initial processing on the arguments to a function call. */
4461 static tree
4462 resolve_args (args)
4463 tree args;
4465 tree t;
4466 for (t = args; t; t = TREE_CHAIN (t))
4468 if (TREE_VALUE (t) == error_mark_node)
4469 return error_mark_node;
4470 else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
4472 error ("invalid use of void expression");
4473 return error_mark_node;
4475 else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
4476 TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
4478 return args;
4481 tree
4482 build_new_function_call (fn, args, obj)
4483 tree fn, args, obj;
4485 struct z_candidate *candidates = 0, *cand;
4486 tree explicit_targs = NULL_TREE;
4487 int template_only = 0;
4489 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4491 explicit_targs = TREE_OPERAND (fn, 1);
4492 fn = TREE_OPERAND (fn, 0);
4493 template_only = 1;
4496 if (obj == NULL_TREE && really_overloaded_fn (fn))
4498 tree t;
4499 tree templates = NULL_TREE;
4501 args = resolve_args (args);
4503 if (args == error_mark_node)
4504 return error_mark_node;
4506 for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
4508 if (TREE_CODE (t) == TEMPLATE_DECL)
4510 templates = scratch_tree_cons (NULL_TREE, t, templates);
4511 candidates = add_template_candidate
4512 (candidates, t, explicit_targs, args, NULL_TREE,
4513 LOOKUP_NORMAL);
4515 else if (! template_only)
4516 candidates = add_function_candidate
4517 (candidates, t, args, LOOKUP_NORMAL);
4520 if (! any_viable (candidates))
4522 if (candidates && ! candidates->next)
4523 return build_function_call (candidates->fn, args);
4524 cp_error ("no matching function for call to `%D (%A)'",
4525 TREE_PURPOSE (fn), args);
4526 if (candidates)
4527 print_z_candidates (candidates);
4528 return error_mark_node;
4530 candidates = splice_viable (candidates);
4531 cand = tourney (candidates);
4533 if (cand == 0)
4535 cp_error ("call of overloaded `%D (%A)' is ambiguous",
4536 TREE_PURPOSE (fn), args);
4537 print_z_candidates (candidates);
4538 return error_mark_node;
4541 /* Pedantically, normal function declarations are never considered
4542 to refer to template instantiations, so we only do this with
4543 -fguiding-decls. */
4544 if (flag_guiding_decls && templates && ! cand->template
4545 && ! DECL_INITIAL (cand->fn))
4546 add_maybe_template (cand->fn, templates);
4548 return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
4551 return build_function_call (fn, args);
4554 static tree
4555 build_object_call (obj, args)
4556 tree obj, args;
4558 struct z_candidate *candidates = 0, *cand;
4559 tree fns, convs, mem_args;
4560 tree type = TREE_TYPE (obj);
4561 tree templates = NULL_TREE;
4563 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
4565 args = resolve_args (args);
4567 if (args == error_mark_node)
4568 return error_mark_node;
4570 if (fns)
4572 tree fn = TREE_VALUE (fns);
4573 mem_args = scratch_tree_cons (NULL_TREE, build_this (obj), args);
4575 for (; fn; fn = DECL_CHAIN (fn))
4577 if (TREE_CODE (fn) == TEMPLATE_DECL)
4579 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4580 candidates
4581 = add_template_candidate (candidates, fn, NULL_TREE,
4582 mem_args, NULL_TREE,
4583 LOOKUP_NORMAL);
4585 else
4586 candidates = add_function_candidate
4587 (candidates, fn, mem_args, LOOKUP_NORMAL);
4589 if (candidates)
4590 candidates->basetype_path = TREE_PURPOSE (fns);
4594 convs = lookup_conversions (type);
4596 for (; convs; convs = TREE_CHAIN (convs))
4598 tree fn = TREE_VALUE (convs);
4599 tree totype = TREE_TYPE (TREE_TYPE (fn));
4601 if (TREE_CODE (totype) == POINTER_TYPE
4602 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4603 for (; fn; fn = DECL_CHAIN (fn))
4605 if (TREE_CODE (fn) == TEMPLATE_DECL)
4607 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4608 candidates = add_template_conv_candidate (candidates,
4610 obj,
4611 args,
4612 totype);
4614 else
4615 candidates = add_conv_candidate (candidates, fn, obj, args);
4617 if (candidates)
4618 candidates->basetype_path = TREE_PURPOSE (convs);
4622 if (! any_viable (candidates))
4624 cp_error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
4625 print_z_candidates (candidates);
4626 return error_mark_node;
4629 candidates = splice_viable (candidates);
4630 cand = tourney (candidates);
4632 if (cand == 0)
4634 cp_error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
4635 print_z_candidates (candidates);
4636 return error_mark_node;
4639 if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
4640 return build_over_call (cand->fn, cand->convs, mem_args, LOOKUP_NORMAL);
4642 obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
4644 /* FIXME */
4645 return build_function_call (obj, args);
4648 static void
4649 op_error (code, code2, arg1, arg2, arg3, problem)
4650 enum tree_code code, code2;
4651 tree arg1, arg2, arg3;
4652 char *problem;
4654 char * opname
4655 = (code == MODIFY_EXPR ? assignop_tab [code2] : opname_tab [code]);
4657 switch (code)
4659 case COND_EXPR:
4660 cp_error ("%s for `%T ? %T : %T'", problem,
4661 error_type (arg1), error_type (arg2), error_type (arg3));
4662 break;
4663 case POSTINCREMENT_EXPR:
4664 case POSTDECREMENT_EXPR:
4665 cp_error ("%s for `%T%s'", problem, error_type (arg1), opname);
4666 break;
4667 case ARRAY_REF:
4668 cp_error ("%s for `%T[%T]'", problem,
4669 error_type (arg1), error_type (arg2));
4670 break;
4671 default:
4672 if (arg2)
4673 cp_error ("%s for `%T %s %T'", problem,
4674 error_type (arg1), opname, error_type (arg2));
4675 else
4676 cp_error ("%s for `%s%T'", problem, opname, error_type (arg1));
4680 tree
4681 build_new_op (code, flags, arg1, arg2, arg3)
4682 enum tree_code code;
4683 int flags;
4684 tree arg1, arg2, arg3;
4686 struct z_candidate *candidates = 0, *cand;
4687 tree fns, mem_arglist, arglist, fnname;
4688 enum tree_code code2 = NOP_EXPR;
4689 tree templates = NULL_TREE;
4690 tree conv;
4692 if (arg1 == error_mark_node
4693 || arg2 == error_mark_node
4694 || arg3 == error_mark_node)
4695 return error_mark_node;
4697 /* This can happen if a template takes all non-type parameters, e.g.
4698 undeclared_template<1, 5, 72>a; */
4699 if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
4701 cp_error ("`%D' must be declared before use", arg1);
4702 return error_mark_node;
4705 if (code == MODIFY_EXPR)
4707 code2 = TREE_CODE (arg3);
4708 arg3 = NULL_TREE;
4709 fnname = ansi_assopname[code2];
4711 else
4712 fnname = ansi_opname[code];
4714 switch (code)
4716 case NEW_EXPR:
4717 case VEC_NEW_EXPR:
4719 tree rval;
4721 arglist = scratch_tree_cons (NULL_TREE, arg2, arg3);
4722 if (flags & LOOKUP_GLOBAL)
4723 return build_new_function_call
4724 (lookup_name_nonclass (fnname), arglist, NULL_TREE);
4726 /* FIXME */
4727 rval = build_method_call
4728 (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node),
4729 "new"),
4730 fnname, arglist, NULL_TREE, flags);
4731 if (rval == error_mark_node)
4732 /* User might declare fancy operator new, but invoke it
4733 like standard one. */
4734 return rval;
4736 TREE_TYPE (rval) = arg1;
4737 TREE_CALLS_NEW (rval) = 1;
4738 return rval;
4741 case VEC_DELETE_EXPR:
4742 case DELETE_EXPR:
4744 tree rval;
4746 if (flags & LOOKUP_GLOBAL)
4747 return build_new_function_call
4748 (lookup_name_nonclass (fnname),
4749 build_scratch_list (NULL_TREE, arg1), NULL_TREE);
4751 arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4753 arg1 = TREE_TYPE (arg1);
4755 /* This handles the case where we're trying to delete
4756 X (*a)[10];
4757 a=new X[5][10];
4758 delete[] a; */
4760 if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
4762 /* Strip off the pointer and the array. */
4763 arg1 = TREE_TYPE (TREE_TYPE (arg1));
4765 while (TREE_CODE (arg1) == ARRAY_TYPE)
4766 arg1 = (TREE_TYPE (arg1));
4768 arg1 = build_pointer_type (arg1);
4771 /* FIXME */
4772 rval = build_method_call
4773 (build_indirect_ref (build1 (NOP_EXPR, arg1,
4774 error_mark_node),
4775 NULL_PTR),
4776 fnname, arglist, NULL_TREE, flags);
4777 #if 0
4778 /* This can happen when operator delete is protected. */
4779 my_friendly_assert (rval != error_mark_node, 250);
4780 TREE_TYPE (rval) = void_type_node;
4781 #endif
4782 return rval;
4785 case CALL_EXPR:
4786 return build_object_call (arg1, arg2);
4789 /* The comma operator can have void args. */
4790 if (TREE_CODE (arg1) == OFFSET_REF)
4791 arg1 = resolve_offset_ref (arg1);
4792 if (arg2 && TREE_CODE (arg2) == OFFSET_REF)
4793 arg2 = resolve_offset_ref (arg2);
4794 if (arg3 && TREE_CODE (arg3) == OFFSET_REF)
4795 arg3 = resolve_offset_ref (arg3);
4797 if (code == COND_EXPR)
4799 if (arg2 == NULL_TREE
4800 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4801 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4802 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4803 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4804 goto builtin;
4806 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4807 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4808 goto builtin;
4810 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4811 arg2 = integer_zero_node;
4813 fns = lookup_name_nonclass (fnname);
4814 /* + Koenig lookup */
4816 if (arg2 && arg3)
4817 arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons
4818 (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3)));
4819 else if (arg2)
4820 arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
4821 else
4822 arglist = build_scratch_list (NULL_TREE, arg1);
4824 if (fns && TREE_CODE (fns) == TREE_LIST)
4825 fns = TREE_VALUE (fns);
4826 for (; fns; fns = DECL_CHAIN (fns))
4828 if (TREE_CODE (fns) == TEMPLATE_DECL)
4830 templates = scratch_tree_cons (NULL_TREE, fns, templates);
4831 candidates
4832 = add_template_candidate (candidates, fns, NULL_TREE,
4833 arglist, TREE_TYPE (fnname),
4834 flags);
4836 else
4837 candidates = add_function_candidate (candidates, fns, arglist, flags);
4840 if (IS_AGGR_TYPE (TREE_TYPE (arg1)))
4841 fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 0);
4842 else
4843 fns = NULL_TREE;
4845 if (fns)
4847 tree fn = TREE_VALUE (fns);
4848 mem_arglist = scratch_tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
4849 for (; fn; fn = DECL_CHAIN (fn))
4851 tree this_arglist;
4853 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4854 this_arglist = mem_arglist;
4855 else
4856 this_arglist = arglist;
4858 if (TREE_CODE (fn) == TEMPLATE_DECL)
4860 /* A member template. */
4861 templates = scratch_tree_cons (NULL_TREE, fn, templates);
4862 candidates
4863 = add_template_candidate (candidates, fn, NULL_TREE,
4864 this_arglist, TREE_TYPE
4865 (fnname), LOOKUP_NORMAL);
4867 else
4868 candidates = add_function_candidate
4869 (candidates, fn, this_arglist, flags);
4871 if (candidates)
4872 candidates->basetype_path = TREE_PURPOSE (fns);
4877 tree args[3];
4879 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4880 to know about two args; a builtin candidate will always have a first
4881 parameter of type bool. We'll handle that in
4882 build_builtin_candidate. */
4883 if (code == COND_EXPR)
4885 args[0] = arg2;
4886 args[1] = arg3;
4887 args[2] = arg1;
4889 else
4891 args[0] = arg1;
4892 args[1] = arg2;
4893 args[2] = NULL_TREE;
4896 candidates = add_builtin_candidates
4897 (candidates, code, code2, fnname, args, flags);
4900 if (! any_viable (candidates))
4902 switch (code)
4904 case POSTINCREMENT_EXPR:
4905 case POSTDECREMENT_EXPR:
4906 /* Look for an `operator++ (int)'. If they didn't have
4907 one, then we fall back to the old way of doing things. */
4908 if (flags & LOOKUP_COMPLAIN)
4909 cp_pedwarn ("no `%D (int)' declared for postfix `%s', trying prefix operator instead",
4910 fnname, opname_tab [code]);
4911 if (code == POSTINCREMENT_EXPR)
4912 code = PREINCREMENT_EXPR;
4913 else
4914 code = PREDECREMENT_EXPR;
4915 return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
4917 /* The caller will deal with these. */
4918 case ADDR_EXPR:
4919 case COMPOUND_EXPR:
4920 case COMPONENT_REF:
4921 return NULL_TREE;
4923 if (flags & LOOKUP_COMPLAIN)
4925 op_error (code, code2, arg1, arg2, arg3, "no match");
4926 print_z_candidates (candidates);
4928 return error_mark_node;
4930 candidates = splice_viable (candidates);
4931 cand = tourney (candidates);
4933 if (cand == 0)
4935 if (flags & LOOKUP_COMPLAIN)
4937 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4938 print_z_candidates (candidates);
4940 return error_mark_node;
4943 if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4945 extern int warn_synth;
4946 if (warn_synth
4947 && fnname == ansi_opname[MODIFY_EXPR]
4948 && DECL_ARTIFICIAL (cand->fn)
4949 && candidates->next
4950 && ! candidates->next->next)
4952 cp_warning ("using synthesized `%#D' for copy assignment",
4953 cand->fn);
4954 cp_warning_at (" where cfront would use `%#D'",
4955 cand == candidates
4956 ? candidates->next->fn
4957 : candidates->fn);
4960 if (DECL_FUNCTION_MEMBER_P (cand->fn))
4961 enforce_access (cand->basetype_path, cand->fn);
4963 /* Pedantically, normal function declarations are never considered
4964 to refer to template instantiations, so we only do this with
4965 -fguiding-decls. */
4966 if (flag_guiding_decls && templates && ! cand->template
4967 && ! DECL_INITIAL (cand->fn)
4968 && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4969 add_maybe_template (cand->fn, templates);
4971 return build_over_call
4972 (cand->fn, cand->convs,
4973 TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
4974 ? mem_arglist : arglist,
4975 LOOKUP_NORMAL);
4978 /* Check for comparison of different enum types. */
4979 switch (code)
4981 case GT_EXPR:
4982 case LT_EXPR:
4983 case GE_EXPR:
4984 case LE_EXPR:
4985 case EQ_EXPR:
4986 case NE_EXPR:
4987 if (flag_int_enum_equivalence == 0
4988 && TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4989 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4990 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4991 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
4993 cp_warning ("comparison between `%#T' and `%#T'",
4994 TREE_TYPE (arg1), TREE_TYPE (arg2));
4998 /* We need to strip any leading REF_BIND so that bitfields don't cause
4999 errors. This should not remove any important conversions, because
5000 builtins don't apply to class objects directly. */
5001 conv = TREE_VEC_ELT (cand->convs, 0);
5002 if (TREE_CODE (conv) == REF_BIND)
5003 conv = TREE_OPERAND (conv, 0);
5004 arg1 = convert_like (conv, arg1);
5005 if (arg2)
5006 arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
5007 if (arg3)
5008 arg3 = convert_like (TREE_VEC_ELT (cand->convs, 2), arg3);
5010 builtin:
5011 switch (code)
5013 case MODIFY_EXPR:
5014 return build_modify_expr (arg1, code2, arg2);
5016 case INDIRECT_REF:
5017 return build_indirect_ref (arg1, "unary *");
5019 case PLUS_EXPR:
5020 case MINUS_EXPR:
5021 case MULT_EXPR:
5022 case TRUNC_DIV_EXPR:
5023 case GT_EXPR:
5024 case LT_EXPR:
5025 case GE_EXPR:
5026 case LE_EXPR:
5027 case EQ_EXPR:
5028 case NE_EXPR:
5029 case MAX_EXPR:
5030 case MIN_EXPR:
5031 case LSHIFT_EXPR:
5032 case RSHIFT_EXPR:
5033 case TRUNC_MOD_EXPR:
5034 case BIT_AND_EXPR:
5035 case BIT_IOR_EXPR:
5036 case BIT_XOR_EXPR:
5037 case TRUTH_ANDIF_EXPR:
5038 case TRUTH_ORIF_EXPR:
5039 return build_binary_op_nodefault (code, arg1, arg2, code);
5041 case CONVERT_EXPR:
5042 case NEGATE_EXPR:
5043 case BIT_NOT_EXPR:
5044 case TRUTH_NOT_EXPR:
5045 case PREINCREMENT_EXPR:
5046 case POSTINCREMENT_EXPR:
5047 case PREDECREMENT_EXPR:
5048 case POSTDECREMENT_EXPR:
5049 case REALPART_EXPR:
5050 case IMAGPART_EXPR:
5051 return build_unary_op (code, arg1, candidates != 0);
5053 case ARRAY_REF:
5054 return build_array_ref (arg1, arg2);
5056 case COND_EXPR:
5057 return build_conditional_expr (arg1, arg2, arg3);
5059 case MEMBER_REF:
5060 return build_m_component_ref
5061 (build_indirect_ref (arg1, NULL_PTR), arg2);
5063 /* The caller will deal with these. */
5064 case ADDR_EXPR:
5065 case COMPONENT_REF:
5066 case COMPOUND_EXPR:
5067 return NULL_TREE;
5069 default:
5070 my_friendly_abort (367);
5074 static void
5075 enforce_access (basetype_path, function)
5076 tree basetype_path, function;
5078 tree access = compute_access (basetype_path, function);
5080 if (access == access_private_node)
5082 cp_error_at ("`%+#D' is %s", function,
5083 TREE_PRIVATE (function) ? "private"
5084 : "from private base class");
5085 error ("within this context");
5087 else if (access == access_protected_node)
5089 cp_error_at ("`%+#D' %s", function,
5090 TREE_PROTECTED (function) ? "is protected"
5091 : "has protected accessibility");
5092 error ("within this context");
5096 /* Perform the conversions in CONVS on the expression EXPR. */
5098 static tree
5099 convert_like (convs, expr)
5100 tree convs, expr;
5102 if (ICS_BAD_FLAG (convs)
5103 && TREE_CODE (convs) != USER_CONV
5104 && TREE_CODE (convs) != AMBIG_CONV)
5106 tree t = convs;
5107 for (; t; t = TREE_OPERAND (t, 0))
5109 if (TREE_CODE (t) == USER_CONV)
5111 expr = convert_like (t, expr);
5112 break;
5114 else if (TREE_CODE (t) == AMBIG_CONV)
5115 return convert_like (t, expr);
5116 else if (TREE_CODE (t) == IDENTITY_CONV)
5117 break;
5119 return convert_for_initialization
5120 (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
5121 "conversion", NULL_TREE, 0);
5124 switch (TREE_CODE (convs))
5126 case USER_CONV:
5128 tree fn = TREE_OPERAND (convs, 1);
5129 tree args;
5130 enforce_access (TREE_OPERAND (convs, 3), fn);
5132 if (DECL_CONSTRUCTOR_P (fn))
5134 tree t = build_int_2 (0, 0);
5135 TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
5137 args = build_scratch_list (NULL_TREE, expr);
5138 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5139 args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5140 args = scratch_tree_cons (NULL_TREE, t, args);
5142 else
5143 args = build_this (expr);
5144 expr = build_over_call
5145 (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
5146 args, LOOKUP_NORMAL);
5148 /* If this is a constructor or a function returning an aggr type,
5149 we need to build up a TARGET_EXPR. */
5150 if (DECL_CONSTRUCTOR_P (fn))
5151 expr = build_cplus_new (TREE_TYPE (convs), expr);
5153 return expr;
5155 case IDENTITY_CONV:
5156 if (type_unknown_p (expr))
5157 expr = instantiate_type (TREE_TYPE (convs), expr, 1);
5158 if (TREE_READONLY_DECL_P (expr))
5159 expr = decl_constant_value (expr);
5160 return expr;
5161 case AMBIG_CONV:
5162 /* Call build_user_type_conversion again for the error. */
5163 return build_user_type_conversion
5164 (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
5167 expr = convert_like (TREE_OPERAND (convs, 0), expr);
5168 if (expr == error_mark_node)
5169 return error_mark_node;
5171 switch (TREE_CODE (convs))
5173 case RVALUE_CONV:
5174 if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
5175 return expr;
5176 /* else fall through */
5177 case BASE_CONV:
5178 return build_user_type_conversion
5179 (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
5180 case REF_BIND:
5181 return convert_to_reference
5182 (TREE_TYPE (convs), expr,
5183 CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
5184 error_mark_node);
5185 case LVALUE_CONV:
5186 return decay_conversion (expr);
5188 return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5189 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5192 static tree
5193 convert_default_arg (type, arg)
5194 tree type, arg;
5196 arg = break_out_target_exprs (arg);
5198 if (TREE_CODE (arg) == CONSTRUCTOR)
5200 arg = digest_init (type, arg, 0);
5201 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5202 "default argument", 0, 0);
5204 else
5206 /* This could get clobbered by the following call. */
5207 if (TREE_HAS_CONSTRUCTOR (arg))
5208 arg = copy_node (arg);
5210 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5211 "default argument", 0, 0);
5212 #ifdef PROMOTE_PROTOTYPES
5213 if ((TREE_CODE (type) == INTEGER_TYPE
5214 || TREE_CODE (type) == ENUMERAL_TYPE)
5215 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5216 arg = default_conversion (arg);
5217 #endif
5220 return arg;
5223 static tree
5224 build_over_call (fn, convs, args, flags)
5225 tree fn, convs, args;
5226 int flags;
5228 tree converted_args = NULL_TREE;
5229 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5230 tree conv, arg, val;
5231 int i = 0;
5232 int is_method = 0;
5234 if (args && TREE_CODE (args) != TREE_LIST)
5235 args = build_scratch_list (NULL_TREE, args);
5236 arg = args;
5238 /* The implicit parameters to a constructor are not considered by overload
5239 resolution, and must be of the proper type. */
5240 if (DECL_CONSTRUCTOR_P (fn))
5242 converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5243 arg = TREE_CHAIN (arg);
5244 parm = TREE_CHAIN (parm);
5245 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5247 converted_args = expr_tree_cons
5248 (NULL_TREE, TREE_VALUE (arg), converted_args);
5249 arg = TREE_CHAIN (arg);
5250 parm = TREE_CHAIN (parm);
5253 /* Bypass access control for 'this' parameter. */
5254 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5256 tree parmtype = TREE_VALUE (parm);
5257 tree argtype = TREE_TYPE (TREE_VALUE (arg));
5258 if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5260 int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5261 < TYPE_VOLATILE (TREE_TYPE (argtype)));
5262 int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5263 < TYPE_READONLY (TREE_TYPE (argtype)));
5264 char *p = (dv && dc ? "const and volatile"
5265 : dc ? "const" : dv ? "volatile" : "");
5267 cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5268 TREE_TYPE (argtype), fn, p);
5270 converted_args = expr_tree_cons
5271 (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5272 converted_args);
5273 parm = TREE_CHAIN (parm);
5274 arg = TREE_CHAIN (arg);
5275 ++i;
5276 is_method = 1;
5279 for (; arg && parm;
5280 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5282 tree type = TREE_VALUE (parm);
5284 conv = TREE_VEC_ELT (convs, i);
5285 if (ICS_BAD_FLAG (conv))
5287 tree t = conv;
5288 val = TREE_VALUE (arg);
5290 for (; t; t = TREE_OPERAND (t, 0))
5292 if (TREE_CODE (t) == USER_CONV
5293 || TREE_CODE (t) == AMBIG_CONV)
5295 val = convert_like (t, val);
5296 break;
5298 else if (TREE_CODE (t) == IDENTITY_CONV)
5299 break;
5301 val = convert_for_initialization
5302 (NULL_TREE, type, val, LOOKUP_NORMAL,
5303 "argument passing", fn, i - is_method);
5305 else
5306 val = convert_like (conv, TREE_VALUE (arg));
5308 #ifdef PROMOTE_PROTOTYPES
5309 if ((TREE_CODE (type) == INTEGER_TYPE
5310 || TREE_CODE (type) == ENUMERAL_TYPE)
5311 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5312 val = default_conversion (val);
5313 #endif
5314 converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5317 /* Default arguments */
5318 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5320 tree arg = TREE_PURPOSE (parm);
5322 if (DECL_TEMPLATE_INFO (fn))
5323 /* This came from a template. Instantiate the default arg here,
5324 not in tsubst. */
5325 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5326 TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5327 converted_args = expr_tree_cons
5328 (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5329 converted_args);
5332 /* Ellipsis */
5333 for (; arg; arg = TREE_CHAIN (arg))
5335 val = TREE_VALUE (arg);
5337 if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5338 && (TYPE_PRECISION (TREE_TYPE (val))
5339 < TYPE_PRECISION (double_type_node)))
5340 /* Convert `float' to `double'. */
5341 val = cp_convert (double_type_node, val);
5342 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5343 && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5344 cp_warning ("cannot pass objects of type `%T' through `...'",
5345 TREE_TYPE (val));
5346 else
5347 /* Convert `short' and `char' to full-size `int'. */
5348 val = default_conversion (val);
5350 converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
5353 converted_args = nreverse (converted_args);
5355 /* Avoid actually calling copy constructors and copy assignment operators,
5356 if possible. */
5357 if (DECL_CONSTRUCTOR_P (fn)
5358 && TREE_VEC_LENGTH (convs) == 1
5359 && copy_args_p (fn))
5361 tree targ;
5362 arg = TREE_VALUE (TREE_CHAIN (converted_args));
5364 /* Pull out the real argument, disregarding const-correctness. */
5365 targ = arg;
5366 while (TREE_CODE (targ) == NOP_EXPR
5367 || TREE_CODE (targ) == NON_LVALUE_EXPR
5368 || TREE_CODE (targ) == CONVERT_EXPR)
5369 targ = TREE_OPERAND (targ, 0);
5370 if (TREE_CODE (targ) == ADDR_EXPR)
5372 targ = TREE_OPERAND (targ, 0);
5373 if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5374 TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5375 targ = NULL_TREE;
5377 else
5378 targ = NULL_TREE;
5380 if (targ)
5381 arg = targ;
5382 else
5383 arg = build_indirect_ref (arg, 0);
5385 /* [class.copy]: the copy constructor is implicitly defined even if
5386 the implementation elided its use. */
5387 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5388 mark_used (fn);
5390 /* If we're creating a temp and we already have one, don't create a
5391 new one. If we're not creating a temp but we get one, use
5392 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5393 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5394 temp or an INIT_EXPR otherwise. */
5395 if (integer_zerop (TREE_VALUE (args)))
5397 if (! real_lvalue_p (arg))
5398 return arg;
5399 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5401 val = build (VAR_DECL, DECL_CONTEXT (fn));
5402 layout_decl (val, 0);
5403 val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5404 TREE_SIDE_EFFECTS (val) = 1;
5405 return val;
5408 else if (! real_lvalue_p (arg)
5409 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5411 tree to = stabilize_reference
5412 (build_indirect_ref (TREE_VALUE (args), 0));
5413 val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5414 TREE_SIDE_EFFECTS (val) = 1;
5415 return build_unary_op (ADDR_EXPR, val, 0);
5418 else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5419 && copy_args_p (fn)
5420 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5422 tree to = stabilize_reference
5423 (build_indirect_ref (TREE_VALUE (converted_args), 0));
5424 arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5425 val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5426 TREE_SIDE_EFFECTS (val) = 1;
5427 return val;
5430 mark_used (fn);
5432 if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5433 return build_signature_method_call (fn, converted_args);
5434 else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5436 tree t, *p = &TREE_VALUE (converted_args);
5437 tree binfo = get_binfo
5438 (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5439 *p = convert_pointer_to_real (binfo, *p);
5440 if (TREE_SIDE_EFFECTS (*p))
5441 *p = save_expr (*p);
5442 t = build_pointer_type (TREE_TYPE (fn));
5443 fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5444 TREE_TYPE (fn) = t;
5446 else if (DECL_INLINE (fn))
5447 fn = inline_conversion (fn);
5448 else
5449 fn = build_addr_func (fn);
5451 fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5452 if (TREE_TYPE (fn) == void_type_node)
5453 return fn;
5454 fn = require_complete_type (fn);
5455 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5456 fn = build_cplus_new (TREE_TYPE (fn), fn);
5457 return convert_from_reference (fn);
5460 static tree
5461 build_new_method_call (instance, name, args, basetype_path, flags)
5462 tree instance, name, args, basetype_path;
5463 int flags;
5465 struct z_candidate *candidates = 0, *cand;
5466 tree explicit_targs = NULL_TREE;
5467 tree basetype, mem_args, fns, instance_ptr;
5468 tree pretty_name;
5469 tree user_args = args;
5470 tree templates = NULL_TREE;
5471 int template_only = 0;
5473 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5475 explicit_targs = TREE_OPERAND (name, 1);
5476 name = TREE_OPERAND (name, 0);
5477 template_only = 1;
5480 /* If there is an extra argument for controlling virtual bases,
5481 remove it for error reporting. */
5482 if (flags & LOOKUP_HAS_IN_CHARGE)
5483 user_args = TREE_CHAIN (args);
5485 args = resolve_args (args);
5487 if (args == error_mark_node)
5488 return error_mark_node;
5490 if (instance == NULL_TREE)
5491 basetype = BINFO_TYPE (basetype_path);
5492 else
5494 if (TREE_CODE (instance) == OFFSET_REF)
5495 instance = resolve_offset_ref (instance);
5496 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5497 instance = convert_from_reference (instance);
5498 basetype = TREE_TYPE (instance);
5500 /* XXX this should be handled before we get here. */
5501 if (! IS_AGGR_TYPE (basetype)
5502 && ! (TYPE_LANG_SPECIFIC (basetype)
5503 && (IS_SIGNATURE_POINTER (basetype)
5504 || IS_SIGNATURE_REFERENCE (basetype))))
5506 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5507 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5508 name, instance, basetype);
5510 return error_mark_node;
5513 /* If `instance' is a signature pointer/reference and `name' is
5514 not a constructor, we are calling a signature member function.
5515 In that case set the `basetype' to the signature type. */
5516 if ((IS_SIGNATURE_POINTER (basetype)
5517 || IS_SIGNATURE_REFERENCE (basetype))
5518 && TYPE_IDENTIFIER (basetype) != name)
5519 basetype = SIGNATURE_TYPE (basetype);
5522 if (basetype_path == NULL_TREE)
5523 basetype_path = TYPE_BINFO (basetype);
5525 if (instance)
5527 instance_ptr = build_this (instance);
5529 /* XXX this should be handled before we get here. */
5530 fns = build_field_call (basetype_path, instance_ptr, name, args);
5531 if (fns)
5532 return fns;
5534 else
5536 instance_ptr = build_int_2 (0, 0);
5537 TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5540 pretty_name
5541 = (name == ctor_identifier ? constructor_name (basetype) : name);
5543 fns = lookup_fnfields (basetype_path, name, 1);
5545 if (fns == error_mark_node)
5546 return error_mark_node;
5547 if (fns)
5549 tree t = TREE_VALUE (fns);
5550 if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5551 && ! (flags & LOOKUP_HAS_IN_CHARGE))
5553 flags |= LOOKUP_HAS_IN_CHARGE;
5554 args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
5556 mem_args = scratch_tree_cons (NULL_TREE, instance_ptr, args);
5557 for (; t; t = DECL_CHAIN (t))
5559 tree this_arglist;
5561 /* We can end up here for copy-init of same or base class. */
5562 if (name == ctor_identifier
5563 && (flags & LOOKUP_ONLYCONVERTING)
5564 && DECL_NONCONVERTING_P (t))
5565 continue;
5566 if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5567 this_arglist = mem_args;
5568 else
5569 this_arglist = args;
5571 if (TREE_CODE (t) == TEMPLATE_DECL)
5573 /* A member template. */
5574 templates = scratch_tree_cons (NULL_TREE, t, templates);
5575 candidates =
5576 add_template_candidate (candidates, t, explicit_targs,
5577 this_arglist,
5578 TREE_TYPE (name),
5579 LOOKUP_NORMAL);
5581 else if (! template_only)
5582 candidates = add_function_candidate (candidates, t,
5583 this_arglist, flags);
5585 if (candidates)
5586 candidates->basetype_path = TREE_PURPOSE (fns);
5590 if (! any_viable (candidates))
5592 /* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
5593 if (flags & LOOKUP_SPECULATIVELY)
5594 return NULL_TREE;
5595 cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5596 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5597 print_z_candidates (candidates);
5598 return error_mark_node;
5600 candidates = splice_viable (candidates);
5601 cand = tourney (candidates);
5603 if (cand == 0)
5605 cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5606 user_args);
5607 print_z_candidates (candidates);
5608 return error_mark_node;
5611 enforce_access (cand->basetype_path, cand->fn);
5612 if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5613 && instance == current_class_ref
5614 && DECL_CONSTRUCTOR_P (current_function_decl)
5615 && ! (flags & LOOKUP_NONVIRTUAL)
5616 && value_member (cand->fn, get_abstract_virtuals (basetype)))
5617 cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5618 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5619 && TREE_CODE (instance_ptr) == NOP_EXPR
5620 && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5621 cp_error ("cannot call member function `%D' without object", cand->fn);
5623 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5624 && ((instance == current_class_ref && (dtor_label || ctor_label))
5625 || resolves_to_fixed_type_p (instance, 0)))
5626 flags |= LOOKUP_NONVIRTUAL;
5628 /* Pedantically, normal function declarations are never considered
5629 to refer to template instantiations, so we only do this with
5630 -fguiding-decls. */
5631 if (flag_guiding_decls && templates && ! cand->template
5632 && ! DECL_INITIAL (cand->fn))
5633 add_maybe_template (cand->fn, templates);
5635 return build_over_call
5636 (cand->fn, cand->convs,
5637 TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5638 flags);
5641 /* Compare two implicit conversion sequences that differ only in their
5642 qualification conversion. Subroutine of compare_ics. */
5644 static int
5645 compare_qual (ics1, ics2)
5646 tree ics1, ics2;
5648 tree to1 = TREE_TYPE (ics1);
5649 tree to2 = TREE_TYPE (ics2);
5651 if (TYPE_PTRMEMFUNC_P (to1))
5652 to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1);
5653 if (TYPE_PTRMEMFUNC_P (to2))
5654 to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2);
5656 to1 = TREE_TYPE (to1);
5657 to2 = TREE_TYPE (to2);
5659 if (TREE_CODE (to1) == OFFSET_TYPE)
5661 to1 = TREE_TYPE (to1);
5662 to2 = TREE_TYPE (to2);
5665 if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5666 && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5667 return -1;
5668 else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5669 && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5670 return -1;
5671 else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5672 && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5673 return 1;
5674 else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5675 && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5676 return 1;
5677 return 0;
5680 /* Determine whether standard conversion sequence ICS1 is a proper
5681 subsequence of ICS2. We assume that a conversion of the same code
5682 between the same types indicates a subsequence. */
5684 static int
5685 is_subseq (ics1, ics2)
5686 tree ics1, ics2;
5688 /* Do not consider lvalue transformations here. */
5689 if (TREE_CODE (ics2) == RVALUE_CONV
5690 || TREE_CODE (ics2) == LVALUE_CONV)
5691 return 0;
5693 for (;; ics2 = TREE_OPERAND (ics2, 0))
5695 if (TREE_CODE (ics2) == TREE_CODE (ics1)
5696 && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
5697 && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5698 TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
5699 return 1;
5701 if (TREE_CODE (ics2) == USER_CONV
5702 || TREE_CODE (ics2) == AMBIG_CONV
5703 || TREE_CODE (ics2) == IDENTITY_CONV)
5704 return 0;
5708 /* Compare two implicit conversion sequences according to the rules set out in
5709 [over.ics.rank]. Return values:
5711 1: ics1 is better than ics2
5712 -1: ics2 is better than ics1
5713 0: ics1 and ics2 are indistinguishable */
5715 static int
5716 compare_ics (ics1, ics2)
5717 tree ics1, ics2;
5719 tree main1, main2;
5721 if (TREE_CODE (ics1) == QUAL_CONV)
5722 main1 = TREE_OPERAND (ics1, 0);
5723 else
5724 main1 = ics1;
5726 if (TREE_CODE (ics2) == QUAL_CONV)
5727 main2 = TREE_OPERAND (ics2, 0);
5728 else
5729 main2 = ics2;
5731 /* Conversions for `this' are PTR_CONVs, but we compare them as though
5732 they were REF_BINDs. */
5733 if (ICS_THIS_FLAG (ics1))
5735 tree t = main1;
5736 if (TREE_CODE (t) == PTR_CONV)
5737 t = TREE_OPERAND (t, 0);
5738 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5739 t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5740 ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5741 main1 = ics1 = t;
5743 if (ICS_THIS_FLAG (ics2))
5745 tree t = main2;
5746 if (TREE_CODE (t) == PTR_CONV)
5747 t = TREE_OPERAND (t, 0);
5748 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5749 t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5750 ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5751 main2 = ics2 = t;
5754 if (ICS_RANK (ics1) > ICS_RANK (ics2))
5755 return -1;
5756 else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5757 return 1;
5759 if (ICS_RANK (ics1) == BAD_RANK)
5761 if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5762 || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5763 return -1;
5764 else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5765 || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5766 return 1;
5768 /* else fall through */
5771 /* User-defined conversion sequence U1 is a better conversion sequence
5772 than another user-defined conversion sequence U2 if they contain the
5773 same user-defined conversion operator or constructor and if the sec-
5774 ond standard conversion sequence of U1 is better than the second
5775 standard conversion sequence of U2. */
5777 if (ICS_USER_FLAG (ics1))
5779 tree t1, t2;
5781 for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5782 if (TREE_CODE (t1) == AMBIG_CONV)
5783 return 0;
5784 for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5785 if (TREE_CODE (t2) == AMBIG_CONV)
5786 return 0;
5788 if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5789 return 0;
5790 else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5791 return -1;
5792 else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5793 return 1;
5795 /* else fall through */
5798 #if 0 /* Handled by ranking */
5799 /* A conversion that is not a conversion of a pointer, or pointer to
5800 member, to bool is better than another conversion that is such a
5801 conversion. */
5802 #endif
5804 if (TREE_CODE (main1) != TREE_CODE (main2))
5806 /* ...if S1 is a proper subsequence of S2 */
5807 if (is_subseq (main1, main2))
5808 return 1;
5809 if (is_subseq (main2, main1))
5810 return -1;
5811 return 0;
5814 if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5815 || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5817 tree to1 = TREE_TYPE (main1);
5818 tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5819 tree to2 = TREE_TYPE (main2);
5820 tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5821 int distf, distt;
5823 /* Standard conversion sequence S1 is a better conversion sequence than
5824 standard conversion sequence S2 if...
5826 S1 and S2 differ only in their qualification conversion and they
5827 yield types identical except for cv-qualifiers and S2 adds all the
5828 qualifiers that S1 adds (and in the same places) and S2 adds yet
5829 more cv-qualifiers than S1, or the similar case with reference
5830 binding15). */
5831 if (TREE_CODE (main1) == REF_BIND)
5833 if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
5834 == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
5835 return compare_qual (ics1, ics2);
5837 else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
5838 return compare_qual (ics1, ics2);
5840 if (TYPE_PTRMEMFUNC_P (to1))
5842 to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
5843 from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
5845 else if (TREE_CODE (main1) != BASE_CONV)
5847 to1 = TREE_TYPE (to1);
5848 if (TREE_CODE (main1) != REF_BIND)
5849 from1 = TREE_TYPE (from1);
5851 if (TREE_CODE (to1) == OFFSET_TYPE)
5853 to1 = TYPE_OFFSET_BASETYPE (to1);
5854 from1 = TYPE_OFFSET_BASETYPE (from1);
5858 if (TYPE_PTRMEMFUNC_P (to2))
5860 to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
5861 from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
5863 else if (TREE_CODE (main1) != BASE_CONV)
5865 to2 = TREE_TYPE (to2);
5866 if (TREE_CODE (main1) != REF_BIND)
5867 from2 = TREE_TYPE (from2);
5869 if (TREE_CODE (to2) == OFFSET_TYPE)
5871 to2 = TYPE_OFFSET_BASETYPE (to2);
5872 from2 = TYPE_OFFSET_BASETYPE (from2);
5876 if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
5877 return 0;
5879 /* The sense of pmem conversions is reversed from that of the other
5880 conversions. */
5881 if (TREE_CODE (main1) == PMEM_CONV)
5883 tree t = from1; from1 = from2; from2 = t;
5884 t = to1; to1 = to2; to2 = t;
5887 distf = get_base_distance (from1, from2, 0, 0);
5888 if (distf == -1)
5890 distf = -get_base_distance (from2, from1, 0, 0);
5891 if (distf == 1)
5892 return 0;
5895 /* If class B is derived directly or indirectly from class A,
5896 conver- sion of B* to A* is better than conversion of B* to
5897 void*, and conversion of A* to void* is better than
5898 conversion of B* to void*. */
5900 if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
5902 if (distf > 0)
5903 return 1;
5904 else if (distf < 0)
5905 return -1;
5907 else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
5908 && get_base_distance (to1, from1, 0, 0) != -1)
5909 return 1;
5910 else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
5911 && get_base_distance (to2, from2, 0, 0) != -1)
5912 return -1;
5914 if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
5915 return 0;
5917 /* If class B is derived directly or indirectly from class A and class
5918 C is derived directly or indirectly from B */
5920 distt = get_base_distance (to1, to2, 0, 0);
5921 if (distt == -1)
5923 distt = -get_base_distance (to2, to1, 0, 0);
5924 if (distt == 1)
5925 return 0;
5928 /* --conversion of C* to B* is better than conversion of C* to A*, */
5929 if (distf == 0)
5931 if (distt > 0)
5932 return -1;
5933 else if (distt < 0)
5934 return 1;
5936 /* --conversion of B* to A* is better than conversion of C* to A*, */
5937 else if (distt == 0)
5939 if (distf > 0)
5940 return 1;
5941 else if (distf < 0)
5942 return -1;
5945 else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
5946 || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
5948 if (TREE_TYPE (main1) == TREE_TYPE (main2))
5949 return compare_qual (ics1, ics2);
5951 #if 0 /* This is now handled by making identity better than anything else. */
5952 /* existing practice, not WP-endorsed: const char * -> const char *
5953 is better than char * -> const char *. (jason 6/29/96) */
5954 if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
5955 return -compare_qual (main1, main2);
5956 #endif
5959 return 0;
5962 /* The source type for this standard conversion sequence. */
5964 static tree
5965 source_type (t)
5966 tree t;
5968 for (;; t = TREE_OPERAND (t, 0))
5970 if (TREE_CODE (t) == USER_CONV
5971 || TREE_CODE (t) == AMBIG_CONV
5972 || TREE_CODE (t) == IDENTITY_CONV)
5973 return TREE_TYPE (t);
5975 my_friendly_abort (1823);
5978 /* Compare two candidates for overloading as described in
5979 [over.match.best]. Return values:
5981 1: cand1 is better than cand2
5982 -1: cand2 is better than cand1
5983 0: cand1 and cand2 are indistinguishable */
5985 static int
5986 joust (cand1, cand2)
5987 struct z_candidate *cand1, *cand2;
5989 int winner = 0;
5990 int i, off1 = 0, off2 = 0, len;
5992 /* Candidates that involve bad conversions are always worse than those
5993 that don't. */
5994 if (cand1->viable > cand2->viable)
5995 return 1;
5996 if (cand1->viable < cand2->viable)
5997 return -1;
5999 /* a viable function F1
6000 is defined to be a better function than another viable function F2 if
6001 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6002 ICSi(F2), and then */
6004 /* for some argument j, ICSj(F1) is a better conversion sequence than
6005 ICSj(F2) */
6007 /* For comparing static and non-static member functions, we ignore the
6008 implicit object parameter of the non-static function. The WP says to
6009 pretend that the static function has an object parm, but that won't
6010 work with operator overloading. */
6011 len = TREE_VEC_LENGTH (cand1->convs);
6012 if (len != TREE_VEC_LENGTH (cand2->convs))
6014 if (DECL_STATIC_FUNCTION_P (cand1->fn)
6015 && ! DECL_STATIC_FUNCTION_P (cand2->fn))
6016 off2 = 1;
6017 else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
6018 && DECL_STATIC_FUNCTION_P (cand2->fn))
6020 off1 = 1;
6021 --len;
6023 else
6024 my_friendly_abort (42);
6027 for (i = 0; i < len; ++i)
6029 tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
6030 tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
6031 int comp = compare_ics (t1, t2);
6033 if (comp != 0)
6035 #if 0 /* move this warning to tourney. */
6036 if (warn_sign_promo
6037 && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
6038 && TREE_CODE (t1) == STD_CONV
6039 && TREE_CODE (t2) == STD_CONV
6040 && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
6041 && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
6042 && (TYPE_PRECISION (TREE_TYPE (t1))
6043 == TYPE_PRECISION (TREE_TYPE (t2)))
6044 && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
6045 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
6046 == ENUMERAL_TYPE)))
6048 tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
6049 tree type1, type2;
6050 if (comp > 0)
6051 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
6052 else
6053 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
6055 cp_warning ("passing `%T' chooses `%T' over `%T'",
6056 type, type1, type2);
6057 cp_warning (" in call to `%D'", DECL_NAME (cand1->fn));
6059 #endif
6061 if (winner && comp != winner)
6063 winner = 0;
6064 goto tweak;
6066 winner = comp;
6070 #if 0 /* move this warning to tourney. */
6071 /* warn about confusing overload resolution */
6072 if (winner && cand1->second_conv
6073 && ! DECL_CONSTRUCTOR_P (cand1->fn)
6074 && ! DECL_CONSTRUCTOR_P (cand2->fn))
6076 int comp = compare_ics (cand1->second_conv, cand2->second_conv);
6077 if (comp && comp != winner)
6079 struct z_candidate *w, *l;
6080 if (winner == 1)
6081 w = cand1, l = cand2;
6082 else
6083 w = cand2, l = cand1;
6084 cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
6085 cp_warning (" for conversion from `%T' to `%T'",
6086 TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
6087 TREE_TYPE (w->second_conv));
6088 cp_warning (" because conversion sequence for `this' argument is better");
6091 #endif
6093 if (winner)
6094 return winner;
6096 /* or, if not that,
6097 F1 is a non-template function and F2 is a template function */
6099 if (! cand1->template && cand2->template)
6100 return 1;
6101 else if (cand1->template && ! cand2->template)
6102 return -1;
6103 else if (cand1->template && cand2->template)
6104 winner = more_specialized
6105 (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
6107 /* or, if not that,
6108 the context is an initialization by user-defined conversion (see
6109 _dcl.init_ and _over.match.user_) and the standard conversion
6110 sequence from the return type of F1 to the destination type (i.e.,
6111 the type of the entity being initialized) is a better conversion
6112 sequence than the standard conversion sequence from the return type
6113 of F2 to the destination type. */
6115 if (! winner && cand1->second_conv)
6116 winner = compare_ics (cand1->second_conv, cand2->second_conv);
6118 /* If the built-in candidates are the same, arbitrarily pick one. */
6119 if (! winner && cand1->fn == cand2->fn
6120 && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6122 for (i = 0; i < len; ++i)
6123 if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
6124 TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
6125 break;
6126 if (i == TREE_VEC_LENGTH (cand1->convs))
6127 return 1;
6129 /* Kludge around broken overloading rules whereby
6130 Integer a, b; test ? a : b; is ambiguous, since there's a builtin
6131 that takes references and another that takes values. */
6132 if (cand1->fn == ansi_opname[COND_EXPR])
6134 tree c1 = TREE_VEC_ELT (cand1->convs, 1);
6135 tree c2 = TREE_VEC_ELT (cand2->convs, 1);
6136 tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
6137 tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
6139 if (comptypes (t1, t2, 1))
6141 if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
6142 return 1;
6143 if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
6144 return -1;
6149 tweak:
6151 /* Extension: If the worst conversion for one candidate is worse than the
6152 worst conversion for the other, take the first. */
6153 if (! winner && ! pedantic)
6155 int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
6157 for (i = 0; i < len; ++i)
6159 if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
6160 rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
6161 if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
6162 rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
6165 if (rank1 < rank2)
6166 return 1;
6167 if (rank1 > rank2)
6168 return -1;
6171 return winner;
6174 /* Given a list of candidates for overloading, find the best one, if any.
6175 This algorithm has a worst case of O(2n) (winner is last), and a best
6176 case of O(n/2) (totally ambiguous); much better than a sorting
6177 algorithm. */
6179 static struct z_candidate *
6180 tourney (candidates)
6181 struct z_candidate *candidates;
6183 struct z_candidate *champ = candidates, *challenger;
6184 int fate;
6186 /* Walk through the list once, comparing each current champ to the next
6187 candidate, knocking out a candidate or two with each comparison. */
6189 for (challenger = champ->next; challenger; )
6191 fate = joust (champ, challenger);
6192 if (fate == 1)
6193 challenger = challenger->next;
6194 else
6196 if (fate == 0)
6198 champ = challenger->next;
6199 if (champ == 0)
6200 return 0;
6202 else
6203 champ = challenger;
6205 challenger = champ->next;
6209 /* Make sure the champ is better than all the candidates it hasn't yet
6210 been compared to. This may do one more comparison than necessary. Oh
6211 well. */
6213 for (challenger = candidates; challenger != champ;
6214 challenger = challenger->next)
6216 fate = joust (champ, challenger);
6217 if (fate != 1)
6218 return 0;
6221 return champ;
6225 can_convert (to, from)
6226 tree to, from;
6228 if (flag_ansi_overloading)
6230 tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
6231 return (t && ! ICS_BAD_FLAG (t));
6233 else
6235 struct harshness_code h;
6236 h = convert_harshness (to, from, NULL_TREE);
6237 return (h.code < USER_CODE) && (h.distance >= 0);
6242 can_convert_arg (to, from, arg)
6243 tree to, from, arg;
6245 if (flag_ansi_overloading)
6247 tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6248 return (t && ! ICS_BAD_FLAG (t));
6250 else
6252 struct harshness_code h;
6253 h = convert_harshness (to, from, arg);
6254 return (h.code < USER_CODE) && (h.distance >= 0);