Commented out gcc1obj -- we don't build the run time library at the
[unix-history] / gnu / usr.bin / cc / cc1plus / cp-call.c
CommitLineData
9bf86ebb
PR
1/* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 1992, 1993 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5This file is part of GNU CC.
6
7GNU CC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU CC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU CC; see the file COPYING. If not, write to
19the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22/* High-level class interface. */
23
24#include "config.h"
25#include "tree.h"
26#include <stdio.h>
27#include "cp-tree.h"
28#include "flags.h"
29
30#include "obstack.h"
31#define obstack_chunk_alloc xmalloc
32#define obstack_chunk_free free
33
34extern void sorry ();
35
36extern int inhibit_warnings;
37extern int flag_assume_nonnull_objects;
38extern tree ctor_label, dtor_label;
39
40/* From cp-typeck.c: */
41extern tree unary_complex_lvalue ();
42
43/* Compute the ease with which a conversion can be performed
44 between an expected and the given type. */
45static int convert_harshness ();
46
47#define EVIL_HARSHNESS(ARG) ((ARG) & 1)
48#define ELLIPSIS_HARSHNESS(ARG) ((ARG) & 2)
49#define USER_HARSHNESS(ARG) ((ARG) & 4)
50#define CONTRAVARIANT_HARSHNESS(ARG) ((ARG) & 8)
51#define BASE_DERIVED_HARSHNESS(ARG) ((ARG) & 16)
52#define INT_TO_BD_HARSHNESS(ARG) (((ARG) << 5) | 16)
53#define INT_FROM_BD_HARSHNESS(ARG) ((ARG) >> 5)
54#define INT_TO_EASY_HARSHNESS(ARG) ((ARG) << 5)
55#define INT_FROM_EASY_HARSHNESS(ARG) ((ARG) >> 5)
56#define ONLY_EASY_HARSHNESS(ARG) (((ARG) & 31) == 0)
57#define CONST_HARSHNESS(ARG) ((ARG) & 2048)
58
59/* Ordering function for overload resolution. */
60int
61rank_for_overload (x, y)
62 struct candidate *x, *y;
63{
64 if (y->evil - x->evil)
65 return y->evil - x->evil;
66 if (CONST_HARSHNESS (y->harshness[0]) ^ CONST_HARSHNESS (x->harshness[0]))
67 return y->harshness[0] - x->harshness[0];
68 if (y->ellipsis - x->ellipsis)
69 return y->ellipsis - x->ellipsis;
70 if (y->user - x->user)
71 return y->user - x->user;
72 if (y->b_or_d - x->b_or_d)
73 return y->b_or_d - x->b_or_d;
74 return y->easy - x->easy;
75}
76
77/* TYPE is the type we wish to convert to. PARM is the parameter
78 we have to work with. We use a somewhat arbitrary cost function
79 to measure this conversion. */
80static int
81convert_harshness (type, parmtype, parm)
82 register tree type, parmtype;
83 tree parm;
84{
85 register enum tree_code codel = TREE_CODE (type);
86 register enum tree_code coder = TREE_CODE (parmtype);
87
88#ifdef GATHER_STATISTICS
89 n_convert_harshness++;
90#endif
91
92 if (TYPE_MAIN_VARIANT (parmtype) == TYPE_MAIN_VARIANT (type))
93 return 0;
94
95 if (coder == ERROR_MARK)
96 return 1;
97
98 if (codel == POINTER_TYPE
99 && (coder == METHOD_TYPE || coder == FUNCTION_TYPE))
100 {
101 tree p1, p2;
102 int harshness, new_harshness;
103
104 /* Get to the METHOD_TYPE or FUNCTION_TYPE that this might be. */
105 type = TREE_TYPE (type);
106
107 if (coder != TREE_CODE (type))
108 return 1;
109
110 harshness = 0;
111
112 /* We allow the default conversion between function type
113 and pointer-to-function type for free. */
114 if (type == parmtype)
115 return 0;
116
117 /* Compare return types. */
118 p1 = TREE_TYPE (type);
119 p2 = TREE_TYPE (parmtype);
120 new_harshness = convert_harshness (p1, p2, NULL_TREE);
121 if (new_harshness & 1)
122 return 1;
123
124 if (BASE_DERIVED_HARSHNESS (new_harshness))
125 {
126 tree binfo;
127
128 /* This only works for pointers. */
129 if (TREE_CODE (p1) != POINTER_TYPE
130 && TREE_CODE (p1) != REFERENCE_TYPE)
131 return 1;
132
133 p1 = TREE_TYPE (p1);
134 p2 = TREE_TYPE (p2);
135 if (CONTRAVARIANT_HARSHNESS (new_harshness))
136 binfo = get_binfo (p2, p1, 0);
137 else
138 binfo = get_binfo (p1, p2, 0);
139
140 if (! BINFO_OFFSET_ZEROP (binfo))
141 {
142 static int explained = 0;
143 if (CONTRAVARIANT_HARSHNESS (new_harshness))
144 message_2_types (sorry, "cannot cast `%d' to `%d' at function call site", p2, p1);
145 else
146 message_2_types (sorry, "cannot cast `%d' to `%d' at function call site", p1, p2);
147
148 if (! explained++)
149 sorry ("(because pointer values change during conversion)");
150 return 1;
151 }
152 }
153
154 harshness |= new_harshness;
155
156 p1 = TYPE_ARG_TYPES (type);
157 p2 = TYPE_ARG_TYPES (parmtype);
158 while (p1 && TREE_VALUE (p1) != void_type_node
159 && p2 && TREE_VALUE (p2) != void_type_node)
160 {
161 new_harshness = convert_harshness (TREE_VALUE (p1), TREE_VALUE (p2), NULL_TREE);
162 if (EVIL_HARSHNESS (new_harshness))
163 return 1;
164
165 if (BASE_DERIVED_HARSHNESS (new_harshness))
166 {
167 /* This only works for pointers and references. */
168 if (TREE_CODE (TREE_VALUE (p1)) != POINTER_TYPE
169 && TREE_CODE (TREE_VALUE (p1)) != REFERENCE_TYPE)
170 return 1;
171 new_harshness ^= CONTRAVARIANT_HARSHNESS (new_harshness);
172 harshness |= new_harshness;
173 }
174 /* This trick allows use to accumulate easy type
175 conversions without messing up the bits that encode
176 info about more involved things. */
177 else if (ONLY_EASY_HARSHNESS (new_harshness))
178 harshness += new_harshness;
179 else
180 harshness |= new_harshness;
181 p1 = TREE_CHAIN (p1);
182 p2 = TREE_CHAIN (p2);
183 }
184 if (p1 == p2)
185 return harshness;
186 if (p2)
187 return p1 ? 1 : (harshness | ELLIPSIS_HARSHNESS (-1));
188 if (p1)
189 return harshness | (TREE_PURPOSE (p1) == NULL_TREE);
190 }
191 else if (codel == POINTER_TYPE && coder == OFFSET_TYPE)
192 {
193 /* XXX: Note this is set a few times, but it's never actually
194 used! (bpk) */
195 int harshness;
196
197 /* Get to the OFFSET_TYPE that this might be. */
198 type = TREE_TYPE (type);
199
200 if (coder != TREE_CODE (type))
201 return 1;
202
203 harshness = 0;
204
205 if (TYPE_OFFSET_BASETYPE (type) == TYPE_OFFSET_BASETYPE (parmtype))
206 harshness = 0;
207 else if (UNIQUELY_DERIVED_FROM_P (TYPE_OFFSET_BASETYPE (type),
208 TYPE_OFFSET_BASETYPE (parmtype)))
209 harshness = INT_TO_BD_HARSHNESS (1);
210 else if (UNIQUELY_DERIVED_FROM_P (TYPE_OFFSET_BASETYPE (parmtype),
211 TYPE_OFFSET_BASETYPE (type)))
212 harshness = CONTRAVARIANT_HARSHNESS (-1);
213 else
214 return 1;
215 /* Now test the OFFSET_TYPE's target compatibility. */
216 type = TREE_TYPE (type);
217 parmtype = TREE_TYPE (parmtype);
218 }
219
220 if (coder == UNKNOWN_TYPE)
221 {
222 if (codel == FUNCTION_TYPE
223 || codel == METHOD_TYPE
224 || (codel == POINTER_TYPE
225 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
226 || TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)))
227 return 0;
228 return 1;
229 }
230
231 if (coder == VOID_TYPE)
232 return 1;
233
234 if (codel == ENUMERAL_TYPE || codel == INTEGER_TYPE)
235 {
236 /* Control equivalence of ints an enums. */
237
238 if (codel == ENUMERAL_TYPE
239 && flag_int_enum_equivalence == 0)
240 {
241 /* Enums can be converted to ints, but not vice-versa. */
242 if (coder != ENUMERAL_TYPE
243 || TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (parmtype))
244 return 1;
245 }
246
247 /* else enums and ints (almost) freely interconvert. */
248
249 if (coder == INTEGER_TYPE || coder == ENUMERAL_TYPE)
250 {
251 int easy = TREE_UNSIGNED (type) ^ TREE_UNSIGNED (parmtype);
252 if (codel != coder)
253 easy += 1;
254 if (TYPE_MODE (type) != TYPE_MODE (parmtype))
255 easy += 2;
256 return INT_TO_EASY_HARSHNESS (easy);
257 }
258 else if (coder == REAL_TYPE)
259 return INT_TO_EASY_HARSHNESS (4);
260 }
261
262 if (codel == REAL_TYPE)
263 if (coder == REAL_TYPE)
264 /* Shun converting between float and double if a choice exists. */
265 {
266 if (TYPE_MODE (type) != TYPE_MODE (parmtype))
267 return INT_TO_EASY_HARSHNESS (2);
268 return 0;
269 }
270 else if (coder == INTEGER_TYPE || coder == ENUMERAL_TYPE)
271 return INT_TO_EASY_HARSHNESS (4);
272
273 /* convert arrays which have not previously been converted. */
274 if (codel == ARRAY_TYPE)
275 codel = POINTER_TYPE;
276 if (coder == ARRAY_TYPE)
277 coder = POINTER_TYPE;
278
279 /* Conversions among pointers */
280 if (codel == POINTER_TYPE && coder == POINTER_TYPE)
281 {
282 register tree ttl = TYPE_MAIN_VARIANT (TREE_TYPE (type));
283 register tree ttr = TYPE_MAIN_VARIANT (TREE_TYPE (parmtype));
284 int penalty = 4 * (ttl != ttr);
285 /* Anything converts to void *. void * converts to anything.
286 Since these may be `const void *' (etc.) use VOID_TYPE
287 instead of void_type_node.
288 Otherwise, the targets must be the same,
289 except that we do allow (at some cost) conversion
290 between signed and unsinged pointer types. */
291
292 if ((TREE_CODE (ttl) == METHOD_TYPE
293 || TREE_CODE (ttl) == FUNCTION_TYPE)
294 && TREE_CODE (ttl) == TREE_CODE (ttr))
295 {
296 if (comptypes (ttl, ttr, -1))
297 return INT_TO_EASY_HARSHNESS (penalty);
298 return 1;
299 }
300
301 if (!(TREE_CODE (ttl) == VOID_TYPE
302 || TREE_CODE (ttr) == VOID_TYPE
303 || (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (ttr)
304 && (ttl = unsigned_type (ttl),
305 ttr = unsigned_type (ttr),
306 penalty = 10, 0))
307 || (comp_target_types (ttl, ttr, 0))))
308 return 1;
309
310 if (penalty == 10)
311 return INT_TO_EASY_HARSHNESS (10);
312 if (ttr == ttl)
313 return INT_TO_BD_HARSHNESS (0);
314
315 if (TREE_CODE (ttl) == RECORD_TYPE && TREE_CODE (ttr) == RECORD_TYPE)
316 {
317 int b_or_d = get_base_distance (ttl, ttr, 0, 0);
318 if (b_or_d < 0)
319 {
320 b_or_d = get_base_distance (ttr, ttl, 0, 0);
321 if (b_or_d < 0)
322 return 1;
323 return CONTRAVARIANT_HARSHNESS (-1);
324 }
325 return INT_TO_BD_HARSHNESS (b_or_d);
326 }
327 /* If converting from a `class*' to a `void*', make it
328 less favorable than any inheritance relationship. */
329 if (TREE_CODE (ttl) == VOID_TYPE && IS_AGGR_TYPE (ttr))
330 return INT_TO_BD_HARSHNESS (CLASSTYPE_MAX_DEPTH (ttr)+1);
331 return INT_TO_EASY_HARSHNESS (penalty);
332 }
333
334 if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
335 {
336 /* This is not a bad match, but don't let it beat
337 integer-enum combinations. */
338 if (parm && integer_zerop (parm))
339 return INT_TO_EASY_HARSHNESS (4);
340 }
341
342 /* C++: one of the types must be a reference type. */
343 {
344 tree ttl, ttr;
345 register tree intype = TYPE_MAIN_VARIANT (parmtype);
346 register enum tree_code form = TREE_CODE (intype);
347 int penalty;
348
349 if (codel == REFERENCE_TYPE || coder == REFERENCE_TYPE)
350 {
351 ttl = TYPE_MAIN_VARIANT (type);
352
353 if (codel == REFERENCE_TYPE)
354 {
355 ttl = TREE_TYPE (ttl);
356
357 /* When passing a non-const argument into a const reference,
358 dig it a little, so a non-const reference is preferred over
359 this one. (mrs) */
360 if (parm && TREE_READONLY (ttl) && ! TREE_READONLY (parm))
361 penalty = 2;
362 else
363 penalty = 0;
364
365 ttl = TYPE_MAIN_VARIANT (ttl);
366
367 if (form == OFFSET_TYPE)
368 {
369 intype = TREE_TYPE (intype);
370 form = TREE_CODE (intype);
371 }
372
373 if (form == REFERENCE_TYPE)
374 {
375 intype = TYPE_MAIN_VARIANT (TREE_TYPE (intype));
376
377 if (ttl == intype)
378 return 0;
379 penalty = 2;
380 }
381 else
382 {
383 /* Can reference be built up? */
384 if (ttl == intype && penalty == 0) {
385 /* Because the READONLY bits and VOLATILE bits are not
386 always in the type, this extra check is necessary. The
387 problem should be fixed someplace else, and this extra
388 code removed.
389
390 Also, if type if a reference, the readonly bits could
391 either be in the outer type (with reference) or on the
392 inner type (the thing being referenced). (mrs) */
393 if (parm
394 && ((TREE_READONLY (parm)
395 && ! (TYPE_READONLY (type)
396 || (TREE_CODE (type) == REFERENCE_TYPE
397 && TYPE_READONLY (TREE_TYPE (type)))))
398 || (TREE_SIDE_EFFECTS (parm)
399 && ! (TYPE_VOLATILE (type)
400 || (TREE_CODE (type) == REFERENCE_TYPE
401 && TYPE_VOLATILE (TREE_TYPE (type)))))))
402
403 penalty = 2;
404 else
405 return 0;
406 }
407 else
408 penalty = 2;
409 }
410 }
411 else if (form == REFERENCE_TYPE)
412 {
413 if (parm)
414 {
415 tree tmp = convert_from_reference (parm);
416 intype = TYPE_MAIN_VARIANT (TREE_TYPE (tmp));
417 }
418 else
419 {
420 intype = parmtype;
421 do
422 {
423 intype = TREE_TYPE (intype);
424 }
425 while (TREE_CODE (intype) == REFERENCE_TYPE);
426 intype = TYPE_MAIN_VARIANT (intype);
427 }
428
429 if (ttl == intype)
430 return 0;
431 else
432 penalty = 2;
433 }
434
435 if (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (intype))
436 {
437 ttl = unsigned_type (ttl);
438 intype = unsigned_type (intype);
439 penalty += 2;
440 }
441
442 ttr = intype;
443
444 /* If the initializer is not an lvalue, then it does not
445 matter if we make life easier for the programmer
446 by creating a temporary variable with which to
447 hold the result. */
448 if (parm && (coder == INTEGER_TYPE
449 || coder == ENUMERAL_TYPE
450 || coder == REAL_TYPE)
451 && ! lvalue_p (parm))
452 return (convert_harshness (ttl, ttr, NULL_TREE)
453 | INT_TO_EASY_HARSHNESS (penalty));
454
455 if (ttl == ttr)
456 {
457 if (penalty)
458 return INT_TO_EASY_HARSHNESS (penalty);
459 return INT_TO_BD_HARSHNESS (0);
460 }
461
462 /* Pointers to voids always convert for pointers. But
463 make them less natural than more specific matches. */
464 if (TREE_CODE (ttl) == POINTER_TYPE && TREE_CODE (ttr) == POINTER_TYPE)
465 if (TREE_TYPE (ttl) == void_type_node
466 || TREE_TYPE (ttr) == void_type_node)
467 return INT_TO_EASY_HARSHNESS (penalty+1);
468
469 if (parm && codel != REFERENCE_TYPE)
470 return (convert_harshness (ttl, ttr, NULL_TREE)
471 | INT_TO_EASY_HARSHNESS (penalty));
472
473 /* Here it does matter. If this conversion is from
474 derived to base, allow it. Otherwise, types must
475 be compatible in the strong sense. */
476 if (TREE_CODE (ttl) == RECORD_TYPE && TREE_CODE (ttr) == RECORD_TYPE)
477 {
478 int b_or_d = get_base_distance (ttl, ttr, 0, 0);
479 if (b_or_d < 0)
480 {
481 b_or_d = get_base_distance (ttr, ttl, 0, 0);
482 if (b_or_d < 0)
483 return 1;
484 return CONTRAVARIANT_HARSHNESS (-1);
485 }
486 /* Say that this conversion is relatively painless.
487 If it turns out that there is a user-defined X(X&)
488 constructor, then that will be invoked, but that's
489 preferable to dealing with other user-defined conversions
490 that may produce surprising results. */
491 return INT_TO_BD_HARSHNESS (b_or_d);
492 }
493
494 if (comp_target_types (ttl, intype, 1))
495 return INT_TO_EASY_HARSHNESS (penalty);
496 }
497 }
498 if (codel == RECORD_TYPE && coder == RECORD_TYPE)
499 {
500 int b_or_d = get_base_distance (type, parmtype, 0, 0);
501 if (b_or_d < 0)
502 {
503 b_or_d = get_base_distance (parmtype, type, 0, 0);
504 if (b_or_d < 0)
505 return 1;
506 return CONTRAVARIANT_HARSHNESS (-1);
507 }
508 return INT_TO_BD_HARSHNESS (b_or_d);
509 }
510 return 1;
511}
512
513/* Algorithm: Start out with no strikes against. For each argument
514 which requires a (subjective) hard conversion (such as between
515 floating point and integer), issue a strike. If there are the same
516 number of formal and actual parameters in the list, there will be at
517 least on strike, otherwise an exact match would have been found. If
518 there are not the same number of arguments in the type lists, we are
519 not dead yet: a `...' means that we can have more parms then were
520 declared, and if we wind up in the default argument section of the
521 list those can be used as well. If an exact match could be found for
522 one of those cases, return it immediately. Otherwise, rank the fields
523 so that fields with fewer strikes are tried first.
524
525 Conversions between builtin and user-defined types are allowed, but
526 no function involving such a conversion is preferred to one which
527 does not require such a conversion. Furthermore, such conversions
528 must be unique. */
529
530void
531compute_conversion_costs (function, tta_in, cp, arglen)
532 tree function;
533 tree tta_in;
534 struct candidate *cp;
535 int arglen;
536{
537 tree ttf_in = TYPE_ARG_TYPES (TREE_TYPE (function));
538 tree ttf = ttf_in;
539 tree tta = tta_in;
540
541 /* Start out with no strikes against. */
542 int evil_strikes = 0;
543 int ellipsis_strikes = 0;
544 int user_strikes = 0;
545 int b_or_d_strikes = 0;
546 int easy_strikes = 0;
547
548 int strike_index = 0, win, lose;
549
550#ifdef GATHER_STATISTICS
551 n_compute_conversion_costs++;
552#endif
553
554 cp->function = function;
555 cp->arg = tta ? TREE_VALUE (tta) : NULL_TREE;
556 cp->u.bad_arg = 0; /* optimistic! */
557
558 bzero (cp->harshness, (arglen+1) * sizeof (short));
559
560 while (ttf && tta)
561 {
562 int harshness;
563
564 if (ttf == void_list_node)
565 break;
566
567 if (type_unknown_p (TREE_VALUE (tta)))
568 {
569 /* Must perform some instantiation here. */
570 tree rhs = TREE_VALUE (tta);
571 tree lhstype = TREE_VALUE (ttf);
572
573 /* Keep quiet about possible contravariance violations. */
574 int old_inhibit_warnings = inhibit_warnings;
575 inhibit_warnings = 1;
576
577 /* @@ This is to undo what `grokdeclarator' does to
578 parameter types. It really should go through
579 something more general. */
580
581 TREE_TYPE (tta) = unknown_type_node;
582 rhs = instantiate_type (lhstype, rhs, 0);
583 inhibit_warnings = old_inhibit_warnings;
584
585 if (TREE_CODE (rhs) == ERROR_MARK)
586 harshness = 1;
587 else
588 {
589 harshness = convert_harshness (lhstype, TREE_TYPE (rhs), rhs);
590 /* harshness |= 2; */
591 }
592 }
593 else
594 harshness = convert_harshness (TREE_VALUE (ttf), TREE_TYPE (TREE_VALUE (tta)), TREE_VALUE (tta));
595
596 cp->harshness[strike_index] = harshness;
597 if (EVIL_HARSHNESS (harshness)
598 || CONTRAVARIANT_HARSHNESS (harshness))
599 {
600 cp->u.bad_arg = strike_index;
601 evil_strikes = 1;
602 }
603 else if (ELLIPSIS_HARSHNESS (harshness))
604 {
605 ellipsis_strikes += 1;
606 }
607#if 0
608 /* This is never set by `convert_harshness'. */
609 else if (USER_HARSHNESS (harshness))
610 {
611 user_strikes += 1;
612 }
613#endif
614 else if (BASE_DERIVED_HARSHNESS (harshness))
615 {
616 b_or_d_strikes += INT_FROM_BD_HARSHNESS (harshness);
617 }
618 else
619 easy_strikes += INT_FROM_EASY_HARSHNESS (harshness);
620 ttf = TREE_CHAIN (ttf);
621 tta = TREE_CHAIN (tta);
622 strike_index += 1;
623 }
624
625 if (tta)
626 {
627 /* ran out of formals, and parmlist is fixed size. */
628 if (ttf /* == void_type_node */)
629 {
630 cp->evil = 1;
631 cp->u.bad_arg = -1;
632 return;
633 }
634 }
635 else if (ttf && ttf != void_list_node)
636 {
637 /* ran out of actuals, and no defaults. */
638 if (TREE_PURPOSE (ttf) == NULL_TREE)
639 {
640 cp->evil = 1;
641 cp->u.bad_arg = -2;
642 return;
643 }
644 /* Store index of first default. */
645 cp->harshness[arglen] = strike_index+1;
646 }
647 else cp->harshness[arglen] = 0;
648
649 /* Argument list lengths work out, so don't need to check them again. */
650 if (evil_strikes)
651 {
652 /* We do not check for derived->base conversions here, since in
653 no case would they give evil strike counts, unless such conversions
654 are somehow ambiguous. */
655
656 /* See if any user-defined conversions apply.
657 But make sure that we do not loop. */
658 static int dont_convert_types = 0;
659
660 if (dont_convert_types)
661 {
662 cp->evil = 1;
663 return;
664 }
665
666 win = 0; /* Only get one chance to win. */
667 ttf = TYPE_ARG_TYPES (TREE_TYPE (function));
668 tta = tta_in;
669 strike_index = 0;
670 evil_strikes = 0;
671
672 while (ttf && tta)
673 {
674 if (ttf == void_list_node)
675 break;
676
677 lose = cp->harshness[strike_index];
678 if (EVIL_HARSHNESS (lose)
679 || CONTRAVARIANT_HARSHNESS (lose))
680 {
681 tree actual_type = TREE_TYPE (TREE_VALUE (tta));
682 tree formal_type = TREE_VALUE (ttf);
683
684 dont_convert_types = 1;
685
686 if (TREE_CODE (formal_type) == REFERENCE_TYPE)
687 formal_type = TREE_TYPE (formal_type);
688 if (TREE_CODE (actual_type) == REFERENCE_TYPE)
689 actual_type = TREE_TYPE (actual_type);
690
691 if (formal_type != error_mark_node
692 && actual_type != error_mark_node)
693 {
694 formal_type = TYPE_MAIN_VARIANT (formal_type);
695 actual_type = TYPE_MAIN_VARIANT (actual_type);
696
697 if (TYPE_HAS_CONSTRUCTOR (formal_type))
698 {
699 /* If it has a constructor for this type, try to use it. */
700 if (convert_to_aggr (formal_type, TREE_VALUE (tta), 0, 1)
701 != error_mark_node)
702 {
703 /* @@ There is no way to save this result yet.
704 @@ So success is NULL_TREE for now. */
705 win++;
706 }
707 }
708 if (TYPE_LANG_SPECIFIC (actual_type) && TYPE_HAS_CONVERSION (actual_type))
709 {
710 if (TREE_CODE (formal_type) == INTEGER_TYPE
711 && TYPE_HAS_INT_CONVERSION (actual_type))
712 win++;
713 else if (TREE_CODE (formal_type) == REAL_TYPE
714 && TYPE_HAS_REAL_CONVERSION (actual_type))
715 win++;
716 else
717 {
718 tree conv = build_type_conversion (CALL_EXPR, TREE_VALUE (ttf), TREE_VALUE (tta), 0);
719 if (conv)
720 {
721 if (conv == error_mark_node)
722 win += 2;
723 else
724 win++;
725 }
726 else if (TREE_CODE (TREE_VALUE (ttf)) == REFERENCE_TYPE)
727 {
728 conv = build_type_conversion (CALL_EXPR, formal_type, TREE_VALUE (tta), 0);
729 if (conv)
730 {
731 if (conv == error_mark_node)
732 win += 2;
733 else
734 win++;
735 }
736 }
737 }
738 }
739 }
740 dont_convert_types = 0;
741
742 if (win == 1)
743 {
744 user_strikes += 1;
745 cp->harshness[strike_index] = USER_HARSHNESS (-1);
746 win = 0;
747 }
748 else
749 {
750 if (cp->u.bad_arg > strike_index)
751 cp->u.bad_arg = strike_index;
752
753 evil_strikes = win ? 2 : 1;
754 break;
755 }
756 }
757
758 ttf = TREE_CHAIN (ttf);
759 tta = TREE_CHAIN (tta);
760 strike_index += 1;
761 }
762 }
763
764 /* Const member functions get a small penalty because defaulting
765 to const is less useful than defaulting to non-const. */
766 /* This is bogus, it does not correspond to anything in the ARM.
767 This code will be fixed when this entire section is rewritten
768 to conform to the ARM. (mrs) */
769 if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
770 {
771 if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (ttf_in))))
772 {
773 cp->harshness[0] += INT_TO_EASY_HARSHNESS (1);
774 ++easy_strikes;
775 }
776 else
777 {
778 /* Calling a non-const member function from a const member function
779 is probably invalid, but for now we let it only draw a warning.
780 We indicate that such a mismatch has occurred by setting the
781 harshness to a maximum value. */
782 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tta_in))) == POINTER_TYPE
783 && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (TREE_VALUE (tta_in))))))
784 cp->harshness[0] |= CONST_HARSHNESS (-1);
785 }
786 }
787
788 cp->evil = evil_strikes;
789 cp->ellipsis = ellipsis_strikes;
790 cp->user = user_strikes;
791 cp->b_or_d = b_or_d_strikes;
792 cp->easy = easy_strikes;
793}
794
795/* When one of several possible overloaded functions and/or methods
796 can be called, choose the best candidate for overloading.
797
798 BASETYPE is the context from which we start method resolution
799 or NULL if we are comparing overloaded functions.
800 CANDIDATES is the array of candidates we have to choose from.
801 N_CANDIDATES is the length of CANDIDATES.
802 PARMS is a TREE_LIST of parameters to the function we'll ultimately
803 choose. It is modified in place when resolving methods. It is not
804 modified in place when resolving overloaded functions.
805 LEN is the length of the parameter list. */
806
807static struct candidate *
808ideal_candidate (basetype, candidates, n_candidates, parms, len)
809 tree basetype;
810 struct candidate *candidates;
811 int n_candidates;
812 tree parms;
813 int len;
814{
815 struct candidate *cp = candidates + n_candidates;
816 int index, i;
817 tree ttf;
818
819 qsort (candidates, /* char *base */
820 n_candidates, /* int nel */
821 sizeof (struct candidate), /* int width */
822 rank_for_overload); /* int (*compar)() */
823
824 /* If the best candidate requires user-defined conversions,
825 and its user-defined conversions are a strict subset
826 of all other candidates requiring user-defined conversions,
827 then it is, in fact, the best. */
828 for (i = -1; cp + i != candidates; i--)
829 if (cp[i].user == 0)
830 break;
831
832 if (i < -1)
833 {
834 tree ttf0;
835
836 /* Check that every other candidate requires those conversions
837 as a strict subset of their conversions. */
838 if (cp[i].user == cp[-1].user)
839 goto non_subset;
840
841 /* Look at subset relationship more closely. */
842 while (i != -1)
843 {
844 for (ttf = TYPE_ARG_TYPES (TREE_TYPE (cp[i].function)),
845 ttf0 = TYPE_ARG_TYPES (TREE_TYPE (cp[-1].function)),
846 index = 0;
847 index < len;
848 ttf = TREE_CHAIN (ttf), ttf0 = TREE_CHAIN (ttf0), index++)
849 if (USER_HARSHNESS (cp[i].harshness[index]))
850 {
851 /* If our "best" candidate also needs a conversion,
852 it must be the same one. */
853 if (USER_HARSHNESS (cp[-1].harshness[index])
854 && TREE_VALUE (ttf) != TREE_VALUE (ttf0))
855 goto non_subset;
856 }
857 i++;
858 }
859 /* The best was the best. */
860 return cp - 1;
861 non_subset:
862 /* Use other rules for determining "bestness". */
863 ;
864 }
865
866 /* If the best two candidates we find require user-defined
867 conversions, we may need to report and error message. */
868 if (cp[-1].user && cp[-2].user
869 && (cp[-1].b_or_d || cp[-2].b_or_d == 0))
870 {
871 /* If the best two methods found involved user-defined
872 type conversions, then we must see whether one
873 of them is exactly what we wanted. If not, then
874 we have an ambiguity. */
875 int best = 0;
876 tree tta = parms;
877 tree f1;
878#if 0
879 /* for LUCID */
880 tree p1;
881#endif
882
883 /* Stash all of our parameters in safe places
884 so that we can perform type conversions in place. */
885 while (tta)
886 {
887 TREE_PURPOSE (tta) = TREE_VALUE (tta);
888 tta = TREE_CHAIN (tta);
889 }
890
891 i = 0;
892 do
893 {
894 int exact_conversions = 0;
895
896 i -= 1;
897 tta = parms;
898 if (DECL_STATIC_FUNCTION_P (cp[i].function))
899 tta = TREE_CHAIN (tta);
900 /* special note, we don't go through len parameters, because we
901 may only need len-1 parameters because of a call to a static
902 member. */
903 for (ttf = TYPE_ARG_TYPES (TREE_TYPE (cp[i].function)), index = 0;
904 tta;
905 tta = TREE_CHAIN (tta), ttf = TREE_CHAIN (ttf), index++)
906 {
907 if (USER_HARSHNESS (cp[i].harshness[index]))
908 {
909 tree this_parm = build_type_conversion (CALL_EXPR, TREE_VALUE (ttf), TREE_PURPOSE (tta), 2);
910 if (basetype != NULL_TREE)
911 TREE_VALUE (tta) = this_parm;
912 if (this_parm)
913 {
914 if (TREE_CODE (this_parm) != CONVERT_EXPR
915 && (TREE_CODE (this_parm) != NOP_EXPR
916 || comp_target_types (TREE_TYPE (this_parm),
917 TREE_TYPE (TREE_OPERAND (this_parm, 0)), 1)))
918 exact_conversions += 1;
919 }
920 else if (PROMOTES_TO_AGGR_TYPE (TREE_VALUE (ttf), REFERENCE_TYPE))
921 {
922 /* To get here we had to have succeeded via
923 a constructor. */
924 TREE_VALUE (tta) = TREE_PURPOSE (tta);
925 exact_conversions += 1;
926 }
927 }
928 }
929 if (exact_conversions == cp[i].user)
930 {
931 if (best == 0)
932 {
933 best = i;
934 f1 = cp[best].function;
935#if 0
936 /* For LUCID */
937 p1 = TYPE_ARG_TYPES (TREE_TYPE (f1));
938#endif
939 }
940 else
941 {
942 /* Don't complain if next best is from base class. */
943 tree f2 = cp[i].function;
944
945 if (TREE_CODE (TREE_TYPE (f1)) == METHOD_TYPE
946 && TREE_CODE (TREE_TYPE (f2)) == METHOD_TYPE
947 && BASE_DERIVED_HARSHNESS (cp[i].harshness[0])
948 && cp[best].harshness[0] < cp[i].harshness[0])
949 {
950#if 0
951 tree p2 = TYPE_ARG_TYPES (TREE_TYPE (f2));
952 /* For LUCID. */
953 if (! compparms (TREE_CHAIN (p1), TREE_CHAIN (p2), 1))
954 goto ret0;
955 else
956#endif
957 continue;
958 }
959 else
960 {
961 /* Ensure that there's nothing ambiguous about these
962 two fns. */
963 int identical = 1;
964 for (index = 0; index < len; index++)
965 {
966 /* Type conversions must be piecewise equivalent. */
967 if (USER_HARSHNESS (cp[best].harshness[index])
968 != USER_HARSHNESS (cp[i].harshness[index]))
969 goto ret0;
970 /* If there's anything we like better about the
971 other function, consider it ambiguous. */
972 if (cp[i].harshness[index] < cp[best].harshness[index])
973 goto ret0;
974 /* If any single one it diffent, then the whole is
975 not identical. */
976 if (cp[i].harshness[index] != cp[best].harshness[index])
977 identical = 0;
978 }
979
980 /* If we can't tell the difference between the two, it
981 is ambiguous. */
982 if (identical)
983 goto ret0;
984
985 /* If we made it to here, it means we're satisfied that
986 BEST is still best. */
987 continue;
988 }
989 }
990 }
991 } while (cp + i != candidates);
992
993 if (best)
994 {
995 int exact_conversions = cp[best].user;
996 tta = parms;
997 if (DECL_STATIC_FUNCTION_P (cp[best].function))
998 tta = TREE_CHAIN (parms);
999 for (ttf = TYPE_ARG_TYPES (TREE_TYPE (cp[best].function)), index = 0;
1000 exact_conversions > 0;
1001 tta = TREE_CHAIN (tta), ttf = TREE_CHAIN (ttf), index++)
1002 {
1003 if (USER_HARSHNESS (cp[best].harshness[index]))
1004 {
1005 /* We must now fill in the slot we left behind.
1006 @@ This could be optimized to use the value previously
1007 @@ computed by build_type_conversion in some cases. */
1008 if (basetype != NULL_TREE)
1009 TREE_VALUE (tta) = convert (TREE_VALUE (ttf), TREE_PURPOSE (tta));
1010 exact_conversions -= 1;
1011 }
1012 else TREE_VALUE (tta) = TREE_PURPOSE (tta);
1013 }
1014 return cp + best;
1015 }
1016 goto ret0;
1017 }
1018 /* If the best two candidates we find both use default parameters,
1019 we may need to report and error. Don't need to worry if next-best
1020 candidate is forced to use user-defined conversion when best is not. */
1021 if (cp[-2].user == 0
1022 && cp[-1].harshness[len] != 0 && cp[-2].harshness[len] != 0)
1023 {
1024 tree tt1 = TYPE_ARG_TYPES (TREE_TYPE (cp[-1].function));
1025 tree tt2 = TYPE_ARG_TYPES (TREE_TYPE (cp[-2].function));
1026 unsigned i = cp[-1].harshness[len];
1027
1028 if (cp[-2].harshness[len] < i)
1029 i = cp[-2].harshness[len];
1030 while (--i > 0)
1031 {
1032 if (TYPE_MAIN_VARIANT (TREE_VALUE (tt1))
1033 != TYPE_MAIN_VARIANT (TREE_VALUE (tt2)))
1034 /* These lists are not identical, so we can choose our best candidate. */
1035 return cp - 1;
1036 tt1 = TREE_CHAIN (tt1);
1037 tt2 = TREE_CHAIN (tt2);
1038 }
1039 /* To get here, both lists had the same parameters up to the defaults
1040 which were used. This is an ambiguous request. */
1041 goto ret0;
1042 }
1043
1044 /* Otherwise, return our best candidate. Note that if we get candidates
1045 from independent base classes, we have an ambiguity, even if one
1046 argument list look a little better than another one. */
1047 if (cp[-1].b_or_d && basetype && TYPE_USES_MULTIPLE_INHERITANCE (basetype))
1048 {
1049 int i = n_candidates - 1, best = i;
1050 tree base1 = NULL_TREE;
1051
1052 if (TREE_CODE (TREE_TYPE (candidates[i].function)) == FUNCTION_TYPE)
1053 return cp - 1;
1054
1055 for (; i >= 0 && candidates[i].user == 0 && candidates[i].evil == 0; i--)
1056 {
1057 if (TREE_CODE (TREE_TYPE (candidates[i].function)) == METHOD_TYPE)
1058 {
1059 tree newbase = DECL_CLASS_CONTEXT (candidates[i].function);
1060
1061 if (base1 != NULL_TREE)
1062 {
1063 /* newbase could be a base or a parent of base1 */
1064 if (newbase != base1 && ! UNIQUELY_DERIVED_FROM_P (newbase, base1)
1065 && ! UNIQUELY_DERIVED_FROM_P (base1, newbase))
1066 {
1067 error_with_aggr_type (basetype, "ambiguous request for function from distinct base classes of type `%s'");
1068 error (" first candidate is `%s'",
1069 fndecl_as_string (0, candidates[best].function, 1));
1070 error (" second candidate is `%s'",
1071 fndecl_as_string (0, candidates[i].function, 1));
1072 cp[-1].evil = 1;
1073 return cp - 1;
1074 }
1075 }
1076 else
1077 {
1078 best = i;
1079 base1 = newbase;
1080 }
1081 }
1082 else return cp - 1;
1083 }
1084 }
1085
1086 /* Don't accept a candidate as being ideal if it's indistinguishable
1087 from another candidate. */
1088 if (rank_for_overload (cp-1, cp-2) == 0)
1089 {
1090 /* If the types are distinguishably different (like
1091 `long' vs. `unsigned long'), that's ok. But if they are arbitrarily
1092 different, such as `int (*)(void)' vs. `void (*)(int)',
1093 that's not ok. */
1094 tree p1 = TYPE_ARG_TYPES (TREE_TYPE (cp[-1].function));
1095 tree p2 = TYPE_ARG_TYPES (TREE_TYPE (cp[-2].function));
1096 while (p1 && p2)
1097 {
1098 if (TREE_CODE (TREE_VALUE (p1)) == POINTER_TYPE
1099 && TREE_CODE (TREE_TYPE (TREE_VALUE (p1))) == FUNCTION_TYPE
1100 && TREE_VALUE (p1) != TREE_VALUE (p2))
1101 return 0;
1102 p1 = TREE_CHAIN (p1);
1103 p2 = TREE_CHAIN (p2);
1104 }
1105 if (p1 || p2)
1106 return 0;
1107 }
1108
1109 return cp - 1;
1110
1111 ret0:
1112 /* In the case where there is no ideal candidate, restore
1113 TREE_VALUE slots of PARMS from TREE_PURPOSE slots. */
1114 while (parms)
1115 {
1116 TREE_VALUE (parms) = TREE_PURPOSE (parms);
1117 parms = TREE_CHAIN (parms);
1118 }
1119 return 0;
1120}
1121
1122/* Assume that if the class referred to is not in the
1123 current class hierarchy, that it may be remote.
1124 PARENT is assumed to be of aggregate type here. */
1125static int
1126may_be_remote (parent)
1127 tree parent;
1128{
1129 if (TYPE_OVERLOADS_METHOD_CALL_EXPR (parent) == 0)
1130 return 0;
1131
1132 if (current_class_type == NULL_TREE)
1133 return 0;
1134 if (parent == current_class_type)
1135 return 0;
1136
1137 if (UNIQUELY_DERIVED_FROM_P (parent, current_class_type))
1138 return 0;
1139 return 1;
1140}
1141
1142tree
1143build_vfield_ref (datum, type)
1144 tree datum, type;
1145{
1146 tree rval;
1147 int old_assume_nonnull_objects = flag_assume_nonnull_objects;
1148
1149 if (datum == error_mark_node)
1150 return error_mark_node;
1151
1152 /* Vtable references are always made from non-null objects. */
1153 flag_assume_nonnull_objects = 1;
1154 if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
1155 datum = convert_from_reference (datum);
1156
1157 if (! TYPE_USES_COMPLEX_INHERITANCE (type))
1158 rval = build (COMPONENT_REF, TREE_TYPE (CLASSTYPE_VFIELD (type)),
1159 datum, CLASSTYPE_VFIELD (type));
1160 else
1161 rval = build_component_ref (datum, DECL_NAME (CLASSTYPE_VFIELD (type)), 0, 0);
1162 flag_assume_nonnull_objects = old_assume_nonnull_objects;
1163
1164 return rval;
1165}
1166
1167/* Build a call to a member of an object. I.e., one that overloads
1168 operator ()(), or is a pointer-to-function or pointer-to-method. */
1169static tree
1170build_field_call (basetype_path, instance_ptr, name, parms, err_name)
1171 tree basetype_path;
1172 tree instance_ptr, name, parms;
1173 char *err_name;
1174{
1175 tree field, instance;
1176
1177 if (instance_ptr == current_class_decl)
1178 {
1179 /* Check to see if we really have a reference to an instance variable
1180 with `operator()()' overloaded. */
1181 field = IDENTIFIER_CLASS_VALUE (name);
1182
1183 if (field == NULL_TREE)
1184 {
1185 error ("`this' has no member named `%s'", err_name);
1186 return error_mark_node;
1187 }
1188
1189 if (TREE_CODE (field) == FIELD_DECL)
1190 {
1191 /* If it's a field, try overloading operator (),
1192 or calling if the field is a pointer-to-function. */
1193 instance = build_component_ref_1 (C_C_D, field, 0);
1194 if (instance == error_mark_node)
1195 return error_mark_node;
1196
1197 if (TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1198 && TYPE_OVERLOADS_CALL_EXPR (TREE_TYPE (instance)))
1199 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL, instance, parms, NULL_TREE);
1200
1201 if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1202 if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE)
1203 return build_function_call (instance, parms);
1204 else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE)
1205 return build_function_call (instance, tree_cons (NULL_TREE, current_class_decl, parms));
1206 }
1207 return NULL_TREE;
1208 }
1209
1210 /* Check to see if this is not really a reference to an instance variable
1211 with `operator()()' overloaded. */
1212 field = lookup_field (basetype_path, name, 1, 0);
1213
1214 /* This can happen if the reference was ambiguous
1215 or for visibility violations. */
1216 if (field == error_mark_node)
1217 return error_mark_node;
1218 if (field)
1219 {
1220 tree basetype;
1221 tree ftype = TREE_TYPE (field);
1222
1223 if (TYPE_LANG_SPECIFIC (ftype) && TYPE_OVERLOADS_CALL_EXPR (ftype))
1224 {
1225 /* Make the next search for this field very short. */
1226 basetype = DECL_FIELD_CONTEXT (field);
1227 instance_ptr = convert_pointer_to (basetype, instance_ptr);
1228
1229 instance = build_indirect_ref (instance_ptr, NULL);
1230 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL,
1231 build_component_ref_1 (instance, field, 0),
1232 parms, NULL_TREE);
1233 }
1234 if (TREE_CODE (ftype) == POINTER_TYPE)
1235 {
1236 if (TREE_CODE (TREE_TYPE (ftype)) == FUNCTION_TYPE
1237 || TREE_CODE (TREE_TYPE (ftype)) == METHOD_TYPE)
1238 {
1239 /* This is a member which is a pointer to function. */
1240 tree ref
1241 = build_component_ref_1 (build_indirect_ref (instance_ptr,
1242 NULL),
1243 field, LOOKUP_COMPLAIN);
1244 if (ref == error_mark_node)
1245 return error_mark_node;
1246 return build_function_call (ref, parms);
1247 }
1248 }
1249 else if (TREE_CODE (ftype) == METHOD_TYPE)
1250 {
1251 error ("invalid call via pointer-to-member function");
1252 return error_mark_node;
1253 }
1254 else
1255 return NULL_TREE;
1256 }
1257 return NULL_TREE;
1258}
1259
1260tree
1261find_scoped_type (type, inner_name, inner_types)
1262 tree type, inner_name, inner_types;
1263{
1264 tree tags = CLASSTYPE_TAGS (type);
1265
1266 while (tags)
1267 {
1268 /* The TREE_PURPOSE of an enum tag (which becomes a member of the
1269 enclosing class) is set to the name for the enum type. So, if
1270 inner_name is `bar', and we strike `baz' for `enum bar { baz }',
1271 then this test will be true. */
1272 if (TREE_PURPOSE (tags) == inner_name)
1273 {
1274 if (inner_types == NULL_TREE)
1275 return DECL_NESTED_TYPENAME (TYPE_NAME (TREE_VALUE (tags)));
1276 return resolve_scope_to_name (TREE_VALUE (tags), inner_types);
1277 }
1278 tags = TREE_CHAIN (tags);
1279 }
1280
1281 /* Look for a TYPE_DECL. */
1282 for (tags = TYPE_FIELDS (type); tags; tags = TREE_CHAIN (tags))
1283 if (TREE_CODE (tags) == TYPE_DECL && DECL_NAME (tags) == inner_name)
1284 {
1285 /* Code by raeburn. */
1286 if (inner_types == NULL_TREE)
1287 return DECL_NESTED_TYPENAME (tags);
1288 return resolve_scope_to_name (TREE_TYPE (tags), inner_types);
1289 }
1290
1291 return NULL_TREE;
1292}
1293
1294/* Resolve an expression NAME1::NAME2::...::NAMEn to
1295 the name that names the above nested type. INNER_TYPES
1296 is a chain of nested type names (held together by SCOPE_REFs);
1297 OUTER_TYPE is the type we know to enclose INNER_TYPES.
1298 Returns NULL_TREE if there is an error. */
1299tree
1300resolve_scope_to_name (outer_type, inner_types)
1301 tree outer_type, inner_types;
1302{
1303 register tree tmp;
1304 tree inner_name;
1305
1306 if (outer_type == NULL_TREE && current_class_type != NULL_TREE)
1307 {
1308 /* We first try to look for a nesting in our current class context,
1309 then try any enclosing classes. */
1310 tree type = current_class_type;
1311
1312 while (type && (TREE_CODE (type) == RECORD_TYPE
1313 || TREE_CODE (type) == UNION_TYPE))
1314 {
1315 tree rval = resolve_scope_to_name (type, inner_types);
1316
1317 if (rval != NULL_TREE)
1318 return rval;
1319 type = DECL_CONTEXT (TYPE_NAME (type));
1320 }
1321 }
1322
1323 if (TREE_CODE (inner_types) == SCOPE_REF)
1324 {
1325 inner_name = TREE_OPERAND (inner_types, 0);
1326 inner_types = TREE_OPERAND (inner_types, 1);
1327 }
1328 else
1329 {
1330 inner_name = inner_types;
1331 inner_types = NULL_TREE;
1332 }
1333
1334 if (outer_type == NULL_TREE)
1335 {
1336 /* If we have something that's already a type by itself,
1337 use that. */
1338 if (IDENTIFIER_HAS_TYPE_VALUE (inner_name))
1339 {
1340 if (inner_types)
1341 return resolve_scope_to_name (IDENTIFIER_TYPE_VALUE (inner_name),
1342 inner_types);
1343 return inner_name;
1344 }
1345 return NULL_TREE;
1346 }
1347
1348 if (! IS_AGGR_TYPE (outer_type))
1349 return NULL_TREE;
1350
1351 /* Look for member classes or enums. */
1352 tmp = find_scoped_type (outer_type, inner_name, inner_types);
1353
1354 /* If it's not a type in this class, then go down into the
1355 base classes and search there. */
1356 if (! tmp && TYPE_BINFO (outer_type))
1357 {
1358 tree binfos = TYPE_BINFO_BASETYPES (outer_type);
1359 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
1360
1361 for (i = 0; i < n_baselinks; i++)
1362 {
1363 tree base_binfo = TREE_VEC_ELT (binfos, i);
1364 tmp = find_scoped_type (BINFO_TYPE (base_binfo),
1365 inner_name, inner_types);
1366 if (tmp)
1367 return tmp;
1368 }
1369 tmp = NULL_TREE;
1370 }
1371
1372 return tmp;
1373}
1374
1375/* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
1376 This is how virtual function calls are avoided. */
1377tree
1378build_scoped_method_call (exp, scopes, name, parms)
1379 tree exp;
1380 tree scopes;
1381 tree name;
1382 tree parms;
1383{
1384 /* Because this syntactic form does not allow
1385 a pointer to a base class to be `stolen',
1386 we need not protect the derived->base conversion
1387 that happens here.
1388
1389 @@ But we do have to check visibility privileges later. */
1390 tree basename = resolve_scope_to_name (NULL_TREE, scopes);
1391 tree basetype, binfo, decl;
1392 tree type = TREE_TYPE (exp);
1393
1394 if (type == error_mark_node
1395 || basename == NULL_TREE
1396 || ! is_aggr_typedef (basename, 1))
1397 return error_mark_node;
1398
1399 if (! IS_AGGR_TYPE (type))
1400 {
1401 error ("base object of scoped method call is not of aggregate type");
1402 return error_mark_node;
1403 }
1404
1405 basetype = IDENTIFIER_TYPE_VALUE (basename);
1406
1407 if (binfo = binfo_or_else (basetype, type))
1408 {
1409 if (binfo == error_mark_node)
1410 return error_mark_node;
1411 if (TREE_CODE (exp) == INDIRECT_REF)
1412 decl = build_indirect_ref (convert_pointer_to (binfo,
1413 build_unary_op (ADDR_EXPR, exp, 0)), NULL);
1414 else
1415 decl = build_scoped_ref (exp, scopes);
1416
1417 /* Call to a destructor. */
1418 if (TREE_CODE (name) == BIT_NOT_EXPR)
1419 {
1420 /* Explicit call to destructor. */
1421 name = TREE_OPERAND (name, 0);
1422 if (! is_aggr_typedef (name, 1))
1423 return error_mark_node;
1424 if (TREE_TYPE (decl) != IDENTIFIER_TYPE_VALUE (name))
1425 {
1426 error_with_aggr_type (TREE_TYPE (decl),
1427 "qualified type `%s' does not match destructor type `%s'",
1428 IDENTIFIER_POINTER (name));
1429 return error_mark_node;
1430 }
1431 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
1432 error_with_aggr_type (TREE_TYPE (decl), "type `%s' has no destructor");
1433 return build_delete (TREE_TYPE (decl), decl, integer_two_node,
1434 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
1435 0, 0);
1436 }
1437
1438 /* Call to a method. */
1439 return build_method_call (decl, name, parms, NULL_TREE,
1440 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
1441 }
1442 return error_mark_node;
1443}
1444
1445/* Build something of the form ptr->method (args)
1446 or object.method (args). This can also build
1447 calls to constructors, and find friends.
1448
1449 Member functions always take their class variable
1450 as a pointer.
1451
1452 INSTANCE is a class instance.
1453
1454 NAME is the NAME field of the struct, union, or class
1455 whose type is that of INSTANCE.
1456
1457 PARMS help to figure out what that NAME really refers to.
1458
1459 BASETYPE_PATH, if non-NULL, tells which basetypes of INSTANCE
1460 we should be traversed before starting our search. We need
1461 this information to get protected accesses correct.
1462
1463 FLAGS is the logical disjunction of zero or more LOOKUP_
1464 flags. See cp-tree.h for more info.
1465
1466 If this is all OK, calls build_function_call with the resolved
1467 member function.
1468
1469 This function must also handle being called to perform
1470 initialization, promotion/coercion of arguments, and
1471 instantiation of default parameters.
1472
1473 Note that NAME may refer to an instance variable name. If
1474 `operator()()' is defined for the type of that field, then we return
1475 that result. */
1476tree
1477build_method_call (instance, name, parms, basetype_path, flags)
1478 tree instance, name, parms, basetype_path;
1479 int flags;
1480{
1481 register tree function, fntype, value_type;
1482 register tree basetype, save_basetype;
1483 register tree baselink, result, method_name, parmtypes, parm;
1484 tree last;
1485 int pass;
1486 enum visibility_type visibility;
1487
1488 /* Range of cases for vtable optimization. */
1489 enum vtable_needs { not_needed, maybe_needed, unneeded, needed };
1490 enum vtable_needs need_vtbl = not_needed;
1491
1492 char *err_name;
1493 char *name_kind;
1494 int ever_seen = 0;
1495 tree instance_ptr = NULL_TREE;
1496 int all_virtual = flag_all_virtual;
1497 int static_call_context = 0;
1498 tree saw_private = NULL_TREE;
1499 tree saw_protected = NULL_TREE;
1500
1501 /* Keep track of `const' and `volatile' objects. */
1502 int constp, volatilep;
1503
1504#ifdef GATHER_STATISTICS
1505 n_build_method_call++;
1506#endif
1507
1508 if (instance == error_mark_node
1509 || name == error_mark_node
1510 || parms == error_mark_node
1511 || (instance != NULL_TREE && TREE_TYPE (instance) == error_mark_node))
1512 return error_mark_node;
1513
1514 /* This is the logic that magically deletes the second argument to
1515 operator delete, if it is not needed. */
1516 if (name == ansi_opname[(int) DELETE_EXPR] && list_length (parms)==2)
1517 {
1518 tree save_last = TREE_CHAIN (parms);
1519 tree result;
1520 /* get rid of unneeded argument */
1521 TREE_CHAIN (parms) = NULL_TREE;
1522 result = build_method_call (instance, name, parms, basetype_path,
1523 (LOOKUP_SPECULATIVELY|flags)
1524 &~LOOKUP_COMPLAIN);
1525 /* If it works, return it. */
1526 if (result && result != error_mark_node)
1527 return build_method_call (instance, name, parms, basetype_path, flags);
1528 /* If it doesn't work, two argument delete must work */
1529 TREE_CHAIN (parms) = save_last;
1530 }
1531
1532#if 0
1533 /* C++ 2.1 does not allow this, but ANSI probably will. */
1534 if (TREE_CODE (name) == BIT_NOT_EXPR)
1535 {
1536 error ("invalid call to destructor, use qualified name `%s::~%s'",
1537 IDENTIFIER_POINTER (name), IDENTIFIER_POINTER (name));
1538 return error_mark_node;
1539 }
1540#else
1541 if (TREE_CODE (name) == BIT_NOT_EXPR)
1542 {
1543 flags |= LOOKUP_DESTRUCTOR;
1544 name = TREE_OPERAND (name, 0);
1545 if (! is_aggr_typedef (name, 1))
1546 return error_mark_node;
1547 if (parms)
1548 error ("destructors take no parameters");
1549 basetype = IDENTIFIER_TYPE_VALUE (name);
1550 if (! TYPE_HAS_DESTRUCTOR (basetype))
1551 {
1552#if 0 /* ARM says tp->~T() without T::~T() is valid. */
1553 error_with_aggr_type (basetype, "type `%s' has no destructor");
1554#endif
1555 /* A destructive destructor wouldn't be a bad idea, but let's
1556 not bother for now. */
1557 return build_c_cast (void_type_node, instance);
1558 }
1559 instance = default_conversion (instance);
1560 if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1561 instance_ptr = instance;
1562 else
1563 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1564 return build_delete (build_pointer_type (basetype),
1565 instance_ptr, integer_two_node,
1566 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0, 0);
1567 }
1568#endif
1569
1570 /* Initialize name for error reporting. */
1571 if (IDENTIFIER_TYPENAME_P (name))
1572 err_name = "type conversion operator";
1573 else if (IDENTIFIER_OPNAME_P (name))
1574 {
1575 char *p = operator_name_string (name);
1576 err_name = (char *)alloca (strlen (p) + 10);
1577 sprintf (err_name, "operator %s", p);
1578 }
1579 else if (TREE_CODE (name) == SCOPE_REF)
1580 err_name = IDENTIFIER_POINTER (TREE_OPERAND (name, 1));
1581 else
1582 err_name = IDENTIFIER_POINTER (name);
1583
1584 if (IDENTIFIER_OPNAME_P (name))
1585 GNU_xref_call (current_function_decl, IDENTIFIER_POINTER (name));
1586 else
1587 GNU_xref_call (current_function_decl, err_name);
1588
1589 if (instance == NULL_TREE)
1590 {
1591 basetype = NULL_TREE;
1592 /* Check cases where this is really a call to raise
1593 an exception. */
1594 if (current_class_type && TREE_CODE (name) == IDENTIFIER_NODE)
1595 {
1596 basetype = purpose_member (name, CLASSTYPE_TAGS (current_class_type));
1597 if (basetype)
1598 basetype = TREE_VALUE (basetype);
1599 }
1600 else if (TREE_CODE (name) == SCOPE_REF
1601 && TREE_CODE (TREE_OPERAND (name, 0)) == IDENTIFIER_NODE)
1602 {
1603 if (! is_aggr_typedef (TREE_OPERAND (name, 0), 1))
1604 return error_mark_node;
1605 basetype = purpose_member (TREE_OPERAND (name, 1),
1606 CLASSTYPE_TAGS (IDENTIFIER_TYPE_VALUE (TREE_OPERAND (name, 0))));
1607 if (basetype)
1608 basetype = TREE_VALUE (basetype);
1609 }
1610
1611 if (basetype != NULL_TREE)
1612 ;
1613 /* call to a constructor... */
1614 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
1615 {
1616 basetype = IDENTIFIER_TYPE_VALUE (name);
1617 name = constructor_name (basetype);
1618 }
1619 else
1620 {
1621 tree typedef_name = lookup_name (name, 1);
1622 if (typedef_name && TREE_CODE (typedef_name) == TYPE_DECL)
1623 {
1624 /* Canonicalize the typedef name. */
1625 basetype = TREE_TYPE (typedef_name);
1626 name = TYPE_IDENTIFIER (basetype);
1627 }
1628 else
1629 {
1630 error ("no constructor named `%s' in visible scope",
1631 IDENTIFIER_POINTER (name));
1632 return error_mark_node;
1633 }
1634 }
1635
1636 if (! IS_AGGR_TYPE (basetype))
1637 {
1638 non_aggr_error:
1639 if ((flags & LOOKUP_COMPLAIN) && TREE_CODE (basetype) != ERROR_MARK)
1640 error ("request for member `%s' in something not a structure or union", err_name);
1641
1642 return error_mark_node;
1643 }
1644 }
1645 else if (instance == C_C_D || instance == current_class_decl)
1646 {
1647 /* When doing initialization, we side-effect the TREE_TYPE of
1648 C_C_D, hence we cannot set up BASETYPE from CURRENT_CLASS_TYPE. */
1649 basetype = TREE_TYPE (C_C_D);
1650
1651 /* Anything manifestly `this' in constructors and destructors
1652 has a known type, so virtual function tables are not needed. */
1653 if (TYPE_VIRTUAL_P (basetype)
1654 && !(flags & LOOKUP_NONVIRTUAL))
1655 need_vtbl = (dtor_label || ctor_label)
1656 ? unneeded : maybe_needed;
1657
1658 instance = C_C_D;
1659 instance_ptr = current_class_decl;
1660 result = build_field_call (TYPE_BINFO (current_class_type),
1661 instance_ptr, name, parms, err_name);
1662
1663 if (result)
1664 return result;
1665 }
1666 else if (TREE_CODE (instance) == RESULT_DECL)
1667 {
1668 basetype = TREE_TYPE (instance);
1669 /* Should we ever have to make a virtual function reference
1670 from a RESULT_DECL, know that it must be of fixed type
1671 within the scope of this function. */
1672 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
1673 need_vtbl = maybe_needed;
1674 instance_ptr = build1 (ADDR_EXPR, TYPE_POINTER_TO (basetype), instance);
1675 }
1676 else if (instance == current_exception_object)
1677 {
1678 instance_ptr = build1 (ADDR_EXPR, TYPE_POINTER_TO (current_exception_type),
1679 TREE_OPERAND (current_exception_object, 0));
1680 mark_addressable (TREE_OPERAND (current_exception_object, 0));
1681 result = build_field_call (TYPE_BINFO (current_exception_type),
1682 instance_ptr, name, parms, err_name);
1683 if (result)
1684 return result;
1685 error ("exception member `%s' cannot be invoked", err_name);
1686 return error_mark_node;
1687 }
1688 else
1689 {
1690 /* The MAIN_VARIANT of the type that `instance_ptr' winds up being. */
1691 tree inst_ptr_basetype;
1692
1693 static_call_context = (TREE_CODE (instance) == NOP_EXPR
1694 && TREE_OPERAND (instance, 0) == error_mark_node);
1695
1696 /* the base type of an instance variable is pointer to class */
1697 basetype = TREE_TYPE (instance);
1698
1699 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1700 {
1701 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (basetype));
1702 if (! IS_AGGR_TYPE (basetype))
1703 goto non_aggr_error;
1704 /* Call to convert not needed because we are remaining
1705 within the same type. */
1706 instance_ptr = build1 (NOP_EXPR, TYPE_POINTER_TO (basetype), instance);
1707 inst_ptr_basetype = basetype;
1708 }
1709 else
1710 {
1711 if (TREE_CODE (basetype) == POINTER_TYPE)
1712 {
1713 basetype = TREE_TYPE (basetype);
1714 instance_ptr = instance;
1715 }
1716
1717 if (! IS_AGGR_TYPE (basetype))
1718 goto non_aggr_error;
1719
1720 if (! instance_ptr)
1721 {
1722 if ((lvalue_p (instance)
1723 && (instance_ptr = build_unary_op (ADDR_EXPR, instance, 0)))
1724 || (instance_ptr = unary_complex_lvalue (ADDR_EXPR, instance)))
1725 {
1726 if (instance_ptr == error_mark_node)
1727 return error_mark_node;
1728 }
1729 else if (TREE_CODE (instance) == NOP_EXPR
1730 || TREE_CODE (instance) == CONSTRUCTOR)
1731 {
1732 /* A cast is not an lvalue. Initialize a fresh temp
1733 with the value we are casting from, and proceed with
1734 that temporary. We can't cast to a reference type,
1735 so that simplifies the initialization to something
1736 we can manage. */
1737 tree temp = get_temp_name (TREE_TYPE (instance), 0);
1738 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
1739 expand_aggr_init (temp, instance, 0);
1740 else
1741 {
1742 store_init_value (temp, instance);
1743 expand_decl_init (temp);
1744 }
1745 instance = temp;
1746 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1747 }
1748 else
1749 {
1750 if (TREE_CODE (instance) != CALL_EXPR)
1751 my_friendly_abort (125);
1752 if (TYPE_NEEDS_CONSTRUCTOR (basetype))
1753 instance = build_cplus_new (basetype, instance, 0);
1754 else
1755 {
1756 instance = get_temp_name (basetype, 0);
1757 TREE_ADDRESSABLE (instance) = 1;
1758 }
1759 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1760 }
1761 /* @@ Should we call comp_target_types here? */
1762 inst_ptr_basetype = TREE_TYPE (TREE_TYPE (instance_ptr));
1763 if (TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (inst_ptr_basetype))
1764 basetype = inst_ptr_basetype;
1765 else
1766 {
1767 instance_ptr = convert (TYPE_POINTER_TO (basetype), instance_ptr);
1768 if (instance_ptr == error_mark_node)
1769 return error_mark_node;
1770 }
1771 }
1772 else
1773 inst_ptr_basetype = TREE_TYPE (TREE_TYPE (instance_ptr));
1774 }
1775
1776 if (basetype_path == NULL_TREE)
1777 basetype_path = TYPE_BINFO (inst_ptr_basetype);
1778
1779 result = build_field_call (basetype_path, instance_ptr, name, parms, err_name);
1780 if (result)
1781 return result;
1782
1783 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
1784 {
1785 if (TREE_SIDE_EFFECTS (instance_ptr))
1786 {
1787 /* This action is needed because the instance is needed
1788 for providing the base of the virtual function table.
1789 Without using a SAVE_EXPR, the function we are building
1790 may be called twice, or side effects on the instance
1791 variable (such as a post-increment), may happen twice. */
1792 instance_ptr = save_expr (instance_ptr);
1793 instance = build_indirect_ref (instance_ptr, NULL);
1794 }
1795 else if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1796 {
1797 /* This happens when called for operator new (). */
1798 instance = build_indirect_ref (instance, NULL);
1799 }
1800
1801 need_vtbl = maybe_needed;
1802 }
1803 }
1804
1805 if (TYPE_SIZE (basetype) == 0)
1806 {
1807 /* This is worth complaining about, I think. */
1808 error_with_aggr_type (basetype, "cannot lookup method in incomplete type `%s'");
1809 return error_mark_node;
1810 }
1811
1812 save_basetype = basetype;
1813
1814#if 0
1815 if (all_virtual == 1
1816 && (! strncmp (IDENTIFIER_POINTER (name), OPERATOR_METHOD_FORMAT,
1817 OPERATOR_METHOD_LENGTH)
1818 || instance_ptr == NULL_TREE
1819 || (TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype) == 0)))
1820 all_virtual = 0;
1821#endif
1822
1823 last = NULL_TREE;
1824 for (parmtypes = NULL_TREE, parm = parms; parm; parm = TREE_CHAIN (parm))
1825 {
1826 tree t = TREE_TYPE (TREE_VALUE (parm));
1827 if (TREE_CODE (t) == OFFSET_TYPE)
1828 {
1829 /* Convert OFFSET_TYPE entities to their normal selves. */
1830 TREE_VALUE (parm) = resolve_offset_ref (TREE_VALUE (parm));
1831 t = TREE_TYPE (TREE_VALUE (parm));
1832 }
1833 if (TREE_CODE (t) == ARRAY_TYPE)
1834 {
1835 /* Perform the conversion from ARRAY_TYPE to POINTER_TYPE in place.
1836 This eliminates needless calls to `compute_conversion_costs'. */
1837 TREE_VALUE (parm) = default_conversion (TREE_VALUE (parm));
1838 t = TREE_TYPE (TREE_VALUE (parm));
1839 }
1840 if (t == error_mark_node)
1841 return error_mark_node;
1842 last = build_tree_list (NULL_TREE, t);
1843 parmtypes = chainon (parmtypes, last);
1844 }
1845
1846 if (instance)
1847 {
1848 constp = TREE_READONLY (instance);
1849 volatilep = TREE_THIS_VOLATILE (instance);
1850 parms = tree_cons (NULL_TREE, instance_ptr, parms);
1851 }
1852 else
1853 {
1854 /* Raw constructors are always in charge. */
1855 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
1856 && ! (flags & LOOKUP_HAS_IN_CHARGE))
1857 {
1858 flags |= LOOKUP_HAS_IN_CHARGE;
1859 parms = tree_cons (NULL_TREE, integer_one_node, parms);
1860 parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes);
1861 }
1862
1863 if (flag_this_is_variable > 0)
1864 {
1865 constp = 0;
1866 volatilep = 0;
1867 parms = tree_cons (NULL_TREE, build1 (NOP_EXPR, TYPE_POINTER_TO (basetype), integer_zero_node), parms);
1868 }
1869 else
1870 {
1871 constp = 0;
1872 volatilep = 0;
1873 instance_ptr = build_new (NULL_TREE, basetype, void_type_node, 0);
1874 if (instance_ptr == error_mark_node)
1875 return error_mark_node;
1876 instance_ptr = save_expr (instance_ptr);
1877 TREE_CALLS_NEW (instance_ptr) = 1;
1878 instance = build_indirect_ref (instance_ptr, NULL);
1879
1880 /* If it's a default argument initialized from a ctor, what we get
1881 from instance_ptr will match the arglist for the FUNCTION_DECL
1882 of the constructor. */
1883 if (parms && TREE_CODE (TREE_VALUE (parms)) == CALL_EXPR
1884 && TREE_OPERAND (TREE_VALUE (parms), 1)
1885 && TREE_CALLS_NEW (TREE_VALUE (TREE_OPERAND (TREE_VALUE (parms), 1))))
1886 parms = build_tree_list (NULL_TREE, instance_ptr);
1887 else
1888 parms = tree_cons (NULL_TREE, instance_ptr, parms);
1889 }
1890 }
1891 parmtypes = tree_cons (NULL_TREE,
1892 build_pointer_type (build_type_variant (basetype, constp, volatilep)),
1893 parmtypes);
1894 if (last == NULL_TREE)
1895 last = parmtypes;
1896
1897 /* Look up function name in the structure type definition. */
1898
1899 if ((IDENTIFIER_HAS_TYPE_VALUE (name)
1900 && IS_AGGR_TYPE (IDENTIFIER_TYPE_VALUE (name)))
1901 || name == constructor_name (basetype))
1902 {
1903 tree tmp = NULL_TREE;
1904 if (IDENTIFIER_TYPE_VALUE (name) == basetype
1905 || name == constructor_name (basetype))
1906 tmp = TYPE_BINFO (basetype);
1907 else
1908 tmp = get_binfo (IDENTIFIER_TYPE_VALUE (name), basetype, 0);
1909
1910 if (tmp != NULL_TREE)
1911 {
1912 name_kind = "constructor";
1913
1914 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
1915 && ! (flags & LOOKUP_HAS_IN_CHARGE))
1916 {
1917 /* Constructors called for initialization
1918 only are never in charge. */
1919 tree tmplist;
1920
1921 flags |= LOOKUP_HAS_IN_CHARGE;
1922 tmplist = tree_cons (NULL_TREE, integer_zero_node,
1923 TREE_CHAIN (parms));
1924 TREE_CHAIN (parms) = tmplist;
1925 tmplist = tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
1926 TREE_CHAIN (parmtypes) = tmplist;
1927 }
1928 basetype = BINFO_TYPE (tmp);
1929 }
1930 else
1931 name_kind = "method";
1932 }
1933 else name_kind = "method";
1934
1935 if (basetype_path == NULL_TREE)
1936 basetype_path = TYPE_BINFO (basetype);
1937 result = lookup_fnfields (basetype_path, name,
1938 (flags & LOOKUP_COMPLAIN));
1939 if (result == error_mark_node)
1940 return error_mark_node;
1941
1942
1943 /* Now, go look for this method name. We do not find destructors here.
1944
1945 Putting `void_list_node' on the end of the parmtypes
1946 fakes out `build_decl_overload' into doing the right thing. */
1947 TREE_CHAIN (last) = void_list_node;
1948 method_name = build_decl_overload (name, parmtypes,
1949 1 + (name == constructor_name (save_basetype)));
1950 TREE_CHAIN (last) = NULL_TREE;
1951
1952 for (pass = 0; pass < 2; pass++)
1953 {
1954 struct candidate *candidates;
1955 struct candidate *cp;
1956 int len;
1957 unsigned best = 1;
1958
1959 /* This increments every time we go up the type hierarchy.
1960 The idea is to prefer a function of the derived class if possible. */
1961 int b_or_d = 0;
1962
1963 baselink = result;
1964
1965 if (pass > 0)
1966 {
1967 candidates
1968 = (struct candidate *) alloca ((ever_seen+1)
1969 * sizeof (struct candidate));
1970 cp = candidates;
1971 len = list_length (parms);
1972
1973 /* First see if a global function has a shot at it. */
1974 if (flags & LOOKUP_GLOBAL)
1975 {
1976 tree friend_parms;
1977 tree parm = TREE_VALUE (parms);
1978
1979 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE)
1980 friend_parms = parms;
1981 else if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE)
1982 {
1983 tree new_type;
1984 parm = build_indirect_ref (parm, "friendifying parms (compiler error)");
1985 new_type = build_reference_type (TREE_TYPE (parm));
1986 /* It is possible that this should go down a layer. */
1987 new_type = build_type_variant (new_type,
1988 TREE_READONLY (parm),
1989 TREE_THIS_VOLATILE (parm));
1990 parm = convert (new_type, parm);
1991 friend_parms = tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
1992 }
1993 else
1994 my_friendly_abort (167);
1995
1996 cp->harshness
1997 = (unsigned short *)alloca ((len+1) * sizeof (short));
1998 result = build_overload_call (name, friend_parms, 0, cp);
1999 /* If it turns out to be the one we were actually looking for
2000 (it was probably a friend function), the return the
2001 good result. */
2002 if (TREE_CODE (result) == CALL_EXPR)
2003 return result;
2004
2005 while (cp->evil == 0)
2006 {
2007 /* non-standard uses: set the field to 0 to indicate
2008 we are using a non-member function. */
2009 cp->u.field = 0;
2010 if (cp->harshness[len] == 0
2011 && cp->harshness[len] == 0
2012 && cp->user == 0 && cp->b_or_d == 0
2013 && cp->easy < best)
2014 best = cp->easy;
2015 cp += 1;
2016 }
2017 }
2018 }
2019
2020 while (baselink)
2021 {
2022 /* We have a hit (of sorts). If the parameter list is
2023 "error_mark_node", or some variant thereof, it won't
2024 match any methods. Since we have verified that the is
2025 some method vaguely matching this one (in name at least),
2026 silently return.
2027
2028 Don't stop for friends, however. */
2029 tree basetypes = TREE_PURPOSE (baselink);
2030
2031 function = TREE_VALUE (baselink);
2032 if (TREE_CODE (basetypes) == TREE_LIST)
2033 basetypes = TREE_VALUE (basetypes);
2034 basetype = BINFO_TYPE (basetypes);
2035
2036 /* Cast the instance variable to the appropriate type. */
2037 TREE_VALUE (parmtypes) = TYPE_POINTER_TO (basetype);
2038
2039 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (function)))
2040 function = DECL_CHAIN (function);
2041
2042 for (; function; function = DECL_CHAIN (function))
2043 {
2044#ifdef GATHER_STATISTICS
2045 n_inner_fields_searched++;
2046#endif
2047 ever_seen++;
2048
2049 /* Not looking for friends here. */
2050 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE
2051 && ! DECL_STATIC_FUNCTION_P (function))
2052 continue;
2053
2054 if (pass == 0
2055 && DECL_ASSEMBLER_NAME (function) == method_name)
2056 {
2057 if (flags & LOOKUP_PROTECT)
2058 {
2059 visibility = compute_visibility (basetypes, function);
2060 if (visibility == visibility_protected
2061 && flags & LOOKUP_PROTECTED_OK)
2062 visibility = visibility_public;
2063 }
2064
2065 if ((flags & LOOKUP_PROTECT) == 0
2066 || visibility == visibility_public)
2067 goto found_and_ok;
2068 else if (visibility == visibility_private)
2069 saw_private = function;
2070 else if (visibility == visibility_protected)
2071 saw_protected = function;
2072 /* If we fail on the exact match, we have
2073 an immediate failure. */
2074 goto found;
2075 }
2076 if (pass > 0)
2077 {
2078 tree these_parms = parms;
2079
2080#ifdef GATHER_STATISTICS
2081 n_inner_fields_searched++;
2082#endif
2083 cp->harshness
2084 = (unsigned short *)alloca ((len+1) * sizeof (short));
2085 if (DECL_STATIC_FUNCTION_P (function))
2086 these_parms = TREE_CHAIN (these_parms);
2087 compute_conversion_costs (function, these_parms, cp, len);
2088 cp->b_or_d += b_or_d;
2089 if (cp->evil == 0)
2090 {
2091 cp->u.field = function;
2092 cp->function = function;
2093 if (flags & LOOKUP_PROTECT)
2094 {
2095 enum visibility_type this_v;
2096 this_v = compute_visibility (basetypes, function);
2097 if (this_v == visibility_protected
2098 && (flags & LOOKUP_PROTECTED_OK))
2099 this_v = visibility_public;
2100 if (this_v != visibility_public)
2101 {
2102 if (this_v == visibility_private)
2103 saw_private = function;
2104 else
2105 saw_protected = function;
2106 continue;
2107 }
2108 }
2109
2110 /* No "two-level" conversions. */
2111 if (flags & LOOKUP_NO_CONVERSION && cp->user != 0)
2112 continue;
2113
2114 /* If we used default parameters, we must
2115 check to see whether anyone else might
2116 use them also, and report a possible
2117 ambiguity. */
2118 if (! TYPE_USES_MULTIPLE_INHERITANCE (save_basetype)
2119 && cp->harshness[len] == 0
2120 && CONST_HARSHNESS (cp->harshness[0]) == 0
2121 && cp->user == 0 && cp->b_or_d == 0
2122 && cp->easy < best)
2123 {
2124 if (! DECL_STATIC_FUNCTION_P (function))
2125 TREE_VALUE (parms) = cp->arg;
2126 if (best == 1)
2127 goto found_and_maybe_warn;
2128 }
2129 cp++;
2130 }
2131 }
2132 }
2133 /* Now we have run through one link's member functions.
2134 arrange to head-insert this link's links. */
2135 baselink = next_baselink (baselink);
2136 b_or_d += 1;
2137 }
2138 if (pass == 0)
2139 {
2140 /* No exact match could be found. Now try to find match
2141 using default conversions. */
2142 if ((flags & LOOKUP_GLOBAL) && IDENTIFIER_GLOBAL_VALUE (name))
2143 if (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (name)) == FUNCTION_DECL)
2144 ever_seen += 1;
2145 else if (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (name)) == TREE_LIST)
2146 ever_seen += list_length (IDENTIFIER_GLOBAL_VALUE (name));
2147
2148 if (ever_seen == 0)
2149 {
2150 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2151 == LOOKUP_SPECULATIVELY)
2152 return NULL_TREE;
2153 if (flags & LOOKUP_GLOBAL)
2154 error ("no global or non-hidden member function `%s' defined", err_name);
2155 else
2156 error_with_aggr_type (save_basetype, "no non-hidden member function `%s::%s' defined", err_name);
2157 return error_mark_node;
2158 }
2159 continue;
2160 }
2161
2162 if (cp - candidates != 0)
2163 {
2164 /* Rank from worst to best. Then cp will point to best one.
2165 Private fields have their bits flipped. For unsigned
2166 numbers, this should make them look very large.
2167 If the best alternate has a (signed) negative value,
2168 then all we ever saw were private members. */
2169 if (cp - candidates > 1)
2170 {
2171 cp = ideal_candidate (save_basetype, candidates,
2172 cp - candidates, parms, len);
2173 if (cp == (struct candidate *)0)
2174 {
2175 error ("ambiguous type conversion requested for %s `%s'",
2176 name_kind, err_name);
2177 return error_mark_node;
2178 }
2179 if (cp->evil)
2180 return error_mark_node;
2181 }
2182 else if (cp[-1].evil == 2)
2183 {
2184 error ("ambiguous type conversion requested for %s `%s'",
2185 name_kind, err_name);
2186 return error_mark_node;
2187 }
2188 else cp--;
2189
2190 /* The global function was the best, so use it. */
2191 if (cp->u.field == 0)
2192 {
2193 /* We must convert the instance pointer into a reference type.
2194 Global overloaded functions can only either take
2195 aggregate objects (which come for free from references)
2196 or reference data types anyway. */
2197 TREE_VALUE (parms) = copy_node (instance_ptr);
2198 TREE_TYPE (TREE_VALUE (parms)) = build_reference_type (TREE_TYPE (TREE_TYPE (instance_ptr)));
2199 return build_function_call (cp->function, parms);
2200 }
2201
2202 function = cp->function;
2203 if (! DECL_STATIC_FUNCTION_P (function))
2204 TREE_VALUE (parms) = cp->arg;
2205 goto found_and_maybe_warn;
2206 }
2207
2208 if ((flags & ~LOOKUP_GLOBAL) & (LOOKUP_COMPLAIN|LOOKUP_SPECULATIVELY))
2209 {
2210 char *tag_name, *buf;
2211
2212 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2213 == LOOKUP_SPECULATIVELY)
2214 return NULL_TREE;
2215
2216 if (DECL_STATIC_FUNCTION_P (cp->function))
2217 parms = TREE_CHAIN (parms);
2218 if (ever_seen)
2219 {
2220 if (((HOST_WIDE_INT)saw_protected|(HOST_WIDE_INT)saw_private) == 0)
2221 {
2222 if (flags & LOOKUP_SPECULATIVELY)
2223 return NULL_TREE;
2224 if (static_call_context && TREE_CODE (TREE_TYPE (cp->function)) == METHOD_TYPE)
2225 error_with_aggr_type (TREE_TYPE (TREE_TYPE (instance_ptr)),
2226 "object missing in call to `%s::%s'",
2227 err_name);
2228 else
2229 report_type_mismatch (cp, parms, name_kind, err_name);
2230 }
2231 else
2232 {
2233 char buf[80];
2234 char *msg;
2235 tree seen = saw_private;
2236
2237 if (saw_private)
2238 {
2239 if (saw_protected)
2240 msg = "%s `%%s' (and the like) are private or protected";
2241 else
2242 msg = "the %s `%%s' is private";
2243 }
2244 else
2245 {
2246 msg = "the %s `%%s' is protected";
2247 seen = saw_protected;
2248 }
2249 sprintf (buf, msg, name_kind);
2250 error_with_decl (seen, buf);
2251 error ("within this context");
2252 }
2253 return error_mark_node;
2254 }
2255
2256 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2257 == LOOKUP_COMPLAIN)
2258 {
2259 if (TREE_CODE (save_basetype) == RECORD_TYPE)
2260 tag_name = "structure";
2261 else
2262 tag_name = "union";
2263
2264 buf = (char *)alloca (30 + strlen (err_name));
2265 strcpy (buf, "%s has no method named `%s'");
2266 error (buf, tag_name, err_name);
2267 return error_mark_node;
2268 }
2269 return NULL_TREE;
2270 }
2271 continue;
2272
2273 found_and_maybe_warn:
2274 if (CONST_HARSHNESS (cp->harshness[0]))
2275 {
2276 if (flags & LOOKUP_COMPLAIN)
2277 {
2278 error_with_decl (cp->function, "non-const member function `%s'");
2279 error ("called for const object at this point in file");
2280 }
2281 /* Not good enough for a match. */
2282 else
2283 return error_mark_node;
2284 }
2285 goto found_and_ok;
2286 }
2287 /* Silently return error_mark_node. */
2288 return error_mark_node;
2289
2290 found:
2291 if (visibility == visibility_private)
2292 {
2293 if (flags & LOOKUP_COMPLAIN)
2294 {
2295 error_with_file_and_line (DECL_SOURCE_FILE (function),
2296 DECL_SOURCE_LINE (function),
2297 TREE_PRIVATE (function)
2298 ? "%s `%s' is private"
2299 : "%s `%s' is from private base class",
2300 name_kind,
2301 lang_printable_name (function));
2302 error ("within this context");
2303 }
2304 return error_mark_node;
2305 }
2306 else if (visibility == visibility_protected)
2307 {
2308 if (flags & LOOKUP_COMPLAIN)
2309 {
2310 error_with_file_and_line (DECL_SOURCE_FILE (function),
2311 DECL_SOURCE_LINE (function),
2312 TREE_PROTECTED (function)
2313 ? "%s `%s' is protected"
2314 : "%s `%s' has protected visibility from this point",
2315 name_kind,
2316 lang_printable_name (function));
2317 error ("within this context");
2318 }
2319 return error_mark_node;
2320 }
2321 my_friendly_abort (1);
2322
2323 found_and_ok:
2324
2325 /* From here on down, BASETYPE is the type that INSTANCE_PTR's
2326 type (if it exists) is a pointer to. */
2327 function = DECL_MAIN_VARIANT (function);
2328 /* Declare external function if necessary. */
2329 assemble_external (function);
2330
2331 fntype = TREE_TYPE (function);
2332 if (TREE_CODE (fntype) == POINTER_TYPE)
2333 fntype = TREE_TYPE (fntype);
2334 basetype = DECL_CLASS_CONTEXT (function);
2335
2336 /* If we are referencing a virtual function from an object
2337 of effectively static type, then there is no need
2338 to go through the virtual function table. */
2339 if (need_vtbl == maybe_needed)
2340 {
2341 int fixed_type = resolves_to_fixed_type_p (instance, 0);
2342
2343 if (all_virtual == 1
2344 && DECL_VINDEX (function)
2345 && may_be_remote (basetype))
2346 need_vtbl = needed;
2347 else if (DECL_VINDEX (function))
2348 need_vtbl = fixed_type ? unneeded : needed;
2349 else
2350 need_vtbl = not_needed;
2351 }
2352
2353 if (TREE_CODE (fntype) == METHOD_TYPE && static_call_context
2354 && !DECL_CONSTRUCTOR_P (function))
2355 {
2356 /* Let's be nice to the user for now, and give reasonable
2357 default behavior. */
2358 instance_ptr = current_class_decl;
2359 if (instance_ptr)
2360 {
2361 if (basetype != current_class_type)
2362 {
2363 tree binfo = get_binfo (basetype, current_class_type, 1);
2364 if (binfo == NULL_TREE)
2365 {
2366 error_not_base_type (function, current_class_type);
2367 return error_mark_node;
2368 }
2369 else if (basetype == error_mark_node)
2370 return error_mark_node;
2371 }
2372 }
2373 else if (! TREE_STATIC (function))
2374 {
2375 error_with_aggr_type (basetype, "cannot call member function `%s::%s' without object",
2376 err_name);
2377 return error_mark_node;
2378 }
2379 }
2380
2381 value_type = TREE_TYPE (fntype) ? TREE_TYPE (fntype) : void_type_node;
2382
2383 if (TYPE_SIZE (value_type) == 0)
2384 {
2385 if (flags & LOOKUP_COMPLAIN)
2386 incomplete_type_error (0, value_type);
2387 return error_mark_node;
2388 }
2389
2390 /* We do not pass FUNCTION into `convert_arguments', because by
2391 now everything should be ok. If not, then we have a serious error. */
2392 if (DECL_STATIC_FUNCTION_P (function))
2393 parms = convert_arguments (NULL_TREE, TYPE_ARG_TYPES (fntype),
2394 TREE_CHAIN (parms), NULL_TREE, LOOKUP_NORMAL);
2395 else if (need_vtbl == unneeded)
2396 {
2397 int sub_flags = DECL_CONSTRUCTOR_P (function) ? flags : LOOKUP_NORMAL;
2398 basetype = TREE_TYPE (instance);
2399 if (TYPE_METHOD_BASETYPE (TREE_TYPE (function)) != TYPE_MAIN_VARIANT (basetype)
2400 && TYPE_USES_COMPLEX_INHERITANCE (basetype))
2401 {
2402 basetype = DECL_CLASS_CONTEXT (function);
2403 instance_ptr = convert_pointer_to (basetype, instance_ptr);
2404 instance = build_indirect_ref (instance_ptr, NULL);
2405 }
2406 parms = tree_cons (NULL_TREE, instance_ptr,
2407 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), NULL_TREE, sub_flags));
2408 }
2409 else
2410 {
2411 if ((flags & LOOKUP_NONVIRTUAL) == 0)
2412 basetype = DECL_CONTEXT (function);
2413
2414 /* First parm could be integer_zerop with casts like
2415 ((Object*)0)->Object::IsA() */
2416 if (!integer_zerop (TREE_VALUE (parms)))
2417 {
2418 instance_ptr = convert_pointer_to (build_type_variant (basetype, constp, volatilep),
2419 TREE_VALUE (parms));
2420 if (TREE_CODE (instance_ptr) == COND_EXPR)
2421 {
2422 instance_ptr = save_expr (instance_ptr);
2423 instance = build_indirect_ref (instance_ptr, NULL);
2424 }
2425 else if (TREE_CODE (instance_ptr) == NOP_EXPR
2426 && TREE_CODE (TREE_OPERAND (instance_ptr, 0)) == ADDR_EXPR
2427 && TREE_OPERAND (TREE_OPERAND (instance_ptr, 0), 0) == instance)
2428 ;
2429 /* The call to `convert_pointer_to' may return error_mark_node. */
2430 else if (TREE_CODE (instance_ptr) == ERROR_MARK)
2431 return instance_ptr;
2432 else if (instance == NULL_TREE
2433 || TREE_CODE (instance) != INDIRECT_REF
2434 || TREE_OPERAND (instance, 0) != instance_ptr)
2435 instance = build_indirect_ref (instance_ptr, NULL);
2436 }
2437 parms = tree_cons (NULL_TREE, instance_ptr,
2438 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), NULL_TREE, LOOKUP_NORMAL));
2439 }
2440
2441#if 0
2442 /* Constructors do not overload method calls. */
2443 else if (TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype)
2444 && name != TYPE_IDENTIFIER (basetype)
2445 && (TREE_CODE (function) != FUNCTION_DECL
2446 || strncmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function)),
2447 OPERATOR_METHOD_FORMAT,
2448 OPERATOR_METHOD_LENGTH))
2449#if 0
2450 && (may_be_remote (basetype)
2451 || (C_C_D ? TREE_TYPE (instance) != current_class_type : 1))
2452#else
2453 /* This change by Larry Ketcham. */
2454 && (may_be_remote (basetype) || instance != C_C_D)
2455#endif
2456 )
2457 {
2458 tree fn_as_int;
2459
2460 parms = TREE_CHAIN (parms);
2461
2462 if (!all_virtual && TREE_CODE (function) == FUNCTION_DECL)
2463 fn_as_int = build_unary_op (ADDR_EXPR, function, 0);
2464 else
2465 fn_as_int = convert (TREE_TYPE (default_conversion (function)), DECL_VINDEX (function));
2466 if (all_virtual == 1)
2467 fn_as_int = convert (integer_type_node, fn_as_int);
2468
2469 result = build_opfncall (METHOD_CALL_EXPR, LOOKUP_NORMAL, instance, fn_as_int, parms);
2470
2471 if (result == NULL_TREE)
2472 {
2473 compiler_error ("could not overload `operator->()(...)'");
2474 return error_mark_node;
2475 }
2476 else if (result == error_mark_node)
2477 return error_mark_node;
2478
2479#if 0
2480 /* Do this if we want the result of operator->() to inherit
2481 the type of the function it is subbing for. */
2482 TREE_TYPE (result) = value_type;
2483#endif
2484
2485 return result;
2486 }
2487#endif
2488
2489 if (need_vtbl == needed)
2490 {
2491 function = build_vfn_ref (&TREE_VALUE (parms), instance, DECL_VINDEX (function));
2492 TREE_TYPE (function) = build_pointer_type (fntype);
2493 }
2494
2495 if (TREE_CODE (function) == FUNCTION_DECL)
2496 GNU_xref_call (current_function_decl,
2497 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function)));
2498
2499 if (TREE_CODE (function) == FUNCTION_DECL)
2500 {
2501 if (DECL_INLINE (function))
2502 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
2503 else
2504 {
2505 assemble_external (function);
2506 TREE_USED (function) = 1;
2507 function = default_conversion (function);
2508 }
2509 }
2510 else
2511 function = default_conversion (function);
2512
2513 result =
2514 build_nt (CALL_EXPR, function, parms, NULL_TREE);
2515
2516 TREE_TYPE (result) = value_type;
2517 TREE_SIDE_EFFECTS (result) = 1;
2518 TREE_RAISES (result)
2519 = TYPE_RAISES_EXCEPTIONS (fntype) || (parms && TREE_RAISES (parms));
2520 return result;
2521}
2522
2523/* Similar to `build_method_call', but for overloaded non-member functions.
2524 The name of this function comes through NAME. The name depends
2525 on PARMS.
2526
2527 Note that this function must handle simple `C' promotions,
2528 as well as variable numbers of arguments (...), and
2529 default arguments to boot.
2530
2531 If the overloading is successful, we return a tree node which
2532 contains the call to the function.
2533
2534 If overloading produces candidates which are probable, but not definite,
2535 we hold these candidates. If FINAL_CP is non-zero, then we are free
2536 to assume that final_cp points to enough storage for all candidates that
2537 this function might generate. The `harshness' array is preallocated for
2538 the first candidate, but not for subsequent ones.
2539
2540 Note that the DECL_RTL of FUNCTION must be made to agree with this
2541 function's new name. */
2542
2543tree
2544build_overload_call_real (fnname, parms, complain, final_cp, buildxxx)
2545 tree fnname, parms;
2546 int complain;
2547 struct candidate *final_cp;
2548 int buildxxx;
2549{
2550 /* must check for overloading here */
2551 tree overload_name, functions, function, parm;
2552 tree parmtypes = NULL_TREE, last = NULL_TREE;
2553 register tree outer;
2554 int length;
2555 int parmlength = list_length (parms);
2556
2557 struct candidate *candidates, *cp;
2558
2559 if (final_cp)
2560 {
2561 final_cp[0].evil = 0;
2562 final_cp[0].user = 0;
2563 final_cp[0].b_or_d = 0;
2564 final_cp[0].easy = 0;
2565 final_cp[0].function = 0;
2566 /* end marker. */
2567 final_cp[1].evil = 1;
2568 }
2569
2570 for (parm = parms; parm; parm = TREE_CHAIN (parm))
2571 {
2572 register tree t = TREE_TYPE (TREE_VALUE (parm));
2573
2574 if (t == error_mark_node)
2575 {
2576 if (final_cp)
2577 final_cp->evil = 1;
2578 return error_mark_node;
2579 }
2580 if (TREE_CODE (t) == ARRAY_TYPE || TREE_CODE (t) == OFFSET_TYPE)
2581 {
2582 /* Perform the conversion from ARRAY_TYPE to POINTER_TYPE in place.
2583 Also convert OFFSET_TYPE entities to their normal selves.
2584 This eliminates needless calls to `compute_conversion_costs'. */
2585 TREE_VALUE (parm) = default_conversion (TREE_VALUE (parm));
2586 t = TREE_TYPE (TREE_VALUE (parm));
2587 }
2588 last = build_tree_list (NULL_TREE, t);
2589 parmtypes = chainon (parmtypes, last);
2590 }
2591 if (last)
2592 TREE_CHAIN (last) = void_list_node;
2593 else
2594 parmtypes = void_list_node;
2595 overload_name = build_decl_overload (fnname, parmtypes, 0);
2596
2597 /* Now check to see whether or not we can win.
2598 Note that if we are called from `build_method_call',
2599 then we cannot have a mis-match, because we would have
2600 already found such a winning case. */
2601
2602 if (IDENTIFIER_GLOBAL_VALUE (overload_name))
2603 if (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (overload_name)) != TREE_LIST)
2604 return build_function_call (DECL_MAIN_VARIANT (IDENTIFIER_GLOBAL_VALUE (overload_name)), parms);
2605
2606 functions = IDENTIFIER_GLOBAL_VALUE (fnname);
2607
2608 if (functions == NULL_TREE)
2609 {
2610 if (complain)
2611 error ("only member functions apply");
2612 if (final_cp)
2613 final_cp->evil = 1;
2614 return error_mark_node;
2615 }
2616
2617 if (TREE_CODE (functions) == FUNCTION_DECL)
2618 {
2619 functions = DECL_MAIN_VARIANT (functions);
2620 if (final_cp)
2621 {
2622 /* We are just curious whether this is a viable alternative or not. */
2623 compute_conversion_costs (functions, parms, final_cp, parmlength);
2624 return functions;
2625 }
2626 else
2627 return build_function_call (functions, parms);
2628 }
2629
2630 if (TREE_VALUE (functions) == NULL_TREE)
2631 {
2632 if (complain)
2633 error ("function `%s' declared overloaded, but no instances of that function declared",
2634 IDENTIFIER_POINTER (TREE_PURPOSE (functions)));
2635 if (final_cp)
2636 final_cp->evil = 1;
2637 return error_mark_node;
2638 }
2639
2640 if (TREE_CODE (TREE_VALUE (functions)) == TREE_LIST)
2641 {
2642 register tree outer;
2643 length = 0;
2644
2645 /* The list-of-lists should only occur for class things. */
2646 my_friendly_assert (functions == IDENTIFIER_CLASS_VALUE (fnname), 168);
2647
2648 for (outer = functions; outer; outer = TREE_CHAIN (outer))
2649 {
2650 /* member functions. */
2651 length += decl_list_length (TREE_VALUE (TREE_VALUE (outer)));
2652 /* friend functions. */
2653 length += list_length (TREE_TYPE (TREE_VALUE (outer)));
2654 }
2655 }
2656 else
2657 {
2658 length = list_length (functions);
2659 }
2660
2661 if (final_cp)
2662 candidates = final_cp;
2663 else
2664 candidates = (struct candidate *)alloca ((length+1) * sizeof (struct candidate));
2665
2666 cp = candidates;
2667
2668 my_friendly_assert (TREE_CODE (TREE_VALUE (functions)) != TREE_LIST, 169);
2669 /* OUTER is the list of FUNCTION_DECLS, in a TREE_LIST. */
2670
2671 for (outer = functions; outer; outer = TREE_CHAIN (outer))
2672 {
2673 int template_cost = 0;
2674 function = TREE_VALUE (outer);
2675 if (TREE_CODE (function) != FUNCTION_DECL
2676 && ! (TREE_CODE (function) == TEMPLATE_DECL
2677 && ! DECL_TEMPLATE_IS_CLASS (function)
2678 && TREE_CODE (DECL_TEMPLATE_RESULT (function)) == FUNCTION_DECL))
2679 {
2680 enum tree_code code = TREE_CODE (function);
2681 if (code == TEMPLATE_DECL)
2682 code = TREE_CODE (DECL_TEMPLATE_RESULT (function));
2683 if (code == CONST_DECL)
2684 error_with_decl (function, "enumeral value `%s' conflicts with function of same name");
2685 else if (code == VAR_DECL)
2686 if (TREE_STATIC (function))
2687 error_with_decl (function, "variable `%s' conflicts with function of same name");
2688 else
2689 error_with_decl (function, "constant field `%s' conflicts with function of same name");
2690 else if (code == TYPE_DECL)
2691 continue;
2692 else my_friendly_abort (2);
2693 error ("at this point in file");
2694 continue;
2695 }
2696 if (TREE_CODE (function) == TEMPLATE_DECL)
2697 {
2698 int ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (function));
2699 tree *targs = (tree *) alloca (sizeof (tree) * ntparms);
2700 int i;
2701
2702 i = type_unification (DECL_TEMPLATE_PARMS (function), targs,
2703 TYPE_ARG_TYPES (TREE_TYPE (function)),
2704 parms, &template_cost);
2705 if (i == 0)
2706 function = instantiate_template (function, targs);
2707 }
2708 if (TREE_CODE (function) == TEMPLATE_DECL)
2709 /* Unconverted template -- failed match. */
2710 cp->evil = 1, cp->function = function, cp->u.bad_arg = -4;
2711 else
2712 {
2713 function = DECL_MAIN_VARIANT (function);
2714
2715 /* Can't use alloca here, since result might be
2716 passed to calling function. */
2717 cp->harshness
2718 = (unsigned short *)oballoc ((parmlength+1) * sizeof (short));
2719 compute_conversion_costs (function, parms, cp, parmlength);
2720 /* Should really add another field... */
2721 cp->easy = cp->easy * 128 + template_cost;
2722 if (cp[0].evil == 0)
2723 {
2724 cp[1].evil = 1;
2725 if (final_cp
2726 && cp[0].user == 0 && cp[0].b_or_d == 0
2727 && template_cost == 0
2728 && cp[0].easy <= 1)
2729 {
2730 final_cp[0].easy = cp[0].easy;
2731 return function;
2732 }
2733 cp++;
2734 }
2735 }
2736 }
2737
2738 if (cp - candidates)
2739 {
2740 tree rval = error_mark_node;
2741
2742 /* Leave marker. */
2743 cp[0].evil = 1;
2744 if (cp - candidates > 1)
2745 {
2746 struct candidate *best_cp
2747 = ideal_candidate (NULL_TREE, candidates,
2748 cp - candidates, parms, parmlength);
2749 if (best_cp == (struct candidate *)0)
2750 {
2751 if (complain)
2752 error ("call of overloaded `%s' is ambiguous", IDENTIFIER_POINTER (fnname));
2753 return error_mark_node;
2754 }
2755 else
2756 rval = best_cp->function;
2757 }
2758 else
2759 {
2760 cp -= 1;
2761 if (cp->evil > 1)
2762 {
2763 if (complain)
2764 error ("type conversion ambiguous");
2765 }
2766 else
2767 rval = cp->function;
2768 }
2769
2770 if (final_cp)
2771 return rval;
2772
2773 return buildxxx ? build_function_call_maybe (rval, parms)
2774 : build_function_call (rval, parms);
2775 }
2776 else if (complain)
2777 {
2778 tree name;
2779 char *err_name;
2780
2781 /* Initialize name for error reporting. */
2782 if (TREE_CODE (functions) == TREE_LIST)
2783 name = TREE_PURPOSE (functions);
2784 else if (TREE_CODE (functions) == ADDR_EXPR)
2785 /* Since the implicit `operator new' and `operator delete' functions
2786 are set up to have IDENTIFIER_GLOBAL_VALUEs that are unary ADDR_EXPRs
2787 by default_conversion(), we must compensate for that here by
2788 using the name of the ADDR_EXPR's operand. */
2789 name = DECL_NAME (TREE_OPERAND (functions, 0));
2790 else
2791 name = DECL_NAME (functions);
2792
2793 if (IDENTIFIER_OPNAME_P (name))
2794 {
2795 char *opname = operator_name_string (name);
2796 err_name = (char *)alloca (strlen (opname) + 12);
2797 sprintf (err_name, "operator %s", opname);
2798 }
2799 else
2800 err_name = IDENTIFIER_POINTER (name);
2801
2802 report_type_mismatch (cp, parms, "function", err_name);
2803 }
2804 return error_mark_node;
2805}
2806
2807tree
2808build_overload_call (fnname, parms, complain, final_cp)
2809 tree fnname, parms;
2810 int complain;
2811 struct candidate *final_cp;
2812{
2813 return build_overload_call_real (fnname, parms, complain, final_cp, 0);
2814}
2815
2816tree
2817build_overload_call_maybe (fnname, parms, complain, final_cp)
2818 tree fnname, parms;
2819 int complain;
2820 struct candidate *final_cp;
2821{
2822 return build_overload_call_real (fnname, parms, complain, final_cp, 1);
2823}