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