1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 hacked by Brendan Kehoe (brendan@cygnus.com).
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)
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. */
35 #define obstack_chunk_alloc xmalloc
36 #define obstack_chunk_free free
40 extern int inhibit_warnings
;
41 extern int flag_assume_nonnull_objects
;
42 extern tree ctor_label
, dtor_label
;
45 extern tree
unary_complex_lvalue ();
47 /* Compute the ease with which a conversion can be performed
48 between an expected and the given type. */
49 static struct harshness_code
convert_harshness ();
51 #define EVIL_RETURN(ARG) ((ARG).code = EVIL_CODE, (ARG))
52 #define STD_RETURN(ARG) ((ARG).code = STD_CODE, (ARG))
53 #define QUAL_RETURN(ARG) ((ARG).code = QUAL_CODE, (ARG))
54 #define TRIVIAL_RETURN(ARG) ((ARG).code = TRIVIAL_CODE, (ARG))
55 #define ZERO_RETURN(ARG) ((ARG).code = 0, (ARG))
57 /* Ordering function for overload resolution. Compare two candidates
60 rank_for_overload (x
, y
)
61 struct candidate
*x
, *y
;
63 if (y
->h
.code
& (EVIL_CODE
|ELLIPSIS_CODE
|USER_CODE
))
64 return y
->h
.code
- x
->h
.code
;
65 if (x
->h
.code
& (EVIL_CODE
|ELLIPSIS_CODE
|USER_CODE
))
68 /* This is set by compute_conversion_costs, for calling a non-const
69 member function from a const member function. */
70 if ((y
->harshness
[0].code
& CONST_CODE
) ^ (x
->harshness
[0].code
& CONST_CODE
))
71 return y
->harshness
[0].code
- x
->harshness
[0].code
;
73 if (y
->h
.code
& STD_CODE
)
75 if (x
->h
.code
& STD_CODE
)
76 return y
->h
.distance
- x
->h
.distance
;
79 if (x
->h
.code
& STD_CODE
)
82 return y
->h
.code
- x
->h
.code
;
85 /* Compare two candidates, argument by argument. */
88 struct candidate
*x
, *y
;
92 if (x
->h_len
!= y
->h_len
)
95 for (i
= 0; i
< x
->h_len
; i
++)
97 if (y
->harshness
[i
].code
- x
->harshness
[i
].code
)
98 return y
->harshness
[i
].code
- x
->harshness
[i
].code
;
99 if ((y
->harshness
[i
].code
& STD_CODE
)
100 && (y
->harshness
[i
].distance
- x
->harshness
[i
].distance
))
101 return y
->harshness
[i
].distance
- x
->harshness
[i
].distance
;
103 /* They're both the same code. Now see if we're dealing with an
104 integral promotion that needs a finer grain of accuracy. */
105 if (y
->harshness
[0].code
& PROMO_CODE
106 && (y
->harshness
[i
].int_penalty
^ x
->harshness
[i
].int_penalty
))
107 return y
->harshness
[i
].int_penalty
- x
->harshness
[i
].int_penalty
;
112 /* TYPE is the type we wish to convert to. PARM is the parameter
113 we have to work with. We use a somewhat arbitrary cost function
114 to measure this conversion. */
115 static struct harshness_code
116 convert_harshness (type
, parmtype
, parm
)
117 register tree type
, parmtype
;
120 struct harshness_code h
;
121 register enum tree_code codel
;
122 register enum tree_code coder
;
129 #ifdef GATHER_STATISTICS
130 n_convert_harshness
++;
133 if (TREE_CODE (parmtype
) == REFERENCE_TYPE
)
136 parm
= convert_from_reference (parm
);
137 parmtype
= TREE_TYPE (parmtype
);
141 lvalue
= lvalue_p (parm
);
145 if (TYPE_PTRMEMFUNC_P (type
))
146 type
= TYPE_PTRMEMFUNC_FN_TYPE (type
);
147 if (TYPE_PTRMEMFUNC_P (parmtype
))
148 parmtype
= TYPE_PTRMEMFUNC_FN_TYPE (parmtype
);
150 codel
= TREE_CODE (type
);
151 coder
= TREE_CODE (parmtype
);
153 if (TYPE_MAIN_VARIANT (parmtype
) == TYPE_MAIN_VARIANT (type
))
154 return ZERO_RETURN (h
);
156 if (coder
== ERROR_MARK
)
157 return EVIL_RETURN (h
);
159 if (codel
== REFERENCE_TYPE
)
162 int constp
= parm
? TREE_READONLY (parm
) : TYPE_READONLY (parmtype
);
163 int volatilep
= (parm
? TREE_THIS_VOLATILE (parm
)
164 : TYPE_VOLATILE (parmtype
));
165 register tree intype
= TYPE_MAIN_VARIANT (parmtype
);
166 register enum tree_code form
= TREE_CODE (intype
);
169 ttl
= TREE_TYPE (type
);
171 /* Only allow const reference binding if we were given a parm to deal
172 with, since it isn't really a conversion. This is a hack to
173 prevent build_type_conversion from finding this conversion, but
174 still allow overloading to find it. */
175 if (! lvalue
&& ! (parm
&& TYPE_READONLY (ttl
)))
176 return EVIL_RETURN (h
);
178 if (TYPE_READONLY (ttl
) < constp
179 || TYPE_VOLATILE (ttl
) < volatilep
)
180 return EVIL_RETURN (h
);
182 /* When passing a non-const argument into a const reference, dig it a
183 little, so a non-const reference is preferred over this one. */
184 penalty
= ((TYPE_READONLY (ttl
) > constp
)
185 + (TYPE_VOLATILE (ttl
) > volatilep
));
187 ttl
= TYPE_MAIN_VARIANT (ttl
);
189 if (form
== OFFSET_TYPE
)
191 intype
= TREE_TYPE (intype
);
192 form
= TREE_CODE (intype
);
197 if (TREE_CODE (ttl
) == ARRAY_TYPE
&& TREE_CODE (ttr
) == ARRAY_TYPE
)
199 if (comptypes (ttl
, ttr
, 1))
200 return ZERO_RETURN (h
);
201 return EVIL_RETURN (h
);
204 h
= convert_harshness (ttl
, ttr
, NULL_TREE
);
205 if (penalty
&& h
.code
== 0)
208 h
.int_penalty
= penalty
;
213 if (codel
== POINTER_TYPE
&& fntype_p (parmtype
))
216 struct harshness_code h1
, h2
;
218 /* Get to the METHOD_TYPE or FUNCTION_TYPE that this might be. */
219 type
= TREE_TYPE (type
);
221 if (coder
== POINTER_TYPE
)
223 parmtype
= TREE_TYPE (parmtype
);
224 coder
= TREE_CODE (parmtype
);
227 if (coder
!= TREE_CODE (type
))
228 return EVIL_RETURN (h
);
230 if (type
!= parmtype
&& coder
== METHOD_TYPE
)
232 tree ttl
= TYPE_METHOD_BASETYPE (type
);
233 tree ttr
= TYPE_METHOD_BASETYPE (parmtype
);
235 int b_or_d
= get_base_distance (ttr
, ttl
, 0, 0);
238 b_or_d
= get_base_distance (ttl
, ttr
, 0, 0);
240 return EVIL_RETURN (h
);
241 h
.distance
= -b_or_d
;
247 type
= build_function_type
248 (TREE_TYPE (type
), TREE_CHAIN (TYPE_ARG_TYPES (type
)));
249 parmtype
= build_function_type
250 (TREE_TYPE (parmtype
), TREE_CHAIN (TYPE_ARG_TYPES (parmtype
)));
253 /* We allow the default conversion between function type
254 and pointer-to-function type for free. */
255 if (comptypes (type
, parmtype
, 1))
259 return EVIL_RETURN (h
);
261 /* Compare return types. */
262 p1
= TREE_TYPE (type
);
263 p2
= TREE_TYPE (parmtype
);
264 h2
= convert_harshness (p1
, p2
, NULL_TREE
);
265 if (h2
.code
& EVIL_CODE
)
268 h1
.code
= TRIVIAL_CODE
;
271 if (h2
.distance
!= 0)
275 /* This only works for pointers. */
276 if (TREE_CODE (p1
) != POINTER_TYPE
277 && TREE_CODE (p1
) != REFERENCE_TYPE
)
278 return EVIL_RETURN (h
);
282 /* Don't die if we happen to be dealing with void*. */
283 if (!IS_AGGR_TYPE (p1
) || !IS_AGGR_TYPE (p2
))
284 return EVIL_RETURN (h
);
286 binfo
= get_binfo (p2
, p1
, 0);
288 binfo
= get_binfo (p1
, p2
, 0);
290 if (! BINFO_OFFSET_ZEROP (binfo
))
293 static int explained
= 0;
295 message_2_types (sorry
, "cannot cast `%s' to `%s' at function call site", p2
, p1
);
297 message_2_types (sorry
, "cannot cast `%s' to `%s' at function call site", p1
, p2
);
300 sorry ("(because pointer values change during conversion)");
302 return EVIL_RETURN (h
);
307 if (h2
.distance
> h1
.distance
)
308 h1
.distance
= h2
.distance
;
310 p1
= TYPE_ARG_TYPES (type
);
311 p2
= TYPE_ARG_TYPES (parmtype
);
312 while (p1
&& TREE_VALUE (p1
) != void_type_node
313 && p2
&& TREE_VALUE (p2
) != void_type_node
)
315 h2
= convert_harshness (TREE_VALUE (p1
), TREE_VALUE (p2
),
317 if (h2
.code
& EVIL_CODE
)
322 /* This only works for pointers and references. */
323 if (TREE_CODE (TREE_VALUE (p1
)) != POINTER_TYPE
324 && TREE_CODE (TREE_VALUE (p1
)) != REFERENCE_TYPE
)
325 return EVIL_RETURN (h
);
326 h2
.distance
= - h2
.distance
;
330 if (h2
.distance
> h1
.distance
)
331 h1
.distance
= h2
.distance
;
332 p1
= TREE_CHAIN (p1
);
333 p2
= TREE_CHAIN (p2
);
340 return EVIL_RETURN (h
);
341 h1
.code
|= ELLIPSIS_CODE
;
346 if (TREE_PURPOSE (p1
) == NULL_TREE
)
347 h1
.code
|= EVIL_CODE
;
351 else if (codel
== POINTER_TYPE
&& coder
== OFFSET_TYPE
)
355 /* Get to the OFFSET_TYPE that this might be. */
356 type
= TREE_TYPE (type
);
358 if (coder
!= TREE_CODE (type
))
359 return EVIL_RETURN (h
);
361 ttl
= TYPE_OFFSET_BASETYPE (type
);
362 ttr
= TYPE_OFFSET_BASETYPE (parmtype
);
368 int b_or_d
= get_base_distance (ttr
, ttl
, 0, 0);
371 b_or_d
= get_base_distance (ttl
, ttr
, 0, 0);
373 return EVIL_RETURN (h
);
374 h
.distance
= -b_or_d
;
381 /* Now test the OFFSET_TYPE's target compatibility. */
382 type
= TREE_TYPE (type
);
383 parmtype
= TREE_TYPE (parmtype
);
386 if (coder
== UNKNOWN_TYPE
)
388 if (codel
== FUNCTION_TYPE
389 || codel
== METHOD_TYPE
390 || (codel
== POINTER_TYPE
391 && (TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
392 || TREE_CODE (TREE_TYPE (type
)) == METHOD_TYPE
)))
393 return TRIVIAL_RETURN (h
);
394 return EVIL_RETURN (h
);
397 if (coder
== VOID_TYPE
)
398 return EVIL_RETURN (h
);
400 if (codel
== BOOLEAN_TYPE
)
402 if (INTEGRAL_CODE_P (coder
) || coder
== REAL_TYPE
)
403 return STD_RETURN (h
);
404 else if (coder
== POINTER_TYPE
|| coder
== OFFSET_TYPE
)
406 /* Make this worse than any conversion to another pointer.
407 FIXME this is how I think the language should work, but it may not
408 end up being how the language is standardized (jason 1/30/95). */
410 return STD_RETURN (h
);
412 return EVIL_RETURN (h
);
415 if (INTEGRAL_CODE_P (codel
))
417 /* Control equivalence of ints an enums. */
419 if (codel
== ENUMERAL_TYPE
420 && flag_int_enum_equivalence
== 0)
422 /* Enums can be converted to ints, but not vice-versa. */
423 if (coder
!= ENUMERAL_TYPE
424 || TYPE_MAIN_VARIANT (type
) != TYPE_MAIN_VARIANT (parmtype
))
425 return EVIL_RETURN (h
);
428 /* else enums and ints (almost) freely interconvert. */
430 if (INTEGRAL_CODE_P (coder
))
432 if (TYPE_MAIN_VARIANT (type
)
433 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype
)))
436 #if 0 /* What purpose does this serve? -jason */
437 /* A char, short, wchar_t, etc., should promote to an int if
438 it can handle it, otherwise to an unsigned. So we'll make
440 if (type
!= integer_type_node
)
449 else if (coder
== REAL_TYPE
)
457 if (codel
== REAL_TYPE
)
459 if (coder
== REAL_TYPE
)
461 if (TYPE_MAIN_VARIANT (type
)
462 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype
)))
469 else if (INTEGRAL_CODE_P (coder
))
477 /* Convert arrays which have not previously been converted. */
479 if (codel
== ARRAY_TYPE
)
480 codel
= POINTER_TYPE
;
482 if (coder
== ARRAY_TYPE
)
484 coder
= POINTER_TYPE
;
487 parm
= decay_conversion (parm
);
488 parmtype
= TREE_TYPE (parm
);
491 parmtype
= build_pointer_type (TREE_TYPE (parmtype
));
494 /* Conversions among pointers */
495 if (codel
== POINTER_TYPE
&& coder
== POINTER_TYPE
)
497 register tree ttl
= TYPE_MAIN_VARIANT (TREE_TYPE (type
));
498 register tree ttr
= TYPE_MAIN_VARIANT (TREE_TYPE (parmtype
));
499 int penalty
= 4 * (ttl
!= ttr
);
501 /* Anything converts to void *. Since this may be `const void *'
502 (etc.) use VOID_TYPE instead of void_type_node. Otherwise, the
503 targets must be the same, except that we do allow (at some cost)
504 conversion between signed and unsigned pointer types. */
506 if ((TREE_CODE (ttl
) == METHOD_TYPE
507 || TREE_CODE (ttl
) == FUNCTION_TYPE
)
508 && TREE_CODE (ttl
) == TREE_CODE (ttr
))
510 if (comptypes (ttl
, ttr
, -1))
512 h
.code
= penalty
? STD_CODE
: 0;
521 if (TREE_CODE (ttl
) != VOID_TYPE
522 && (TREE_CODE (ttr
) != VOID_TYPE
|| !parm
|| !integer_zerop (parm
)))
524 if (TREE_UNSIGNED (ttl
) != TREE_UNSIGNED (ttr
))
526 ttl
= unsigned_type (ttl
);
527 ttr
= unsigned_type (ttr
);
530 if (comp_target_types (type
, parmtype
, 1) <= 0)
531 return EVIL_RETURN (h
);
534 if (!(TREE_CODE (ttl
) == VOID_TYPE
535 || TREE_CODE (ttr
) == VOID_TYPE
536 || (TREE_UNSIGNED (ttl
) ^ TREE_UNSIGNED (ttr
)
537 && (ttl
= unsigned_type (ttl
),
538 ttr
= unsigned_type (ttr
),
540 || (comp_target_types (ttl
, ttr
, 0) > 0)))
541 return EVIL_RETURN (h
);
544 if (penalty
== 10 || ttr
== ttl
)
546 tree tmp1
= TREE_TYPE (type
), tmp2
= TREE_TYPE (parmtype
);
548 /* If one was unsigned but the other wasn't, then we need to
549 do a standard conversion from T to unsigned T. */
551 h
.code
= PROMO_CODE
; /* was STD_CODE */
555 /* Note conversion from `T*' to `const T*',
556 or `T*' to `volatile T*'. */
558 && ((TYPE_READONLY (tmp1
) != TREE_READONLY (tmp2
))
559 || (TYPE_VOLATILE (tmp1
) != TYPE_VOLATILE (tmp2
))))
567 if (TREE_CODE (ttl
) == RECORD_TYPE
&& TREE_CODE (ttr
) == RECORD_TYPE
)
569 int b_or_d
= get_base_distance (ttl
, ttr
, 0, 0);
572 b_or_d
= get_base_distance (ttr
, ttl
, 0, 0);
574 return EVIL_RETURN (h
);
575 h
.distance
= -b_or_d
;
583 /* If converting from a `class*' to a `void*', make it
584 less favorable than any inheritance relationship. */
585 if (TREE_CODE (ttl
) == VOID_TYPE
&& IS_AGGR_TYPE (ttr
))
588 h
.distance
= CLASSTYPE_MAX_DEPTH (ttr
)+1;
592 h
.code
= penalty
? STD_CODE
: PROMO_CODE
;
593 /* Catch things like `const char *' -> `const void *'
594 vs `const char *' -> `void *'. */
597 tree tmp1
= TREE_TYPE (type
), tmp2
= TREE_TYPE (parmtype
);
598 if ((TYPE_READONLY (tmp1
) != TREE_READONLY (tmp2
))
599 || (TYPE_VOLATILE (tmp1
) != TYPE_VOLATILE (tmp2
)))
605 if (codel
== POINTER_TYPE
&& coder
== INTEGER_TYPE
)
607 /* This is not a bad match, but don't let it beat
608 integer-enum combinations. */
609 if (parm
&& integer_zerop (parm
))
617 /* C++: Since the `this' parameter of a signature member function
618 is represented as a signature pointer to handle default implementations
619 correctly, we can have the case that `type' is a signature pointer
620 while `parmtype' is a pointer to a signature table. We don't really
621 do any conversions in this case, so just return 0. */
623 if (codel
== RECORD_TYPE
&& coder
== POINTER_TYPE
624 && IS_SIGNATURE_POINTER (type
) && IS_SIGNATURE (TREE_TYPE (parmtype
)))
625 return ZERO_RETURN (h
);
627 if (codel
== RECORD_TYPE
&& coder
== RECORD_TYPE
)
629 int b_or_d
= get_base_distance (type
, parmtype
, 0, 0);
632 b_or_d
= get_base_distance (parmtype
, type
, 0, 0);
634 return EVIL_RETURN (h
);
635 h
.distance
= -b_or_d
;
642 return EVIL_RETURN (h
);
645 /* A clone of build_type_conversion for checking user-defined conversions in
646 overload resolution. */
649 user_harshness (type
, parmtype
, parm
)
650 register tree type
, parmtype
;
654 tree winner
= NULL_TREE
;
658 tree typename
= build_typename_overload (type
);
659 if (lookup_fnfields (TYPE_BINFO (parmtype
), typename
, 0))
663 for (conv
= lookup_conversions (parmtype
); conv
; conv
= TREE_CHAIN (conv
))
665 struct harshness_code tmp
;
667 if (winner
&& TREE_PURPOSE (winner
) == TREE_PURPOSE (conv
))
670 if (tmp
= convert_harshness (type
, TREE_VALUE (conv
), NULL_TREE
),
671 tmp
.code
< USER_CODE
&& tmp
.distance
>= 0)
690 can_convert (to
, from
)
693 struct harshness_code h
;
694 h
= convert_harshness (to
, from
, NULL_TREE
);
695 return h
.code
< USER_CODE
&& h
.distance
>= 0;
699 can_convert_arg (to
, from
, arg
)
702 struct harshness_code h
;
703 h
= convert_harshness (to
, from
, arg
);
704 return h
.code
< USER_CODE
&& h
.distance
>= 0;
707 #ifdef DEBUG_MATCHING
710 struct harshness_code
*h
;
712 static char buf
[1024];
715 bzero (buf
, 1024 * sizeof (char));
716 strcat (buf
, "codes=[");
717 if (h
->code
& EVIL_CODE
)
718 strcat (buf
, "EVIL");
719 if (h
->code
& CONST_CODE
)
720 strcat (buf
, " CONST");
721 if (h
->code
& ELLIPSIS_CODE
)
722 strcat (buf
, " ELLIPSIS");
723 if (h
->code
& USER_CODE
)
724 strcat (buf
, " USER");
725 if (h
->code
& STD_CODE
)
726 strcat (buf
, " STD");
727 if (h
->code
& PROMO_CODE
)
728 strcat (buf
, " PROMO");
729 if (h
->code
& QUAL_CODE
)
730 strcat (buf
, " QUAL");
731 if (h
->code
& TRIVIAL_CODE
)
732 strcat (buf
, " TRIVIAL");
736 sprintf (tmp
, "] distance=%d int_penalty=%d", h
->distance
, h
->int_penalty
);
744 /* Algorithm: For each argument, calculate how difficult it is to
745 make FUNCTION accept that argument. If we can easily tell that
746 FUNCTION won't be acceptable to one of the arguments, then we
747 don't need to compute the ease of converting the other arguments,
748 since it will never show up in the intersection of all arguments'
751 Conversions between builtin and user-defined types are allowed, but
752 no function involving such a conversion is preferred to one which
753 does not require such a conversion. Furthermore, such conversions
757 compute_conversion_costs (function
, tta_in
, cp
, arglen
)
760 struct candidate
*cp
;
763 tree ttf_in
= TYPE_ARG_TYPES (TREE_TYPE (function
));
767 /* Start out with no strikes against. */
768 int evil_strikes
= 0;
769 int ellipsis_strikes
= 0;
770 int user_strikes
= 0;
771 int b_or_d_strikes
= 0;
772 int easy_strikes
= 0;
774 int strike_index
= 0, win
;
775 struct harshness_code lose
;
776 extern int cp_silent
;
778 #ifdef GATHER_STATISTICS
779 n_compute_conversion_costs
++;
782 #ifndef DEBUG_MATCHING
783 /* We don't emit any warnings or errors while trying out each candidate. */
787 cp
->function
= function
;
788 cp
->arg
= tta
? TREE_VALUE (tta
) : NULL_TREE
;
789 cp
->u
.bad_arg
= 0; /* optimistic! */
793 cp
->h
.int_penalty
= 0;
794 bzero ((char *) cp
->harshness
,
795 (cp
->h_len
+ 1) * sizeof (struct harshness_code
));
799 struct harshness_code h
;
801 if (ttf
== void_list_node
)
804 if (type_unknown_p (TREE_VALUE (tta
)))
806 /* Must perform some instantiation here. */
807 tree rhs
= TREE_VALUE (tta
);
808 tree lhstype
= TREE_VALUE (ttf
);
810 /* Keep quiet about possible contravariance violations. */
811 int old_inhibit_warnings
= inhibit_warnings
;
812 inhibit_warnings
= 1;
814 /* @@ This is to undo what `grokdeclarator' does to
815 parameter types. It really should go through
816 something more general. */
818 TREE_TYPE (tta
) = unknown_type_node
;
819 rhs
= instantiate_type (lhstype
, rhs
, 0);
820 inhibit_warnings
= old_inhibit_warnings
;
822 if (TREE_CODE (rhs
) == ERROR_MARK
)
825 h
= convert_harshness (lhstype
, TREE_TYPE (rhs
), rhs
);
829 #ifdef DEBUG_MATCHING
830 static tree old_function
= NULL_TREE
;
832 if (!old_function
|| function
!= old_function
)
834 cp_error ("trying %D", function
);
835 old_function
= function
;
838 cp_error (" doing (%T) %E against arg %T",
839 TREE_TYPE (TREE_VALUE (tta
)), TREE_VALUE (tta
),
843 h
= convert_harshness (TREE_VALUE (ttf
),
844 TREE_TYPE (TREE_VALUE (tta
)),
847 #ifdef DEBUG_MATCHING
848 cp_error (" evaluated %s", print_harshness (&h
));
852 cp
->harshness
[strike_index
] = h
;
853 if ((h
.code
& EVIL_CODE
)
854 || ((h
.code
& STD_CODE
) && h
.distance
< 0))
856 cp
->u
.bad_arg
= strike_index
;
859 else if (h
.code
& ELLIPSIS_CODE
)
860 ellipsis_strikes
+= 1;
862 /* This is never set by `convert_harshness'. */
863 else if (h
.code
& USER_CODE
)
870 if ((h
.code
& STD_CODE
) && h
.distance
)
872 if (h
.distance
> b_or_d_strikes
)
873 b_or_d_strikes
= h
.distance
;
876 easy_strikes
+= (h
.code
& (STD_CODE
|PROMO_CODE
|TRIVIAL_CODE
));
877 cp
->h
.code
|= h
.code
;
878 /* Make sure we communicate this. */
879 cp
->h
.int_penalty
+= h
.int_penalty
;
882 ttf
= TREE_CHAIN (ttf
);
883 tta
= TREE_CHAIN (tta
);
889 /* ran out of formals, and parmlist is fixed size. */
890 if (ttf
/* == void_type_node */)
892 cp
->h
.code
= EVIL_CODE
;
899 struct harshness_code h
;
900 int l
= list_length (tta
);
901 ellipsis_strikes
+= l
;
902 h
.code
= ELLIPSIS_CODE
;
906 cp
->harshness
[strike_index
++] = h
;
909 else if (ttf
&& ttf
!= void_list_node
)
911 /* ran out of actuals, and no defaults. */
912 if (TREE_PURPOSE (ttf
) == NULL_TREE
)
914 cp
->h
.code
= EVIL_CODE
;
919 /* Store index of first default. */
920 cp
->harshness
[arglen
].distance
= strike_index
+1;
923 cp
->harshness
[arglen
].distance
= 0;
925 /* Argument list lengths work out, so don't need to check them again. */
928 /* We do not check for derived->base conversions here, since in
929 no case would they give evil strike counts, unless such conversions
930 are somehow ambiguous. */
932 /* See if any user-defined conversions apply.
933 But make sure that we do not loop. */
934 static int dont_convert_types
= 0;
936 if (dont_convert_types
)
938 cp
->h
.code
= EVIL_CODE
;
943 win
= 0; /* Only get one chance to win. */
944 ttf
= TYPE_ARG_TYPES (TREE_TYPE (function
));
951 if (ttf
== void_list_node
)
954 lose
= cp
->harshness
[strike_index
];
955 if ((lose
.code
& EVIL_CODE
)
956 || ((lose
.code
& STD_CODE
) && lose
.distance
< 0))
958 tree actual_type
= TREE_TYPE (TREE_VALUE (tta
));
959 tree formal_type
= TREE_VALUE (ttf
);
960 int extra_conversions
= 0;
962 dont_convert_types
= 1;
964 if (TREE_CODE (formal_type
) == REFERENCE_TYPE
)
965 formal_type
= TREE_TYPE (formal_type
);
966 if (TREE_CODE (actual_type
) == REFERENCE_TYPE
)
967 actual_type
= TREE_TYPE (actual_type
);
969 if (formal_type
!= error_mark_node
970 && actual_type
!= error_mark_node
)
972 formal_type
= TYPE_MAIN_VARIANT (formal_type
);
973 actual_type
= TYPE_MAIN_VARIANT (actual_type
);
975 if (TYPE_HAS_CONSTRUCTOR (formal_type
))
977 /* If it has a constructor for this type,
979 /* @@ There is no way to save this result yet, so
980 success is a NULL_TREE for now. */
981 if (convert_to_aggr (formal_type
, TREE_VALUE (tta
), 0, 1)
985 if (TYPE_LANG_SPECIFIC (actual_type
)
986 && TYPE_HAS_CONVERSION (actual_type
))
988 int extra
= user_harshness (formal_type
, actual_type
);
990 if (extra
== EVIL_CODE
)
995 extra_conversions
= extra
;
999 dont_convert_types
= 0;
1004 cp
->harshness
[strike_index
].code
1005 = USER_CODE
| (extra_conversions
? STD_CODE
: 0);
1010 if (cp
->u
.bad_arg
> strike_index
)
1011 cp
->u
.bad_arg
= strike_index
;
1013 evil_strikes
= win
? 2 : 1;
1018 ttf
= TREE_CHAIN (ttf
);
1019 tta
= TREE_CHAIN (tta
);
1024 /* Const member functions get a small penalty because defaulting
1025 to const is less useful than defaulting to non-const. */
1026 /* This is bogus, it does not correspond to anything in the ARM.
1027 This code will be fixed when this entire section is rewritten
1028 to conform to the ARM. (mrs) */
1029 if (TREE_CODE (TREE_TYPE (function
)) == METHOD_TYPE
)
1031 tree this_parm
= TREE_VALUE (ttf_in
);
1033 if (TREE_CODE (this_parm
) == RECORD_TYPE
/* Is `this' a sig ptr? */
1034 ? TYPE_READONLY (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (this_parm
))))
1035 : TYPE_READONLY (TREE_TYPE (this_parm
)))
1037 cp
->harshness
[0].code
|= TRIVIAL_CODE
;
1042 /* Calling a non-const member function from a const member function
1043 is probably invalid, but for now we let it only draw a warning.
1044 We indicate that such a mismatch has occurred by setting the
1045 harshness to a maximum value. */
1046 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tta_in
))) == POINTER_TYPE
1047 && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (TREE_VALUE (tta_in
))))))
1048 cp
->harshness
[0].code
|= CONST_CODE
;
1053 cp
->h
.code
= EVIL_CODE
;
1054 if (ellipsis_strikes
)
1055 cp
->h
.code
|= ELLIPSIS_CODE
;
1057 cp
->h
.code
|= USER_CODE
;
1059 #ifdef DEBUG_MATCHING
1060 cp_error ("final eval %s", print_harshness (&cp
->h
));
1064 /* Subroutine of ideal_candidate. See if X or Y is a better match
1067 strictly_better (x
, y
)
1068 unsigned short x
, y
;
1076 if (xor >= x
|| xor >= y
)
1081 /* When one of several possible overloaded functions and/or methods
1082 can be called, choose the best candidate for overloading.
1084 BASETYPE is the context from which we start method resolution
1085 or NULL if we are comparing overloaded functions.
1086 CANDIDATES is the array of candidates we have to choose from.
1087 N_CANDIDATES is the length of CANDIDATES.
1088 PARMS is a TREE_LIST of parameters to the function we'll ultimately
1089 choose. It is modified in place when resolving methods. It is not
1090 modified in place when resolving overloaded functions.
1091 LEN is the length of the parameter list. */
1093 static struct candidate
*
1094 ideal_candidate (basetype
, candidates
, n_candidates
, parms
, len
)
1096 struct candidate
*candidates
;
1101 struct candidate
*cp
= candidates
+n_candidates
;
1102 int i
, j
= -1, best_code
;
1104 /* For each argument, sort the functions from best to worst for the arg.
1105 For each function that's not best for this arg, set its overall
1106 harshness to EVIL so that other args won't like it. The candidate
1107 list for the last argument is the intersection of all the best-liked
1111 for (i
= 0; i
< len
; i
++)
1113 qsort (candidates
, n_candidates
, sizeof (struct candidate
),
1115 best_code
= cp
[-1].h
.code
;
1117 /* To find out functions that are worse than that represented
1118 by BEST_CODE, we can't just do a comparison like h.code>best_code.
1119 The total harshness for the "best" fn may be 8|8 for two args, and
1120 the harshness for the next-best may be 8|2. If we just compared,
1121 that would be checking 8>10, which would lead to the next-best
1122 being disqualified. What we actually want to do is get rid
1123 of functions that are definitely worse than that represented
1124 by best_code, i.e. those which have bits set higher than the
1125 highest in best_code. Sooooo, what we do is clear out everything
1126 represented by best_code, and see if we still come up with something
1127 higher. If so (e.g., 8|8 vs 8|16), it'll disqualify it properly. */
1128 for (j
= n_candidates
-2; j
>= 0; j
--)
1129 if ((candidates
[j
].h
.code
& ~best_code
) > best_code
)
1130 candidates
[j
].h
.code
= EVIL_CODE
;
1133 if (cp
[-1].h
.code
& EVIL_CODE
)
1136 qsort (candidates
, n_candidates
, sizeof (struct candidate
),
1138 best_code
= cp
[-1].h
.code
;
1141 /* If they're at least as good as each other, do an arg-by-arg check. */
1142 if (! strictly_better (cp
[-1].h
.code
, cp
[-2].h
.code
))
1147 for (j
= 0; j
< n_candidates
; j
++)
1148 if (! strictly_better (candidates
[j
].h
.code
, best_code
))
1151 qsort (candidates
+j
, n_candidates
-j
, sizeof (struct candidate
),
1153 for (i
= 0; i
< len
; i
++)
1155 if (cp
[-1].harshness
[i
].code
< cp
[-2].harshness
[i
].code
)
1157 else if (cp
[-1].harshness
[i
].code
> cp
[-2].harshness
[i
].code
)
1159 else if (cp
[-1].harshness
[i
].code
& STD_CODE
)
1161 /* If it involves a standard conversion, let the
1162 inheritance lattice be the final arbiter. */
1163 if (cp
[-1].harshness
[i
].distance
> cp
[-2].harshness
[i
].distance
)
1165 else if (cp
[-1].harshness
[i
].distance
< cp
[-2].harshness
[i
].distance
)
1168 else if (cp
[-1].harshness
[i
].code
& PROMO_CODE
)
1170 /* For integral promotions, take into account a finer
1171 granularity for determining which types should be favored
1172 over others in such promotions. */
1173 if (cp
[-1].harshness
[i
].int_penalty
> cp
[-2].harshness
[i
].int_penalty
)
1175 else if (cp
[-1].harshness
[i
].int_penalty
< cp
[-2].harshness
[i
].int_penalty
)
1180 if (! better
|| worse
)
1186 /* Assume that if the class referred to is not in the
1187 current class hierarchy, that it may be remote.
1188 PARENT is assumed to be of aggregate type here. */
1190 may_be_remote (parent
)
1193 if (TYPE_OVERLOADS_METHOD_CALL_EXPR (parent
) == 0)
1196 if (current_class_type
== NULL_TREE
)
1199 if (parent
== current_class_type
)
1202 if (UNIQUELY_DERIVED_FROM_P (parent
, current_class_type
))
1208 build_vfield_ref (datum
, type
)
1212 int old_assume_nonnull_objects
= flag_assume_nonnull_objects
;
1214 if (datum
== error_mark_node
)
1215 return error_mark_node
;
1217 /* Vtable references are always made from non-null objects. */
1218 flag_assume_nonnull_objects
= 1;
1219 if (TREE_CODE (TREE_TYPE (datum
)) == REFERENCE_TYPE
)
1220 datum
= convert_from_reference (datum
);
1222 if (! TYPE_USES_COMPLEX_INHERITANCE (type
))
1223 rval
= build (COMPONENT_REF
, TREE_TYPE (CLASSTYPE_VFIELD (type
)),
1224 datum
, CLASSTYPE_VFIELD (type
));
1226 rval
= build_component_ref (datum
, DECL_NAME (CLASSTYPE_VFIELD (type
)), 0, 0);
1227 flag_assume_nonnull_objects
= old_assume_nonnull_objects
;
1232 /* Build a call to a member of an object. I.e., one that overloads
1233 operator ()(), or is a pointer-to-function or pointer-to-method. */
1235 build_field_call (basetype_path
, instance_ptr
, name
, parms
)
1236 tree basetype_path
, instance_ptr
, name
, parms
;
1238 tree field
, instance
;
1240 if (instance_ptr
== current_class_decl
)
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 (C_C_D
, 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 return build_opfncall (CALL_EXPR
, LOOKUP_NORMAL
, instance
, parms
, NULL_TREE
);
1264 if (TREE_CODE (TREE_TYPE (instance
)) == POINTER_TYPE
)
1266 if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance
))) == FUNCTION_TYPE
)
1267 return build_function_call (instance
, parms
);
1268 else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance
))) == METHOD_TYPE
)
1269 return build_function_call (instance
, tree_cons (NULL_TREE
, current_class_decl
, parms
));
1275 /* Check to see if this is not really a reference to an instance variable
1276 with `operator()()' overloaded. */
1277 field
= lookup_field (basetype_path
, name
, 1, 0);
1279 /* This can happen if the reference was ambiguous or for access
1281 if (field
== error_mark_node
)
1282 return error_mark_node
;
1287 tree ftype
= TREE_TYPE (field
);
1289 if (TREE_CODE (ftype
) == REFERENCE_TYPE
)
1290 ftype
= TREE_TYPE (ftype
);
1292 if (TYPE_LANG_SPECIFIC (ftype
) && TYPE_OVERLOADS_CALL_EXPR (ftype
))
1294 /* Make the next search for this field very short. */
1295 basetype
= DECL_FIELD_CONTEXT (field
);
1296 instance_ptr
= convert_pointer_to (basetype
, instance_ptr
);
1298 instance
= build_indirect_ref (instance_ptr
, NULL_PTR
);
1299 return build_opfncall (CALL_EXPR
, LOOKUP_NORMAL
,
1300 build_component_ref_1 (instance
, field
, 0),
1303 if (TREE_CODE (ftype
) == POINTER_TYPE
)
1305 if (TREE_CODE (TREE_TYPE (ftype
)) == FUNCTION_TYPE
1306 || TREE_CODE (TREE_TYPE (ftype
)) == METHOD_TYPE
)
1308 /* This is a member which is a pointer to function. */
1310 = build_component_ref_1 (build_indirect_ref (instance_ptr
,
1312 field
, LOOKUP_COMPLAIN
);
1313 if (ref
== error_mark_node
)
1314 return error_mark_node
;
1315 return build_function_call (ref
, parms
);
1318 else if (TREE_CODE (ftype
) == METHOD_TYPE
)
1320 error ("invalid call via pointer-to-member function");
1321 return error_mark_node
;
1330 find_scoped_type (type
, inner_name
, inner_types
)
1331 tree type
, inner_name
, inner_types
;
1333 tree tags
= CLASSTYPE_TAGS (type
);
1337 /* The TREE_PURPOSE of an enum tag (which becomes a member of the
1338 enclosing class) is set to the name for the enum type. So, if
1339 inner_name is `bar', and we strike `baz' for `enum bar { baz }',
1340 then this test will be true. */
1341 if (TREE_PURPOSE (tags
) == inner_name
)
1343 if (inner_types
== NULL_TREE
)
1344 return DECL_NESTED_TYPENAME (TYPE_NAME (TREE_VALUE (tags
)));
1345 return resolve_scope_to_name (TREE_VALUE (tags
), inner_types
);
1347 tags
= TREE_CHAIN (tags
);
1351 /* XXX This needs to be fixed better. */
1352 if (TREE_CODE (type
) == UNINSTANTIATED_P_TYPE
)
1354 sorry ("nested class lookup in template type");
1359 /* Look for a TYPE_DECL. */
1360 for (tags
= TYPE_FIELDS (type
); tags
; tags
= TREE_CHAIN (tags
))
1361 if (TREE_CODE (tags
) == TYPE_DECL
&& DECL_NAME (tags
) == inner_name
)
1363 /* Code by raeburn. */
1364 if (inner_types
== NULL_TREE
)
1365 return DECL_NESTED_TYPENAME (tags
);
1366 return resolve_scope_to_name (TREE_TYPE (tags
), inner_types
);
1372 /* Resolve an expression NAME1::NAME2::...::NAMEn to
1373 the name that names the above nested type. INNER_TYPES
1374 is a chain of nested type names (held together by SCOPE_REFs);
1375 OUTER_TYPE is the type we know to enclose INNER_TYPES.
1376 Returns NULL_TREE if there is an error. */
1378 resolve_scope_to_name (outer_type
, inner_stuff
)
1379 tree outer_type
, inner_stuff
;
1382 tree inner_name
, inner_type
;
1384 if (outer_type
== NULL_TREE
&& current_class_type
!= NULL_TREE
)
1386 /* We first try to look for a nesting in our current class context,
1387 then try any enclosing classes. */
1388 tree type
= current_class_type
;
1390 while (type
&& (TREE_CODE (type
) == RECORD_TYPE
1391 || TREE_CODE (type
) == UNION_TYPE
))
1393 tree rval
= resolve_scope_to_name (type
, inner_stuff
);
1395 if (rval
!= NULL_TREE
)
1397 type
= DECL_CONTEXT (TYPE_NAME (type
));
1401 if (TREE_CODE (inner_stuff
) == SCOPE_REF
)
1403 inner_name
= TREE_OPERAND (inner_stuff
, 0);
1404 inner_type
= TREE_OPERAND (inner_stuff
, 1);
1408 inner_name
= inner_stuff
;
1409 inner_type
= NULL_TREE
;
1412 if (outer_type
== NULL_TREE
)
1415 /* If we have something that's already a type by itself,
1417 if (IDENTIFIER_HAS_TYPE_VALUE (inner_name
))
1420 return resolve_scope_to_name (IDENTIFIER_TYPE_VALUE (inner_name
),
1425 x
= lookup_name (inner_name
, 0);
1427 if (x
&& TREE_CODE (x
) == NAMESPACE_DECL
)
1429 x
= lookup_namespace_name (x
, inner_type
);
1435 if (! IS_AGGR_TYPE (outer_type
))
1438 /* Look for member classes or enums. */
1439 tmp
= find_scoped_type (outer_type
, inner_name
, inner_type
);
1441 /* If it's not a type in this class, then go down into the
1442 base classes and search there. */
1443 if (! tmp
&& TYPE_BINFO (outer_type
))
1445 tree binfos
= TYPE_BINFO_BASETYPES (outer_type
);
1446 int i
, n_baselinks
= binfos
? TREE_VEC_LENGTH (binfos
) : 0;
1448 for (i
= 0; i
< n_baselinks
; i
++)
1450 tree base_binfo
= TREE_VEC_ELT (binfos
, i
);
1451 tmp
= resolve_scope_to_name (BINFO_TYPE (base_binfo
), inner_stuff
);
1461 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
1462 This is how virtual function calls are avoided. */
1464 build_scoped_method_call (exp
, basetype
, name
, parms
)
1465 tree exp
, basetype
, name
, parms
;
1467 /* Because this syntactic form does not allow
1468 a pointer to a base class to be `stolen',
1469 we need not protect the derived->base conversion
1472 @@ But we do have to check access privileges later. */
1474 tree type
= TREE_TYPE (exp
);
1476 if (type
== error_mark_node
1477 || basetype
== error_mark_node
)
1478 return error_mark_node
;
1480 if (TREE_CODE (type
) == REFERENCE_TYPE
)
1481 type
= TREE_TYPE (type
);
1483 /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
1484 that explicit ~int is caught in the parser; this deals with typedefs
1485 and template parms. */
1486 if (TREE_CODE (name
) == BIT_NOT_EXPR
&& ! IS_AGGR_TYPE (basetype
))
1488 if (type
!= basetype
)
1489 cp_error ("type of `%E' does not match destructor type `%T' (type was `%T')",
1490 exp
, basetype
, type
);
1491 name
= TREE_OPERAND (name
, 0);
1492 if (basetype
!= get_type_value (name
))
1493 cp_error ("qualified type `%T' does not match destructor name `~%T'",
1495 return convert (void_type_node
, exp
);
1498 if (! is_aggr_type (basetype
, 1))
1499 return error_mark_node
;
1501 if (! IS_AGGR_TYPE (type
))
1503 cp_error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
1505 return error_mark_node
;
1508 if ((binfo
= binfo_or_else (basetype
, type
)))
1510 if (binfo
== error_mark_node
)
1511 return error_mark_node
;
1512 if (TREE_CODE (exp
) == INDIRECT_REF
)
1513 decl
= build_indirect_ref (convert_pointer_to (binfo
,
1514 build_unary_op (ADDR_EXPR
, exp
, 0)), NULL_PTR
);
1516 decl
= build_scoped_ref (exp
, basetype
);
1518 /* Call to a destructor. */
1519 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
1521 /* Explicit call to destructor. */
1522 name
= TREE_OPERAND (name
, 0);
1523 if (! (name
== constructor_name (TREE_TYPE (decl
))
1524 || TREE_TYPE (decl
) == get_type_value (name
)))
1527 ("qualified type `%T' does not match destructor name `~%T'",
1528 TREE_TYPE (decl
), name
);
1529 return error_mark_node
;
1531 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl
)))
1532 return convert (void_type_node
, exp
);
1534 return build_delete (TREE_TYPE (decl
), decl
, integer_two_node
,
1535 LOOKUP_NORMAL
|LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
,
1539 /* Call to a method. */
1540 return build_method_call (decl
, name
, parms
, binfo
,
1541 LOOKUP_NORMAL
|LOOKUP_NONVIRTUAL
);
1543 return error_mark_node
;
1547 print_candidates (candidates
)
1550 cp_error_at ("candidates are: %D", TREE_VALUE (candidates
));
1551 candidates
= TREE_CHAIN (candidates
);
1555 cp_error_at (" %D", TREE_VALUE (candidates
));
1556 candidates
= TREE_CHAIN (candidates
);
1561 print_n_candidates (candidates
, n
)
1562 struct candidate
*candidates
;
1567 cp_error_at ("candidates are: %D", candidates
[0].function
);
1568 for (i
= 1; i
< n
; i
++)
1569 cp_error_at (" %D", candidates
[i
].function
);
1572 /* Build something of the form ptr->method (args)
1573 or object.method (args). This can also build
1574 calls to constructors, and find friends.
1576 Member functions always take their class variable
1579 INSTANCE is a class instance.
1581 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
1583 PARMS help to figure out what that NAME really refers to.
1585 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
1586 down to the real instance type to use for access checking. We need this
1587 information to get protected accesses correct. This parameter is used
1588 by build_member_call.
1590 FLAGS is the logical disjunction of zero or more LOOKUP_
1591 flags. See cp-tree.h for more info.
1593 If this is all OK, calls build_function_call with the resolved
1596 This function must also handle being called to perform
1597 initialization, promotion/coercion of arguments, and
1598 instantiation of default parameters.
1600 Note that NAME may refer to an instance variable name. If
1601 `operator()()' is defined for the type of that field, then we return
1604 build_method_call (instance
, name
, parms
, basetype_path
, flags
)
1605 tree instance
, name
, parms
, basetype_path
;
1608 register tree function
, fntype
, value_type
;
1609 register tree basetype
, save_basetype
;
1610 register tree baselink
, result
, method_name
, parmtypes
, parm
;
1613 tree access
= access_public_node
;
1615 /* Range of cases for vtable optimization. */
1616 enum vtable_needs
{ not_needed
, maybe_needed
, unneeded
, needed
};
1617 enum vtable_needs need_vtbl
= not_needed
;
1621 tree instance_ptr
= NULL_TREE
;
1622 int all_virtual
= flag_all_virtual
;
1623 int static_call_context
= 0;
1624 tree found_fns
= NULL_TREE
;
1626 /* Keep track of `const' and `volatile' objects. */
1627 int constp
, volatilep
;
1629 #ifdef GATHER_STATISTICS
1630 n_build_method_call
++;
1633 if (instance
== error_mark_node
1634 || name
== error_mark_node
1635 || parms
== error_mark_node
1636 || (instance
!= NULL_TREE
&& TREE_TYPE (instance
) == error_mark_node
))
1637 return error_mark_node
;
1639 /* This is the logic that magically deletes the second argument to
1640 operator delete, if it is not needed. */
1641 if (name
== ansi_opname
[(int) DELETE_EXPR
] && list_length (parms
)==2)
1643 tree save_last
= TREE_CHAIN (parms
);
1645 /* get rid of unneeded argument */
1646 TREE_CHAIN (parms
) = NULL_TREE
;
1647 result
= build_method_call (instance
, name
, parms
, basetype_path
,
1648 (LOOKUP_SPECULATIVELY
|flags
)
1650 /* If it finds a match, return it. */
1652 return build_method_call (instance
, name
, parms
, basetype_path
, flags
);
1653 /* If it doesn't work, two argument delete must work */
1654 TREE_CHAIN (parms
) = save_last
;
1656 /* We already know whether it's needed or not for vec delete. */
1657 else if (name
== ansi_opname
[(int) VEC_DELETE_EXPR
]
1658 && TYPE_LANG_SPECIFIC (TREE_TYPE (instance
))
1659 && ! TYPE_VEC_DELETE_TAKES_SIZE (TREE_TYPE (instance
)))
1660 TREE_CHAIN (parms
) = NULL_TREE
;
1662 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
1664 flags
|= LOOKUP_DESTRUCTOR
;
1665 name
= TREE_OPERAND (name
, 0);
1667 error ("destructors take no parameters");
1668 basetype
= TREE_TYPE (instance
);
1669 if (TREE_CODE (basetype
) == REFERENCE_TYPE
)
1670 basetype
= TREE_TYPE (basetype
);
1671 if (! ((IS_AGGR_TYPE (basetype
)
1672 && name
== constructor_name (basetype
))
1673 || basetype
== get_type_value (name
)))
1675 cp_error ("destructor name `~%D' does not match type `%T' of expression",
1677 return convert (void_type_node
, instance
);
1680 if (! TYPE_HAS_DESTRUCTOR (basetype
))
1681 return convert (void_type_node
, instance
);
1682 instance
= default_conversion (instance
);
1683 instance_ptr
= build_unary_op (ADDR_EXPR
, instance
, 0);
1684 return build_delete (build_pointer_type (basetype
),
1685 instance_ptr
, integer_two_node
,
1686 LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
, 0);
1692 /* Initialize name for error reporting. */
1693 if (IDENTIFIER_OPNAME_P (name
) && ! IDENTIFIER_TYPENAME_P (name
))
1695 char *p
= operator_name_string (name
);
1696 xref_name
= (char *)alloca (strlen (p
) + 10);
1697 sprintf (xref_name
, "operator %s", p
);
1699 else if (TREE_CODE (name
) == SCOPE_REF
)
1700 xref_name
= IDENTIFIER_POINTER (TREE_OPERAND (name
, 1));
1702 xref_name
= IDENTIFIER_POINTER (name
);
1704 GNU_xref_call (current_function_decl
, xref_name
);
1707 if (instance
== NULL_TREE
)
1709 basetype
= NULL_TREE
;
1710 /* Check cases where this is really a call to raise
1712 if (current_class_type
&& TREE_CODE (name
) == IDENTIFIER_NODE
)
1714 basetype
= purpose_member (name
, CLASSTYPE_TAGS (current_class_type
));
1716 basetype
= TREE_VALUE (basetype
);
1718 else if (TREE_CODE (name
) == SCOPE_REF
1719 && TREE_CODE (TREE_OPERAND (name
, 0)) == IDENTIFIER_NODE
)
1721 if (! is_aggr_typedef (TREE_OPERAND (name
, 0), 1))
1722 return error_mark_node
;
1723 basetype
= purpose_member (TREE_OPERAND (name
, 1),
1724 CLASSTYPE_TAGS (IDENTIFIER_TYPE_VALUE (TREE_OPERAND (name
, 0))));
1726 basetype
= TREE_VALUE (basetype
);
1729 if (basetype
!= NULL_TREE
)
1731 /* call to a constructor... */
1732 else if (basetype_path
)
1733 basetype
= BINFO_TYPE (basetype_path
);
1734 else if (IDENTIFIER_HAS_TYPE_VALUE (name
))
1736 basetype
= IDENTIFIER_TYPE_VALUE (name
);
1737 name
= constructor_name_full (basetype
);
1741 tree typedef_name
= lookup_name (name
, 1);
1742 if (typedef_name
&& TREE_CODE (typedef_name
) == TYPE_DECL
)
1744 /* Canonicalize the typedef name. */
1745 basetype
= TREE_TYPE (typedef_name
);
1746 name
= TYPE_IDENTIFIER (basetype
);
1750 cp_error ("no constructor named `%T' in scope",
1752 return error_mark_node
;
1756 if (! IS_AGGR_TYPE (basetype
))
1759 if ((flags
& LOOKUP_COMPLAIN
) && TREE_CODE (basetype
) != ERROR_MARK
)
1760 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
1761 name
, instance
, basetype
);
1763 return error_mark_node
;
1766 else if (instance
== C_C_D
|| instance
== current_class_decl
)
1768 /* When doing initialization, we side-effect the TREE_TYPE of
1769 C_C_D, hence we cannot set up BASETYPE from CURRENT_CLASS_TYPE. */
1770 basetype
= TREE_TYPE (C_C_D
);
1772 /* Anything manifestly `this' in constructors and destructors
1773 has a known type, so virtual function tables are not needed. */
1774 if (TYPE_VIRTUAL_P (basetype
)
1775 && !(flags
& LOOKUP_NONVIRTUAL
))
1776 need_vtbl
= (dtor_label
|| ctor_label
)
1777 ? unneeded
: maybe_needed
;
1779 /* If `this' is a signature pointer and `name' is not a constructor,
1780 we are calling a signature member function. In that case, set the
1781 `basetype' to the signature type and dereference the `optr' field. */
1782 if (IS_SIGNATURE_POINTER (basetype
)
1783 && TYPE_IDENTIFIER (basetype
) != name
)
1785 basetype
= SIGNATURE_TYPE (basetype
);
1786 instance_ptr
= build_optr_ref (instance
);
1787 instance_ptr
= convert (build_pointer_type (basetype
), instance_ptr
);
1788 basetype_path
= TYPE_BINFO (basetype
);
1793 instance_ptr
= current_class_decl
;
1794 basetype_path
= TYPE_BINFO (current_class_type
);
1796 result
= build_field_call (basetype_path
, instance_ptr
, name
, parms
);
1801 else if (TREE_CODE (instance
) == RESULT_DECL
)
1803 basetype
= TREE_TYPE (instance
);
1804 /* Should we ever have to make a virtual function reference
1805 from a RESULT_DECL, know that it must be of fixed type
1806 within the scope of this function. */
1807 if (!(flags
& LOOKUP_NONVIRTUAL
) && TYPE_VIRTUAL_P (basetype
))
1808 need_vtbl
= maybe_needed
;
1809 instance_ptr
= build1 (ADDR_EXPR
, build_pointer_type (basetype
), instance
);
1813 /* The MAIN_VARIANT of the type that `instance_ptr' winds up being. */
1814 tree inst_ptr_basetype
;
1816 static_call_context
=
1817 (TREE_CODE (instance
) == INDIRECT_REF
1818 && TREE_CODE (TREE_OPERAND (instance
, 0)) == NOP_EXPR
1819 && TREE_OPERAND (TREE_OPERAND (instance
, 0), 0) == error_mark_node
);
1821 if (TREE_CODE (instance
) == OFFSET_REF
)
1822 instance
= resolve_offset_ref (instance
);
1824 /* the base type of an instance variable is pointer to class */
1825 basetype
= TREE_TYPE (instance
);
1827 if (TREE_CODE (basetype
) == REFERENCE_TYPE
)
1829 basetype
= TREE_TYPE (basetype
);
1830 if (! IS_AGGR_TYPE (basetype
))
1831 goto non_aggr_error
;
1832 /* Call to convert not needed because we are remaining
1833 within the same type. */
1834 instance_ptr
= build1 (NOP_EXPR
, build_pointer_type (basetype
),
1836 inst_ptr_basetype
= TYPE_MAIN_VARIANT (basetype
);
1840 if (! IS_AGGR_TYPE (basetype
)
1841 && ! (TYPE_LANG_SPECIFIC (basetype
)
1842 && (IS_SIGNATURE_POINTER (basetype
)
1843 || IS_SIGNATURE_REFERENCE (basetype
))))
1844 goto non_aggr_error
;
1846 /* If `instance' is a signature pointer/reference and `name' is
1847 not a constructor, we are calling a signature member function.
1848 In that case set the `basetype' to the signature type. */
1849 if ((IS_SIGNATURE_POINTER (basetype
)
1850 || IS_SIGNATURE_REFERENCE (basetype
))
1851 && TYPE_IDENTIFIER (basetype
) != name
)
1852 basetype
= SIGNATURE_TYPE (basetype
);
1854 if ((IS_SIGNATURE (basetype
)
1855 && (instance_ptr
= instance
))
1856 || (lvalue_p (instance
)
1857 && (instance_ptr
= build_unary_op (ADDR_EXPR
, instance
, 0)))
1858 || (instance_ptr
= unary_complex_lvalue (ADDR_EXPR
, instance
)))
1860 if (instance_ptr
== error_mark_node
)
1861 return error_mark_node
;
1863 else if (TREE_CODE (instance
) == NOP_EXPR
1864 || TREE_CODE (instance
) == CONSTRUCTOR
)
1866 /* A cast is not an lvalue. Initialize a fresh temp
1867 with the value we are casting from, and proceed with
1868 that temporary. We can't cast to a reference type,
1869 so that simplifies the initialization to something
1871 tree temp
= get_temp_name (TREE_TYPE (instance
), 0);
1872 if (IS_AGGR_TYPE (TREE_TYPE (instance
)))
1873 expand_aggr_init (temp
, instance
, 0, flags
);
1876 store_init_value (temp
, instance
);
1877 expand_decl_init (temp
);
1880 instance_ptr
= build_unary_op (ADDR_EXPR
, instance
, 0);
1884 if (TREE_CODE (instance
) != CALL_EXPR
)
1885 my_friendly_abort (125);
1886 if (TYPE_NEEDS_CONSTRUCTING (basetype
))
1887 instance
= build_cplus_new (basetype
, instance
, 0);
1890 instance
= get_temp_name (basetype
, 0);
1891 TREE_ADDRESSABLE (instance
) = 1;
1893 instance_ptr
= build_unary_op (ADDR_EXPR
, instance
, 0);
1895 /* @@ Should we call comp_target_types here? */
1896 if (IS_SIGNATURE (basetype
))
1897 inst_ptr_basetype
= basetype
;
1899 inst_ptr_basetype
= TREE_TYPE (TREE_TYPE (instance_ptr
));
1900 if (TYPE_MAIN_VARIANT (basetype
) == TYPE_MAIN_VARIANT (inst_ptr_basetype
))
1901 basetype
= inst_ptr_basetype
;
1904 instance_ptr
= convert (build_pointer_type (basetype
), instance_ptr
);
1905 if (instance_ptr
== error_mark_node
)
1906 return error_mark_node
;
1910 /* After converting `instance_ptr' above, `inst_ptr_basetype' was
1911 not updated, so we use `basetype' instead. */
1912 if (basetype_path
== NULL_TREE
1913 && IS_SIGNATURE (basetype
))
1914 basetype_path
= TYPE_BINFO (basetype
);
1915 else if (basetype_path
== NULL_TREE
||
1916 BINFO_TYPE (basetype_path
) != TYPE_MAIN_VARIANT (inst_ptr_basetype
))
1917 basetype_path
= TYPE_BINFO (inst_ptr_basetype
);
1919 result
= build_field_call (basetype_path
, instance_ptr
, name
, parms
);
1923 if (!(flags
& LOOKUP_NONVIRTUAL
) && TYPE_VIRTUAL_P (basetype
))
1925 if (TREE_SIDE_EFFECTS (instance_ptr
))
1927 /* This action is needed because the instance is needed
1928 for providing the base of the virtual function table.
1929 Without using a SAVE_EXPR, the function we are building
1930 may be called twice, or side effects on the instance
1931 variable (such as a post-increment), may happen twice. */
1932 instance_ptr
= save_expr (instance_ptr
);
1933 instance
= build_indirect_ref (instance_ptr
, NULL_PTR
);
1935 else if (TREE_CODE (TREE_TYPE (instance
)) == POINTER_TYPE
)
1937 /* This happens when called for operator new (). */
1938 instance
= build_indirect_ref (instance
, NULL_PTR
);
1941 need_vtbl
= maybe_needed
;
1945 if (TYPE_SIZE (basetype
) == 0)
1947 /* This is worth complaining about, I think. */
1948 cp_error ("cannot lookup method in incomplete type `%T'", basetype
);
1949 return error_mark_node
;
1952 save_basetype
= TYPE_MAIN_VARIANT (basetype
);
1955 if (all_virtual
== 1
1956 && (! strncmp (IDENTIFIER_POINTER (name
), OPERATOR_METHOD_FORMAT
,
1957 OPERATOR_METHOD_LENGTH
)
1958 || instance_ptr
== NULL_TREE
1959 || (TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype
) == 0)))
1964 for (parmtypes
= NULL_TREE
, parm
= parms
; parm
; parm
= TREE_CHAIN (parm
))
1966 tree t
= TREE_TYPE (TREE_VALUE (parm
));
1967 if (TREE_CODE (t
) == OFFSET_TYPE
)
1969 /* Convert OFFSET_TYPE entities to their normal selves. */
1970 TREE_VALUE (parm
) = resolve_offset_ref (TREE_VALUE (parm
));
1971 t
= TREE_TYPE (TREE_VALUE (parm
));
1973 if (TREE_CODE (TREE_VALUE (parm
)) == OFFSET_REF
1974 && TREE_CODE (t
) == METHOD_TYPE
)
1976 TREE_VALUE (parm
) = build_unary_op (ADDR_EXPR
, TREE_VALUE (parm
), 0);
1979 /* This breaks reference-to-array parameters. */
1980 if (TREE_CODE (t
) == ARRAY_TYPE
)
1982 /* Perform the conversion from ARRAY_TYPE to POINTER_TYPE in place.
1983 This eliminates needless calls to `compute_conversion_costs'. */
1984 TREE_VALUE (parm
) = default_conversion (TREE_VALUE (parm
));
1985 t
= TREE_TYPE (TREE_VALUE (parm
));
1988 if (t
== error_mark_node
)
1989 return error_mark_node
;
1990 last
= build_tree_list (NULL_TREE
, t
);
1991 parmtypes
= chainon (parmtypes
, last
);
1994 if (instance
&& IS_SIGNATURE (basetype
))
1996 /* @@ Should this be the constp/volatilep flags for the optr field
1997 of the signature pointer? */
1998 constp
= TYPE_READONLY (basetype
);
1999 volatilep
= TYPE_VOLATILE (basetype
);
2000 parms
= tree_cons (NULL_TREE
, instance_ptr
, parms
);
2004 /* TREE_READONLY (instance) fails for references. */
2005 constp
= TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr
)));
2006 volatilep
= TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr
)));
2007 parms
= tree_cons (NULL_TREE
, instance_ptr
, parms
);
2011 /* Raw constructors are always in charge. */
2012 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype
)
2013 && ! (flags
& LOOKUP_HAS_IN_CHARGE
))
2015 flags
|= LOOKUP_HAS_IN_CHARGE
;
2016 parms
= tree_cons (NULL_TREE
, integer_one_node
, parms
);
2017 parmtypes
= tree_cons (NULL_TREE
, integer_type_node
, parmtypes
);
2022 instance_ptr
= build_int_2 (0, 0);
2023 TREE_TYPE (instance_ptr
) = build_pointer_type (basetype
);
2024 parms
= tree_cons (NULL_TREE
, instance_ptr
, parms
);
2027 parmtypes
= tree_cons (NULL_TREE
, TREE_TYPE (instance_ptr
), parmtypes
);
2029 if (last
== NULL_TREE
)
2032 /* Look up function name in the structure type definition. */
2034 if ((IDENTIFIER_HAS_TYPE_VALUE (name
)
2035 && ! IDENTIFIER_OPNAME_P (name
)
2036 && IS_AGGR_TYPE (IDENTIFIER_TYPE_VALUE (name
))
2037 && TREE_CODE (IDENTIFIER_TYPE_VALUE (name
)) != UNINSTANTIATED_P_TYPE
)
2038 || name
== constructor_name (basetype
))
2040 tree tmp
= NULL_TREE
;
2041 if (IDENTIFIER_TYPE_VALUE (name
) == basetype
2042 || name
== constructor_name (basetype
))
2043 tmp
= TYPE_BINFO (basetype
);
2045 tmp
= get_binfo (IDENTIFIER_TYPE_VALUE (name
), basetype
, 0);
2047 if (tmp
!= NULL_TREE
)
2049 name_kind
= "constructor";
2051 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype
)
2052 && ! (flags
& LOOKUP_HAS_IN_CHARGE
))
2054 /* Constructors called for initialization
2055 only are never in charge. */
2058 flags
|= LOOKUP_HAS_IN_CHARGE
;
2059 tmplist
= tree_cons (NULL_TREE
, integer_zero_node
,
2060 TREE_CHAIN (parms
));
2061 TREE_CHAIN (parms
) = tmplist
;
2062 tmplist
= tree_cons (NULL_TREE
, integer_type_node
, TREE_CHAIN (parmtypes
));
2063 TREE_CHAIN (parmtypes
) = tmplist
;
2065 basetype
= BINFO_TYPE (tmp
);
2068 name_kind
= "method";
2071 name_kind
= "method";
2073 if (basetype_path
== NULL_TREE
2074 || BINFO_TYPE (basetype_path
) != TYPE_MAIN_VARIANT (basetype
))
2075 basetype_path
= TYPE_BINFO (basetype
);
2076 result
= lookup_fnfields (basetype_path
, name
,
2077 (flags
& LOOKUP_COMPLAIN
));
2078 if (result
== error_mark_node
)
2079 return error_mark_node
;
2083 /* Now, go look for this method name. We do not find destructors here.
2085 Putting `void_list_node' on the end of the parmtypes
2086 fakes out `build_decl_overload' into doing the right thing. */
2087 TREE_CHAIN (last
) = void_list_node
;
2088 method_name
= build_decl_overload (name
, parmtypes
,
2089 1 + (name
== constructor_name (save_basetype
)
2090 || name
== constructor_name_full (save_basetype
)));
2091 TREE_CHAIN (last
) = NULL_TREE
;
2094 for (pass
= 0; pass
< 2; pass
++)
2096 struct candidate
*candidates
;
2097 struct candidate
*cp
;
2101 /* This increments every time we go up the type hierarchy.
2102 The idea is to prefer a function of the derived class if possible. */
2110 = (struct candidate
*) alloca ((ever_seen
+1)
2111 * sizeof (struct candidate
));
2112 bzero ((char *) candidates
, (ever_seen
+ 1) * sizeof (struct candidate
));
2114 len
= list_length (parms
);
2117 /* First see if a global function has a shot at it. */
2118 if (flags
& LOOKUP_GLOBAL
)
2121 tree parm
= instance_ptr
;
2123 if (TREE_CODE (TREE_TYPE (parm
)) == REFERENCE_TYPE
)
2124 parm
= convert_from_reference (parm
);
2125 else if (TREE_CODE (TREE_TYPE (parm
)) == POINTER_TYPE
)
2126 parm
= build_indirect_ref (parm
, "friendifying parms (compiler error)");
2128 my_friendly_abort (167);
2130 friend_parms
= tree_cons (NULL_TREE
, parm
, TREE_CHAIN (parms
));
2133 cp
->harshness
= (struct harshness_code
*)
2134 alloca ((len
+ 1) * sizeof (struct harshness_code
));
2136 result
= build_overload_call (name
, friend_parms
, 0, cp
);
2137 /* If it turns out to be the one we were actually looking for
2138 (it was probably a friend function), the return the
2140 if (TREE_CODE (result
) == CALL_EXPR
)
2143 while ((cp
->h
.code
& EVIL_CODE
) == 0)
2145 /* non-standard uses: set the field to 0 to indicate
2146 we are using a non-member function. */
2148 if (cp
->harshness
[len
].distance
== 0
2149 && cp
->h
.code
< best
)
2158 /* We have a hit (of sorts). If the parameter list is
2159 "error_mark_node", or some variant thereof, it won't
2160 match any methods. Since we have verified that the is
2161 some method vaguely matching this one (in name at least),
2164 Don't stop for friends, however. */
2165 basetype_path
= TREE_PURPOSE (baselink
);
2167 function
= TREE_VALUE (baselink
);
2168 if (TREE_CODE (basetype_path
) == TREE_LIST
)
2169 basetype_path
= TREE_VALUE (basetype_path
);
2170 basetype
= BINFO_TYPE (basetype_path
);
2173 /* Cast the instance variable if necessary. */
2174 if (basetype
!= TYPE_MAIN_VARIANT
2175 (TREE_TYPE (TREE_TYPE (TREE_VALUE (parms
)))))
2177 if (basetype
== save_basetype
)
2178 TREE_VALUE (parms
) = instance_ptr
;
2181 tree type
= build_pointer_type
2182 (build_type_variant (basetype
, constp
, volatilep
));
2183 TREE_VALUE (parms
) = convert_force (type
, instance_ptr
, 0);
2187 /* FIXME: this is the wrong place to get an error. Hopefully
2188 the access-control rewrite will make this change more cleanly. */
2189 if (TREE_VALUE (parms
) == error_mark_node
)
2190 return error_mark_node
;
2193 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (function
)))
2194 function
= DECL_CHAIN (function
);
2196 for (; function
; function
= DECL_CHAIN (function
))
2198 #ifdef GATHER_STATISTICS
2199 n_inner_fields_searched
++;
2203 found_fns
= tree_cons (NULL_TREE
, function
, found_fns
);
2205 /* Not looking for friends here. */
2206 if (TREE_CODE (TREE_TYPE (function
)) == FUNCTION_TYPE
2207 && ! DECL_STATIC_FUNCTION_P (function
))
2212 && DECL_ASSEMBLER_NAME (function
) == method_name
)
2218 tree these_parms
= parms
;
2220 #ifdef GATHER_STATISTICS
2221 n_inner_fields_searched
++;
2224 cp
->harshness
= (struct harshness_code
*)
2225 alloca ((len
+ 1) * sizeof (struct harshness_code
));
2227 if (DECL_STATIC_FUNCTION_P (function
))
2228 these_parms
= TREE_CHAIN (these_parms
);
2229 compute_conversion_costs (function
, these_parms
, cp
, len
);
2231 if ((cp
->h
.code
& EVIL_CODE
) == 0)
2233 cp
->u
.field
= function
;
2234 cp
->function
= function
;
2235 cp
->basetypes
= basetype_path
;
2237 /* Don't allow non-converting constructors to convert. */
2238 if (flags
& LOOKUP_ONLYCONVERTING
2239 && DECL_LANG_SPECIFIC (function
)
2240 && DECL_NONCONVERTING_P (function
))
2243 /* No "two-level" conversions. */
2244 if (flags
& LOOKUP_NO_CONVERSION
2245 && (cp
->h
.code
& USER_CODE
))
2252 /* Now we have run through one link's member functions.
2253 arrange to head-insert this link's links. */
2254 baselink
= next_baselink (baselink
);
2256 /* Don't grab functions from base classes. lookup_fnfield will
2257 do the work to get us down into the right place. */
2258 baselink
= NULL_TREE
;
2262 tree igv
= lookup_name_nonclass (name
);
2264 /* No exact match could be found. Now try to find match
2265 using default conversions. */
2266 if ((flags
& LOOKUP_GLOBAL
) && igv
)
2268 if (TREE_CODE (igv
) == FUNCTION_DECL
)
2270 else if (TREE_CODE (igv
) == TREE_LIST
)
2271 ever_seen
+= count_functions (igv
);
2276 if ((flags
& (LOOKUP_SPECULATIVELY
|LOOKUP_COMPLAIN
))
2277 == LOOKUP_SPECULATIVELY
)
2280 TREE_CHAIN (last
) = void_list_node
;
2281 if (flags
& LOOKUP_GLOBAL
)
2282 cp_error ("no global or member function `%D(%A)' defined",
2285 cp_error ("no member function `%T::%D(%A)' defined",
2286 save_basetype
, name
, TREE_CHAIN (parmtypes
));
2287 return error_mark_node
;
2292 if (cp
- candidates
!= 0)
2294 /* Rank from worst to best. Then cp will point to best one.
2295 Private fields have their bits flipped. For unsigned
2296 numbers, this should make them look very large.
2297 If the best alternate has a (signed) negative value,
2298 then all we ever saw were private members. */
2299 if (cp
- candidates
> 1)
2301 int n_candidates
= cp
- candidates
;
2302 extern int warn_synth
;
2303 TREE_VALUE (parms
) = instance_ptr
;
2304 cp
= ideal_candidate (save_basetype
, candidates
,
2305 n_candidates
, parms
, len
);
2306 if (cp
== (struct candidate
*)0)
2308 if (flags
& LOOKUP_COMPLAIN
)
2310 TREE_CHAIN (last
) = void_list_node
;
2311 cp_error ("call of overloaded %s `%D(%A)' is ambiguous",
2312 name_kind
, name
, TREE_CHAIN (parmtypes
));
2313 print_n_candidates (candidates
, n_candidates
);
2315 return error_mark_node
;
2317 if (cp
->h
.code
& EVIL_CODE
)
2318 return error_mark_node
;
2320 && DECL_NAME (cp
->function
) == ansi_opname
[MODIFY_EXPR
]
2321 && DECL_ARTIFICIAL (cp
->function
)
2322 && n_candidates
== 2)
2324 cp_warning ("using synthesized `%#D' for copy assignment",
2326 cp_warning_at (" where cfront would use `%#D'",
2327 candidates
->function
);
2330 else if (cp
[-1].h
.code
& EVIL_CODE
)
2332 if (flags
& LOOKUP_COMPLAIN
)
2333 cp_error ("ambiguous type conversion requested for %s `%D'",
2335 return error_mark_node
;
2340 /* The global function was the best, so use it. */
2341 if (cp
->u
.field
== 0)
2343 /* We must convert the instance pointer into a reference type.
2344 Global overloaded functions can only either take
2345 aggregate objects (which come for free from references)
2346 or reference data types anyway. */
2347 TREE_VALUE (parms
) = copy_node (instance_ptr
);
2348 TREE_TYPE (TREE_VALUE (parms
)) = build_reference_type (TREE_TYPE (TREE_TYPE (instance_ptr
)));
2349 return build_function_call (cp
->function
, parms
);
2352 function
= cp
->function
;
2353 basetype_path
= cp
->basetypes
;
2354 if (! DECL_STATIC_FUNCTION_P (function
))
2355 TREE_VALUE (parms
) = cp
->arg
;
2356 goto found_and_maybe_warn
;
2359 if (flags
& (LOOKUP_COMPLAIN
|LOOKUP_SPECULATIVELY
))
2361 if ((flags
& (LOOKUP_SPECULATIVELY
|LOOKUP_COMPLAIN
))
2362 == LOOKUP_SPECULATIVELY
)
2365 if (DECL_STATIC_FUNCTION_P (cp
->function
))
2366 parms
= TREE_CHAIN (parms
);
2369 if (flags
& LOOKUP_SPECULATIVELY
)
2371 if (static_call_context
2372 && TREE_CODE (TREE_TYPE (cp
->function
)) == METHOD_TYPE
)
2373 cp_error ("object missing in call to `%D'", cp
->function
);
2374 else if (ever_seen
> 1)
2376 TREE_CHAIN (last
) = void_list_node
;
2377 cp_error ("no matching function for call to `%T::%D (%A)%V'",
2378 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (instance_ptr
))),
2379 name
, TREE_CHAIN (parmtypes
),
2380 TREE_TYPE (TREE_TYPE (instance_ptr
)));
2381 TREE_CHAIN (last
) = NULL_TREE
;
2382 print_candidates (found_fns
);
2385 report_type_mismatch (cp
, parms
, name_kind
);
2386 return error_mark_node
;
2389 if ((flags
& (LOOKUP_SPECULATIVELY
|LOOKUP_COMPLAIN
))
2392 cp_error ("%T has no method named %D", save_basetype
, name
);
2393 return error_mark_node
;
2399 found_and_maybe_warn
:
2400 if ((cp
->harshness
[0].code
& CONST_CODE
)
2401 /* 12.1p2: Constructors can be called for const objects. */
2402 && ! DECL_CONSTRUCTOR_P (cp
->function
))
2404 if (flags
& LOOKUP_COMPLAIN
)
2406 cp_error_at ("non-const member function `%D'", cp
->function
);
2407 error ("called for const object at this point in file");
2409 /* Not good enough for a match. */
2411 return error_mark_node
;
2415 /* Silently return error_mark_node. */
2416 return error_mark_node
;
2419 if (flags
& LOOKUP_PROTECT
)
2420 access
= compute_access (basetype_path
, function
);
2422 if (access
== access_private_node
)
2424 if (flags
& LOOKUP_COMPLAIN
)
2426 cp_error_at ("%s `%+#D' is %s", name_kind
, function
,
2427 TREE_PRIVATE (function
) ? "private"
2428 : "from private base class");
2429 error ("within this context");
2431 return error_mark_node
;
2433 else if (access
== access_protected_node
)
2435 if (flags
& LOOKUP_COMPLAIN
)
2437 cp_error_at ("%s `%+#D' %s", name_kind
, function
,
2438 TREE_PROTECTED (function
) ? "is protected"
2439 : "has protected accessibility");
2440 error ("within this context");
2442 return error_mark_node
;
2445 /* From here on down, BASETYPE is the type that INSTANCE_PTR's
2446 type (if it exists) is a pointer to. */
2448 if (DECL_ABSTRACT_VIRTUAL_P (function
)
2449 && instance
== C_C_D
2450 && DECL_CONSTRUCTOR_P (current_function_decl
)
2451 && ! (flags
& LOOKUP_NONVIRTUAL
)
2452 && value_member (function
, get_abstract_virtuals (basetype
)))
2453 cp_error ("abstract virtual `%#D' called from constructor", function
);
2455 if (IS_SIGNATURE (basetype
) && static_call_context
)
2457 cp_error ("cannot call signature member function `%T::%D' without signature pointer/reference",
2459 return error_mark_node
;
2461 else if (IS_SIGNATURE (basetype
))
2462 return build_signature_method_call (basetype
, instance
, function
, parms
);
2464 function
= DECL_MAIN_VARIANT (function
);
2465 mark_used (function
);
2467 /* Is it a synthesized method that needs to be synthesized? */
2468 if (DECL_ARTIFICIAL (function
) && ! DECL_INITIAL (function
)
2469 /* Kludge: don't synthesize for default args. */
2470 && current_function_decl
)
2471 synthesize_method (function
);
2473 if (pedantic
&& DECL_THIS_INLINE (function
) && ! DECL_ARTIFICIAL (function
)
2474 && ! DECL_INITIAL (function
) && ! DECL_PENDING_INLINE_INFO (function
))
2475 cp_warning ("inline function `%#D' called before definition", function
);
2477 fntype
= TREE_TYPE (function
);
2478 if (TREE_CODE (fntype
) == POINTER_TYPE
)
2479 fntype
= TREE_TYPE (fntype
);
2480 basetype
= DECL_CLASS_CONTEXT (function
);
2482 /* If we are referencing a virtual function from an object
2483 of effectively static type, then there is no need
2484 to go through the virtual function table. */
2485 if (need_vtbl
== maybe_needed
)
2487 int fixed_type
= resolves_to_fixed_type_p (instance
, 0);
2489 if (all_virtual
== 1
2490 && DECL_VINDEX (function
)
2491 && may_be_remote (basetype
))
2493 else if (DECL_VINDEX (function
))
2494 need_vtbl
= fixed_type
? unneeded
: needed
;
2496 need_vtbl
= not_needed
;
2499 if (TREE_CODE (fntype
) == METHOD_TYPE
&& static_call_context
2500 && !DECL_CONSTRUCTOR_P (function
))
2502 /* Let's be nice to the user for now, and give reasonable
2503 default behavior. */
2504 instance_ptr
= current_class_decl
;
2507 if (basetype
!= current_class_type
)
2509 tree binfo
= get_binfo (basetype
, current_class_type
, 1);
2510 if (binfo
== NULL_TREE
)
2512 error_not_base_type (function
, current_class_type
);
2513 return error_mark_node
;
2515 else if (basetype
== error_mark_node
)
2516 return error_mark_node
;
2519 /* Only allow a static member function to call another static member
2521 else if (DECL_LANG_SPECIFIC (function
)
2522 && !DECL_STATIC_FUNCTION_P (function
))
2524 cp_error ("cannot call member function `%D' without object",
2526 return error_mark_node
;
2530 value_type
= TREE_TYPE (fntype
) ? TREE_TYPE (fntype
) : void_type_node
;
2532 if (TYPE_SIZE (value_type
) == 0)
2534 if (flags
& LOOKUP_COMPLAIN
)
2535 incomplete_type_error (0, value_type
);
2536 return error_mark_node
;
2539 if (DECL_STATIC_FUNCTION_P (function
))
2540 parms
= convert_arguments (NULL_TREE
, TYPE_ARG_TYPES (fntype
),
2541 TREE_CHAIN (parms
), function
, LOOKUP_NORMAL
);
2542 else if (need_vtbl
== unneeded
)
2544 int sub_flags
= DECL_CONSTRUCTOR_P (function
) ? flags
: LOOKUP_NORMAL
;
2545 basetype
= TREE_TYPE (instance
);
2546 if (TYPE_METHOD_BASETYPE (TREE_TYPE (function
)) != TYPE_MAIN_VARIANT (basetype
)
2547 && TYPE_USES_COMPLEX_INHERITANCE (basetype
))
2549 basetype
= DECL_CLASS_CONTEXT (function
);
2550 instance_ptr
= convert_pointer_to (basetype
, instance_ptr
);
2551 instance
= build_indirect_ref (instance_ptr
, NULL_PTR
);
2553 parms
= tree_cons (NULL_TREE
, instance_ptr
,
2554 convert_arguments (NULL_TREE
, TREE_CHAIN (TYPE_ARG_TYPES (fntype
)), TREE_CHAIN (parms
), function
, sub_flags
));
2558 if ((flags
& LOOKUP_NONVIRTUAL
) == 0)
2559 basetype
= DECL_CONTEXT (function
);
2561 /* First parm could be integer_zerop with casts like
2562 ((Object*)0)->Object::IsA() */
2563 if (!integer_zerop (TREE_VALUE (parms
)))
2565 /* Since we can't have inheritance with a union, doing get_binfo
2566 on it won't work. We do all the convert_pointer_to_real
2567 stuff to handle MI correctly...for unions, that's not
2568 an issue, so we must short-circuit that extra work here. */
2569 tree tmp
= TREE_TYPE (TREE_TYPE (TREE_VALUE (parms
)));
2570 if (tmp
!= NULL_TREE
&& TREE_CODE (tmp
) == UNION_TYPE
)
2571 instance_ptr
= TREE_VALUE (parms
);
2574 tree binfo
= get_binfo (basetype
,
2575 TREE_TYPE (TREE_TYPE (TREE_VALUE (parms
))),
2577 instance_ptr
= convert_pointer_to_real (binfo
, TREE_VALUE (parms
));
2580 = convert_pointer_to (build_type_variant (basetype
,
2584 if (TREE_CODE (instance_ptr
) == COND_EXPR
)
2586 instance_ptr
= save_expr (instance_ptr
);
2587 instance
= build_indirect_ref (instance_ptr
, NULL_PTR
);
2589 else if (TREE_CODE (instance_ptr
) == NOP_EXPR
2590 && TREE_CODE (TREE_OPERAND (instance_ptr
, 0)) == ADDR_EXPR
2591 && TREE_OPERAND (TREE_OPERAND (instance_ptr
, 0), 0) == instance
)
2593 /* The call to `convert_pointer_to' may return error_mark_node. */
2594 else if (TREE_CODE (instance_ptr
) == ERROR_MARK
)
2595 return instance_ptr
;
2596 else if (instance
== NULL_TREE
2597 || TREE_CODE (instance
) != INDIRECT_REF
2598 || TREE_OPERAND (instance
, 0) != instance_ptr
)
2599 instance
= build_indirect_ref (instance_ptr
, NULL_PTR
);
2601 parms
= tree_cons (NULL_TREE
, instance_ptr
,
2602 convert_arguments (NULL_TREE
, TREE_CHAIN (TYPE_ARG_TYPES (fntype
)), TREE_CHAIN (parms
), function
, LOOKUP_NORMAL
));
2606 /* Constructors do not overload method calls. */
2607 else if (TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype
)
2608 && name
!= TYPE_IDENTIFIER (basetype
)
2609 && (TREE_CODE (function
) != FUNCTION_DECL
2610 || strncmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function
)),
2611 OPERATOR_METHOD_FORMAT
,
2612 OPERATOR_METHOD_LENGTH
))
2613 && (may_be_remote (basetype
) || instance
!= C_C_D
))
2617 parms
= TREE_CHAIN (parms
);
2619 if (!all_virtual
&& TREE_CODE (function
) == FUNCTION_DECL
)
2620 fn_as_int
= build_unary_op (ADDR_EXPR
, function
, 0);
2622 fn_as_int
= convert (TREE_TYPE (default_conversion (function
)), DECL_VINDEX (function
));
2623 if (all_virtual
== 1)
2624 fn_as_int
= convert (integer_type_node
, fn_as_int
);
2626 result
= build_opfncall (METHOD_CALL_EXPR
, LOOKUP_NORMAL
, instance
, fn_as_int
, parms
);
2628 if (result
== NULL_TREE
)
2630 compiler_error ("could not overload `operator->()(...)'");
2631 return error_mark_node
;
2633 else if (result
== error_mark_node
)
2634 return error_mark_node
;
2637 /* Do this if we want the result of operator->() to inherit
2638 the type of the function it is subbing for. */
2639 TREE_TYPE (result
) = value_type
;
2646 if (parms
== error_mark_node
2647 || (parms
&& TREE_CHAIN (parms
) == error_mark_node
))
2648 return error_mark_node
;
2650 if (need_vtbl
== needed
)
2652 function
= build_vfn_ref (&TREE_VALUE (parms
), instance
,
2653 DECL_VINDEX (function
));
2654 TREE_TYPE (function
) = build_pointer_type (fntype
);
2657 if (TREE_CODE (function
) == FUNCTION_DECL
)
2658 GNU_xref_call (current_function_decl
,
2659 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function
)));
2664 if (TREE_CODE (function
) == FUNCTION_DECL
)
2666 is_constructor
= DECL_CONSTRUCTOR_P (function
);
2667 function
= default_conversion (function
);
2672 function
= default_conversion (function
);
2675 result
= build_nt (CALL_EXPR
, function
, parms
, NULL_TREE
);
2677 TREE_TYPE (result
) = value_type
;
2678 TREE_SIDE_EFFECTS (result
) = 1;
2679 TREE_HAS_CONSTRUCTOR (result
) = is_constructor
;
2680 result
= convert_from_reference (result
);
2685 /* Similar to `build_method_call', but for overloaded non-member functions.
2686 The name of this function comes through NAME. The name depends
2689 Note that this function must handle simple `C' promotions,
2690 as well as variable numbers of arguments (...), and
2691 default arguments to boot.
2693 If the overloading is successful, we return a tree node which
2694 contains the call to the function.
2696 If overloading produces candidates which are probable, but not definite,
2697 we hold these candidates. If FINAL_CP is non-zero, then we are free
2698 to assume that final_cp points to enough storage for all candidates that
2699 this function might generate. The `harshness' array is preallocated for
2700 the first candidate, but not for subsequent ones.
2702 Note that the DECL_RTL of FUNCTION must be made to agree with this
2703 function's new name. */
2706 build_overload_call_real (fnname
, parms
, flags
, final_cp
, buildxxx
)
2709 struct candidate
*final_cp
;
2712 /* must check for overloading here */
2713 tree overload_name
, functions
, function
, parm
;
2714 tree parmtypes
= NULL_TREE
, last
= NULL_TREE
;
2715 register tree outer
;
2717 int parmlength
= list_length (parms
);
2719 struct candidate
*candidates
, *cp
;
2723 final_cp
[0].h
.code
= 0;
2724 final_cp
[0].h
.distance
= 0;
2725 final_cp
[0].function
= 0;
2727 final_cp
[1].h
.code
= EVIL_CODE
;
2730 for (parm
= parms
; parm
; parm
= TREE_CHAIN (parm
))
2732 register tree t
= TREE_TYPE (TREE_VALUE (parm
));
2734 if (t
== error_mark_node
)
2737 final_cp
->h
.code
= EVIL_CODE
;
2738 return error_mark_node
;
2740 if (TREE_CODE (t
) == OFFSET_TYPE
)
2742 /* This breaks reference-to-array parameters. */
2743 || TREE_CODE (t
) == ARRAY_TYPE
2746 /* Perform the conversion from ARRAY_TYPE to POINTER_TYPE in place.
2747 Also convert OFFSET_TYPE entities to their normal selves.
2748 This eliminates needless calls to `compute_conversion_costs'. */
2749 TREE_VALUE (parm
) = default_conversion (TREE_VALUE (parm
));
2750 t
= TREE_TYPE (TREE_VALUE (parm
));
2752 last
= build_tree_list (NULL_TREE
, t
);
2753 parmtypes
= chainon (parmtypes
, last
);
2756 TREE_CHAIN (last
) = void_list_node
;
2758 parmtypes
= void_list_node
;
2760 if (is_overloaded_fn (fnname
))
2763 if (TREE_CODE (fnname
) == TREE_LIST
)
2764 fnname
= TREE_PURPOSE (functions
);
2765 else if (TREE_CODE (fnname
) == FUNCTION_DECL
)
2766 fnname
= DECL_NAME (functions
);
2769 functions
= lookup_name_nonclass (fnname
);
2771 if (functions
== NULL_TREE
)
2773 if (flags
& LOOKUP_SPECULATIVELY
)
2775 if (flags
& LOOKUP_COMPLAIN
)
2776 error ("only member functions apply");
2778 final_cp
->h
.code
= EVIL_CODE
;
2779 return error_mark_node
;
2782 if (TREE_CODE (functions
) == FUNCTION_DECL
&& ! IDENTIFIER_OPNAME_P (fnname
))
2784 functions
= DECL_MAIN_VARIANT (functions
);
2787 /* We are just curious whether this is a viable alternative or
2789 compute_conversion_costs (functions
, parms
, final_cp
, parmlength
);
2793 return build_function_call_real (functions
, parms
, 1, flags
);
2796 if (TREE_CODE (functions
) == TREE_LIST
2797 && TREE_VALUE (functions
) == NULL_TREE
)
2799 if (flags
& LOOKUP_SPECULATIVELY
)
2802 if (flags
& LOOKUP_COMPLAIN
)
2803 cp_error ("function `%D' declared overloaded, but no instances of that function declared",
2804 TREE_PURPOSE (functions
));
2806 final_cp
->h
.code
= EVIL_CODE
;
2807 return error_mark_node
;
2810 length
= count_functions (functions
);
2813 candidates
= final_cp
;
2817 = (struct candidate
*)alloca ((length
+1) * sizeof (struct candidate
));
2818 bzero ((char *) candidates
, (length
+ 1) * sizeof (struct candidate
));
2823 my_friendly_assert (is_overloaded_fn (functions
), 169);
2825 functions
= get_first_fn (functions
);
2827 /* OUTER is the list of FUNCTION_DECLS, in a TREE_LIST. */
2828 for (outer
= functions
; outer
; outer
= DECL_CHAIN (outer
))
2830 int template_cost
= 0;
2832 if (TREE_CODE (function
) != FUNCTION_DECL
2833 && ! (TREE_CODE (function
) == TEMPLATE_DECL
2834 && ! DECL_TEMPLATE_IS_CLASS (function
)
2835 && TREE_CODE (DECL_TEMPLATE_RESULT (function
)) == FUNCTION_DECL
))
2837 enum tree_code code
= TREE_CODE (function
);
2838 if (code
== TEMPLATE_DECL
)
2839 code
= TREE_CODE (DECL_TEMPLATE_RESULT (function
));
2840 if (code
== CONST_DECL
)
2842 ("enumeral value `%D' conflicts with function of same name",
2844 else if (code
== VAR_DECL
)
2846 if (TREE_STATIC (function
))
2848 ("variable `%D' conflicts with function of same name",
2852 ("constant field `%D' conflicts with function of same name",
2855 else if (code
== TYPE_DECL
)
2858 my_friendly_abort (2);
2859 error ("at this point in file");
2862 if (TREE_CODE (function
) == TEMPLATE_DECL
)
2864 int ntparms
= TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (function
));
2865 tree
*targs
= (tree
*) alloca (sizeof (tree
) * ntparms
);
2868 i
= type_unification (DECL_TEMPLATE_PARMS (function
), targs
,
2869 TYPE_ARG_TYPES (TREE_TYPE (function
)),
2870 parms
, &template_cost
, 0);
2872 function
= instantiate_template (function
, targs
);
2875 if (TREE_CODE (function
) == TEMPLATE_DECL
)
2877 /* Unconverted template -- failed match. */
2878 cp
->function
= function
;
2880 cp
->h
.code
= EVIL_CODE
;
2884 struct candidate
*cp2
;
2886 /* Check that this decl is not the same as a function that's in
2887 the list due to some template instantiation. */
2890 if (cp2
->function
== function
)
2894 if (cp2
->function
== function
)
2897 function
= DECL_MAIN_VARIANT (function
);
2899 /* Can't use alloca here, since result might be
2900 passed to calling function. */
2901 cp
->h_len
= parmlength
;
2902 cp
->harshness
= (struct harshness_code
*)
2903 oballoc ((parmlength
+ 1) * sizeof (struct harshness_code
));
2905 compute_conversion_costs (function
, parms
, cp
, parmlength
);
2907 /* Make sure this is clear as well. */
2908 cp
->h
.int_penalty
+= template_cost
;
2910 if ((cp
[0].h
.code
& EVIL_CODE
) == 0)
2912 cp
[1].h
.code
= EVIL_CODE
;
2918 if (cp
- candidates
)
2920 tree rval
= error_mark_node
;
2923 cp
[0].h
.code
= EVIL_CODE
;
2924 if (cp
- candidates
> 1)
2926 struct candidate
*best_cp
2927 = ideal_candidate (NULL_TREE
, candidates
,
2928 cp
- candidates
, parms
, parmlength
);
2929 if (best_cp
== (struct candidate
*)0)
2931 if (flags
& LOOKUP_COMPLAIN
)
2933 cp_error ("call of overloaded `%D' is ambiguous", fnname
);
2934 print_n_candidates (candidates
, cp
- candidates
);
2936 return error_mark_node
;
2939 rval
= best_cp
->function
;
2944 if (cp
->h
.code
& EVIL_CODE
)
2946 if (flags
& LOOKUP_COMPLAIN
)
2947 error ("type conversion ambiguous");
2950 rval
= cp
->function
;
2956 return buildxxx
? build_function_call_real (rval
, parms
, 0, flags
)
2957 : build_function_call_real (rval
, parms
, 1, flags
);
2960 if (flags
& LOOKUP_SPECULATIVELY
)
2963 if (flags
& LOOKUP_COMPLAIN
)
2964 report_type_mismatch (cp
, parms
, "function",
2965 decl_as_string (cp
->function
, 1));
2967 return error_mark_node
;
2971 build_overload_call (fnname
, parms
, flags
, final_cp
)
2974 struct candidate
*final_cp
;
2976 return build_overload_call_real (fnname
, parms
, flags
, final_cp
, 0);
2980 build_overload_call_maybe (fnname
, parms
, flags
, final_cp
)
2983 struct candidate
*final_cp
;
2985 return build_overload_call_real (fnname
, parms
, flags
, final_cp
, 1);