call.c (joust): Disable warnings until they can be moved to the right place.
[gcc.git] / gcc / cp / call.c
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 hacked by Brendan Kehoe (brendan@cygnus.com).
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, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23
24 /* High-level class interface. */
25
26 #include "config.h"
27 #include "tree.h"
28 #include <stdio.h>
29 #include "cp-tree.h"
30 #include "class.h"
31 #include "output.h"
32 #include "flags.h"
33
34 #ifdef HAVE_STDLIB_H
35 #include <stdlib.h>
36 #endif
37
38 #include "obstack.h"
39 #define obstack_chunk_alloc xmalloc
40 #define obstack_chunk_free free
41
42 extern int inhibit_warnings;
43 extern tree ctor_label, dtor_label;
44
45 /* Compute the ease with which a conversion can be performed
46 between an expected and the given type. */
47
48 static struct harshness_code convert_harshness PROTO((register tree, register tree, tree));
49 static tree build_new_method_call PROTO((tree, tree, tree, tree, int));
50
51 static int rank_for_ideal PROTO((struct candidate *,
52 struct candidate *));
53 static int user_harshness PROTO((tree, tree));
54 static int strictly_better PROTO((unsigned int, unsigned int));
55 static struct candidate * ideal_candidate PROTO((struct candidate *,
56 int, int));
57 static int may_be_remote PROTO((tree));
58 static tree build_field_call PROTO((tree, tree, tree, tree));
59 static tree find_scoped_type PROTO((tree, tree, tree));
60 static void print_candidates PROTO((tree));
61 static struct z_candidate * tourney PROTO((struct z_candidate *));
62 static int joust PROTO((struct z_candidate *, struct z_candidate *));
63 static int compare_qual PROTO((tree, tree));
64 static int compare_ics PROTO((tree, tree));
65 static tree build_over_call PROTO((tree, tree, tree, int));
66 static tree convert_default_arg PROTO((tree, tree));
67 static void enforce_access PROTO((tree, tree));
68 static tree convert_like PROTO((tree, tree));
69 static void op_error PROTO((enum tree_code, enum tree_code, tree, tree,
70 tree, char *));
71 static tree build_object_call PROTO((tree, tree));
72 static tree resolve_args PROTO((tree));
73 static struct z_candidate * build_user_type_conversion_1
74 PROTO ((tree, tree, int));
75 static void print_z_candidates PROTO((struct z_candidate *));
76 static tree build_this PROTO((tree));
77 static struct z_candidate * splice_viable PROTO((struct z_candidate *));
78 static int any_viable PROTO((struct z_candidate *));
79 static struct z_candidate * add_template_candidate
80 PROTO((struct z_candidate *, tree, tree, tree, int));
81 static struct z_candidate * add_template_conv_candidate
82 PROTO((struct z_candidate *, tree, tree, tree, tree));
83 static struct z_candidate * add_builtin_candidates
84 PROTO((struct z_candidate *, enum tree_code, enum tree_code,
85 tree, tree *, int));
86 static struct z_candidate * add_builtin_candidate
87 PROTO((struct z_candidate *, enum tree_code, enum tree_code,
88 tree, tree, tree, tree *, tree *, int));
89 static int is_complete PROTO((tree));
90 static struct z_candidate * build_builtin_candidate
91 PROTO((struct z_candidate *, tree, tree, tree, tree *, tree *,
92 int));
93 static struct z_candidate * add_conv_candidate
94 PROTO((struct z_candidate *, tree, tree, tree));
95 static struct z_candidate * add_function_candidate
96 PROTO((struct z_candidate *, tree, tree, int));
97 static tree implicit_conversion PROTO((tree, tree, tree, int));
98 static tree standard_conversion PROTO((tree, tree, tree));
99 static tree reference_binding PROTO((tree, tree, tree, int));
100 static tree strip_top_quals PROTO((tree));
101 static tree non_reference PROTO((tree));
102 static tree build_conv PROTO((enum tree_code, tree, tree));
103 static void print_n_candidates PROTO((struct candidate *, int));
104 static tree default_parm_conversions PROTO((tree, tree *));
105
106 #define EVIL_RETURN(ARG) ((ARG).code = EVIL_CODE, (ARG))
107 #define STD_RETURN(ARG) ((ARG).code = STD_CODE, (ARG))
108 #define QUAL_RETURN(ARG) ((ARG).code = QUAL_CODE, (ARG))
109 #define TRIVIAL_RETURN(ARG) ((ARG).code = TRIVIAL_CODE, (ARG))
110 #define ZERO_RETURN(ARG) ((ARG).code = 0, (ARG))
111
112 /* Ordering function for overload resolution. Compare two candidates
113 by gross quality. */
114
115 int
116 rank_for_overload (x, y)
117 struct candidate *x, *y;
118 {
119 if (y->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
120 return y->h.code - x->h.code;
121 if (x->h.code & (EVIL_CODE|ELLIPSIS_CODE|USER_CODE))
122 return -1;
123
124 /* This is set by compute_conversion_costs, for calling a non-const
125 member function from a const member function. */
126 if ((y->harshness[0].code & CONST_CODE) ^ (x->harshness[0].code & CONST_CODE))
127 return y->harshness[0].code - x->harshness[0].code;
128
129 if (y->h.code & STD_CODE)
130 {
131 if (x->h.code & STD_CODE)
132 return y->h.distance - x->h.distance;
133 return 1;
134 }
135 if (x->h.code & STD_CODE)
136 return -1;
137
138 return y->h.code - x->h.code;
139 }
140
141 /* Compare two candidates, argument by argument. */
142
143 static int
144 rank_for_ideal (x, y)
145 struct candidate *x, *y;
146 {
147 int i;
148
149 if (x->h_len != y->h_len)
150 abort ();
151
152 for (i = 0; i < x->h_len; i++)
153 {
154 if (y->harshness[i].code - x->harshness[i].code)
155 return y->harshness[i].code - x->harshness[i].code;
156 if ((y->harshness[i].code & STD_CODE)
157 && (y->harshness[i].distance - x->harshness[i].distance))
158 return y->harshness[i].distance - x->harshness[i].distance;
159
160 /* They're both the same code. Now see if we're dealing with an
161 integral promotion that needs a finer grain of accuracy. */
162 if (y->harshness[0].code & PROMO_CODE
163 && (y->harshness[i].int_penalty ^ x->harshness[i].int_penalty))
164 return y->harshness[i].int_penalty - x->harshness[i].int_penalty;
165 }
166 return 0;
167 }
168
169 /* TYPE is the type we wish to convert to. PARM is the parameter
170 we have to work with. We use a somewhat arbitrary cost function
171 to measure this conversion. */
172
173 static struct harshness_code
174 convert_harshness (type, parmtype, parm)
175 register tree type, parmtype;
176 tree parm;
177 {
178 struct harshness_code h;
179 register enum tree_code codel;
180 register enum tree_code coder;
181 int lvalue;
182
183 h.code = 0;
184 h.distance = 0;
185 h.int_penalty = 0;
186
187 #ifdef GATHER_STATISTICS
188 n_convert_harshness++;
189 #endif
190
191 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
192 {
193 if (parm)
194 parm = convert_from_reference (parm);
195 parmtype = TREE_TYPE (parmtype);
196 lvalue = 1;
197 }
198 else if (parm)
199 lvalue = lvalue_p (parm);
200 else
201 lvalue = 0;
202
203 if (TYPE_PTRMEMFUNC_P (type))
204 type = TYPE_PTRMEMFUNC_FN_TYPE (type);
205 if (TYPE_PTRMEMFUNC_P (parmtype))
206 parmtype = TYPE_PTRMEMFUNC_FN_TYPE (parmtype);
207
208 codel = TREE_CODE (type);
209 coder = TREE_CODE (parmtype);
210
211 if (TYPE_MAIN_VARIANT (parmtype) == TYPE_MAIN_VARIANT (type))
212 return ZERO_RETURN (h);
213
214 if (coder == ERROR_MARK)
215 return EVIL_RETURN (h);
216
217 if (codel == REFERENCE_TYPE)
218 {
219 tree ttl, ttr;
220 int constp = parm ? TREE_READONLY (parm) : TYPE_READONLY (parmtype);
221 int volatilep = (parm ? TREE_THIS_VOLATILE (parm)
222 : TYPE_VOLATILE (parmtype));
223 register tree intype = TYPE_MAIN_VARIANT (parmtype);
224 register enum tree_code form = TREE_CODE (intype);
225 int penalty = 0;
226
227 ttl = TREE_TYPE (type);
228
229 /* Only allow const reference binding if we were given a parm to deal
230 with, since it isn't really a conversion. This is a hack to
231 prevent build_type_conversion from finding this conversion, but
232 still allow overloading to find it. */
233 if (! lvalue && ! (parm && TYPE_READONLY (ttl)))
234 return EVIL_RETURN (h);
235
236 if ((TYPE_READONLY (ttl) < constp)
237 || (TYPE_VOLATILE (ttl) < volatilep))
238 return EVIL_RETURN (h);
239
240 /* When passing a non-const argument into a const reference, dig it a
241 little, so a non-const reference is preferred over this one. */
242 penalty = ((TYPE_READONLY (ttl) > constp)
243 + (TYPE_VOLATILE (ttl) > volatilep));
244
245 ttl = TYPE_MAIN_VARIANT (ttl);
246
247 if (form == OFFSET_TYPE)
248 {
249 intype = TREE_TYPE (intype);
250 form = TREE_CODE (intype);
251 }
252
253 ttr = intype;
254
255 if (TREE_CODE (ttl) == ARRAY_TYPE && TREE_CODE (ttr) == ARRAY_TYPE)
256 {
257 if (comptypes (ttl, ttr, 1))
258 return ZERO_RETURN (h);
259 return EVIL_RETURN (h);
260 }
261
262 h = convert_harshness (ttl, ttr, NULL_TREE);
263 if (penalty && h.code == 0)
264 {
265 h.code = QUAL_CODE;
266 h.int_penalty = penalty;
267 }
268 return h;
269 }
270
271 if (codel == POINTER_TYPE && fntype_p (parmtype))
272 {
273 tree p1, p2;
274 struct harshness_code h1, h2;
275
276 /* Get to the METHOD_TYPE or FUNCTION_TYPE that this might be. */
277 type = TREE_TYPE (type);
278
279 if (coder == POINTER_TYPE)
280 {
281 parmtype = TREE_TYPE (parmtype);
282 coder = TREE_CODE (parmtype);
283 }
284
285 if (coder != TREE_CODE (type))
286 return EVIL_RETURN (h);
287
288 if (type != parmtype && coder == METHOD_TYPE)
289 {
290 tree ttl = TYPE_METHOD_BASETYPE (type);
291 tree ttr = TYPE_METHOD_BASETYPE (parmtype);
292
293 int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
294 if (b_or_d < 0)
295 {
296 b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
297 if (b_or_d < 0)
298 return EVIL_RETURN (h);
299 h.distance = -b_or_d;
300 }
301 else
302 h.distance = b_or_d;
303 h.code = STD_CODE;
304
305 type = build_function_type
306 (TREE_TYPE (type), TREE_CHAIN (TYPE_ARG_TYPES (type)));
307 parmtype = build_function_type
308 (TREE_TYPE (parmtype), TREE_CHAIN (TYPE_ARG_TYPES (parmtype)));
309 }
310
311 /* We allow the default conversion between function type
312 and pointer-to-function type for free. */
313 if (comptypes (type, parmtype, 1))
314 return h;
315
316 if (pedantic)
317 return EVIL_RETURN (h);
318
319 /* Compare return types. */
320 p1 = TREE_TYPE (type);
321 p2 = TREE_TYPE (parmtype);
322 h2 = convert_harshness (p1, p2, NULL_TREE);
323 if (h2.code & EVIL_CODE)
324 return h2;
325
326 h1.code = TRIVIAL_CODE;
327 h1.distance = 0;
328
329 if (h2.distance != 0)
330 {
331 tree binfo;
332
333 /* This only works for pointers. */
334 if (TREE_CODE (p1) != POINTER_TYPE
335 && TREE_CODE (p1) != REFERENCE_TYPE)
336 return EVIL_RETURN (h);
337
338 p1 = TREE_TYPE (p1);
339 p2 = TREE_TYPE (p2);
340 /* Don't die if we happen to be dealing with void*. */
341 if (!IS_AGGR_TYPE (p1) || !IS_AGGR_TYPE (p2))
342 return EVIL_RETURN (h);
343 if (h2.distance < 0)
344 binfo = get_binfo (p2, p1, 0);
345 else
346 binfo = get_binfo (p1, p2, 0);
347
348 if (! BINFO_OFFSET_ZEROP (binfo))
349 {
350 #if 0
351 static int explained = 0;
352 if (h2.distance < 0)
353 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p2, p1);
354 else
355 message_2_types (sorry, "cannot cast `%s' to `%s' at function call site", p1, p2);
356
357 if (! explained++)
358 sorry ("(because pointer values change during conversion)");
359 #endif
360 return EVIL_RETURN (h);
361 }
362 }
363
364 h1.code |= h2.code;
365 if (h2.distance > h1.distance)
366 h1.distance = h2.distance;
367
368 p1 = TYPE_ARG_TYPES (type);
369 p2 = TYPE_ARG_TYPES (parmtype);
370 while (p1 && TREE_VALUE (p1) != void_type_node
371 && p2 && TREE_VALUE (p2) != void_type_node)
372 {
373 h2 = convert_harshness (TREE_VALUE (p1), TREE_VALUE (p2),
374 NULL_TREE);
375 if (h2.code & EVIL_CODE)
376 return h2;
377
378 if (h2.distance)
379 {
380 /* This only works for pointers and references. */
381 if (TREE_CODE (TREE_VALUE (p1)) != POINTER_TYPE
382 && TREE_CODE (TREE_VALUE (p1)) != REFERENCE_TYPE)
383 return EVIL_RETURN (h);
384 h2.distance = - h2.distance;
385 }
386
387 h1.code |= h2.code;
388 if (h2.distance > h1.distance)
389 h1.distance = h2.distance;
390 p1 = TREE_CHAIN (p1);
391 p2 = TREE_CHAIN (p2);
392 }
393 if (p1 == p2)
394 return h1;
395 if (p2)
396 {
397 if (p1)
398 return EVIL_RETURN (h);
399 h1.code |= ELLIPSIS_CODE;
400 return h1;
401 }
402 if (p1)
403 {
404 if (TREE_PURPOSE (p1) == NULL_TREE)
405 h1.code |= EVIL_CODE;
406 return h1;
407 }
408 }
409 else if (codel == POINTER_TYPE && coder == OFFSET_TYPE)
410 {
411 tree ttl, ttr;
412
413 /* Get to the OFFSET_TYPE that this might be. */
414 type = TREE_TYPE (type);
415
416 if (coder != TREE_CODE (type))
417 return EVIL_RETURN (h);
418
419 ttl = TYPE_OFFSET_BASETYPE (type);
420 ttr = TYPE_OFFSET_BASETYPE (parmtype);
421
422 if (ttl == ttr)
423 h.code = 0;
424 else
425 {
426 int b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
427 if (b_or_d < 0)
428 {
429 b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
430 if (b_or_d < 0)
431 return EVIL_RETURN (h);
432 h.distance = -b_or_d;
433 }
434 else
435 h.distance = b_or_d;
436 h.code = STD_CODE;
437 }
438
439 /* Now test the OFFSET_TYPE's target compatibility. */
440 type = TREE_TYPE (type);
441 parmtype = TREE_TYPE (parmtype);
442 }
443
444 if (coder == UNKNOWN_TYPE)
445 {
446 if (codel == FUNCTION_TYPE
447 || codel == METHOD_TYPE
448 || (codel == POINTER_TYPE
449 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
450 || TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)))
451 return TRIVIAL_RETURN (h);
452 return EVIL_RETURN (h);
453 }
454
455 if (coder == VOID_TYPE)
456 return EVIL_RETURN (h);
457
458 if (codel == BOOLEAN_TYPE)
459 {
460 if (INTEGRAL_CODE_P (coder) || coder == REAL_TYPE)
461 return STD_RETURN (h);
462 else if (coder == POINTER_TYPE || coder == OFFSET_TYPE)
463 {
464 /* Make this worse than any conversion to another pointer.
465 FIXME this is how I think the language should work, but it may not
466 end up being how the language is standardized (jason 1/30/95). */
467 h.distance = 32767;
468 return STD_RETURN (h);
469 }
470 return EVIL_RETURN (h);
471 }
472
473 if (INTEGRAL_CODE_P (codel))
474 {
475 /* Control equivalence of ints an enums. */
476
477 if (codel == ENUMERAL_TYPE
478 && flag_int_enum_equivalence == 0)
479 {
480 /* Enums can be converted to ints, but not vice-versa. */
481 if (coder != ENUMERAL_TYPE
482 || TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (parmtype))
483 return EVIL_RETURN (h);
484 }
485
486 /* else enums and ints (almost) freely interconvert. */
487
488 if (INTEGRAL_CODE_P (coder))
489 {
490 if (TYPE_MAIN_VARIANT (type)
491 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
492 {
493 h.code = PROMO_CODE;
494 }
495 else
496 h.code = STD_CODE;
497
498 return h;
499 }
500 else if (coder == REAL_TYPE)
501 {
502 h.code = STD_CODE;
503 h.distance = 0;
504 return h;
505 }
506 }
507
508 if (codel == REAL_TYPE)
509 {
510 if (coder == REAL_TYPE)
511 {
512 if (TYPE_MAIN_VARIANT (type)
513 == TYPE_MAIN_VARIANT (type_promotes_to (parmtype)))
514 h.code = PROMO_CODE;
515 else
516 h.code = STD_CODE;
517
518 return h;
519 }
520 else if (INTEGRAL_CODE_P (coder))
521 {
522 h.code = STD_CODE;
523 h.distance = 0;
524 return h;
525 }
526 }
527
528 /* Convert arrays which have not previously been converted. */
529 if (coder == ARRAY_TYPE)
530 {
531 coder = POINTER_TYPE;
532 if (parm)
533 {
534 parm = decay_conversion (parm);
535 parmtype = TREE_TYPE (parm);
536 }
537 else
538 parmtype = build_pointer_type (TREE_TYPE (parmtype));
539 }
540
541 /* Conversions among pointers */
542 if (codel == POINTER_TYPE && coder == POINTER_TYPE)
543 {
544 register tree ttl = TYPE_MAIN_VARIANT (TREE_TYPE (type));
545 register tree ttr = TYPE_MAIN_VARIANT (TREE_TYPE (parmtype));
546 int penalty = 4 * (ttl != ttr);
547
548 /* Anything converts to void *. Since this may be `const void *'
549 (etc.) use VOID_TYPE instead of void_type_node. Otherwise, the
550 targets must be the same, except that we do allow (at some cost)
551 conversion between signed and unsigned pointer types. */
552
553 if ((TREE_CODE (ttl) == METHOD_TYPE
554 || TREE_CODE (ttl) == FUNCTION_TYPE)
555 && TREE_CODE (ttl) == TREE_CODE (ttr))
556 {
557 if (comptypes (ttl, ttr, -1))
558 {
559 h.code = penalty ? STD_CODE : 0;
560 h.distance = 0;
561 }
562 else
563 h.code = EVIL_CODE;
564 return h;
565 }
566
567 #if 1
568 if (TREE_CODE (ttl) != VOID_TYPE
569 && (TREE_CODE (ttr) != VOID_TYPE || !parm || !null_ptr_cst_p (parm)))
570 {
571 if (comp_target_types (type, parmtype, 1) <= 0)
572 return EVIL_RETURN (h);
573 }
574 #else
575 if (!(TREE_CODE (ttl) == VOID_TYPE
576 || TREE_CODE (ttr) == VOID_TYPE
577 || (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (ttr)
578 && (ttl = unsigned_type (ttl),
579 ttr = unsigned_type (ttr),
580 penalty = 10, 0))
581 || (comp_target_types (ttl, ttr, 0) > 0)))
582 return EVIL_RETURN (h);
583 #endif
584
585 if (ttr == ttl)
586 {
587 tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
588
589 h.code = 0;
590 /* Note conversion from `T*' to `const T*',
591 or `T*' to `volatile T*'. */
592 if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
593 || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
594 h.code = EVIL_CODE;
595 else if ((TYPE_READONLY (tmp1) != TREE_READONLY (tmp2))
596 || (TYPE_VOLATILE (tmp1) != TYPE_VOLATILE (tmp2)))
597 h.code |= QUAL_CODE;
598
599 h.distance = 0;
600 return h;
601 }
602
603
604 if (TREE_CODE (ttl) == RECORD_TYPE && TREE_CODE (ttr) == RECORD_TYPE)
605 {
606 int b_or_d = get_base_distance (ttl, ttr, 0, (tree*)0);
607 if (b_or_d < 0)
608 {
609 b_or_d = get_base_distance (ttr, ttl, 0, (tree*)0);
610 if (b_or_d < 0)
611 return EVIL_RETURN (h);
612 h.distance = -b_or_d;
613 }
614 else
615 h.distance = b_or_d;
616 h.code = STD_CODE;
617 return h;
618 }
619
620 /* If converting from a `class*' to a `void*', make it
621 less favorable than any inheritance relationship. */
622 if (TREE_CODE (ttl) == VOID_TYPE && IS_AGGR_TYPE (ttr))
623 {
624 h.code = STD_CODE;
625 h.distance = CLASSTYPE_MAX_DEPTH (ttr)+1;
626 return h;
627 }
628
629 h.code = penalty ? STD_CODE : PROMO_CODE;
630 /* Catch things like `const char *' -> `const void *'
631 vs `const char *' -> `void *'. */
632 if (ttl != ttr)
633 {
634 tree tmp1 = TREE_TYPE (type), tmp2 = TREE_TYPE (parmtype);
635 if ((TYPE_READONLY (tmp1) < TREE_READONLY (tmp2))
636 || (TYPE_VOLATILE (tmp1) < TYPE_VOLATILE (tmp2)))
637 h.code = EVIL_CODE;
638 else if ((TYPE_READONLY (tmp1) > TREE_READONLY (tmp2))
639 || (TYPE_VOLATILE (tmp1) > TYPE_VOLATILE (tmp2)))
640 h.code |= QUAL_CODE;
641 }
642 return h;
643 }
644
645 if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
646 {
647 /* This is not a bad match, but don't let it beat
648 integer-enum combinations. */
649 if (parm && integer_zerop (parm))
650 {
651 h.code = STD_CODE;
652 h.distance = 0;
653 return h;
654 }
655 }
656
657 /* C++: Since the `this' parameter of a signature member function
658 is represented as a signature pointer to handle default implementations
659 correctly, we can have the case that `type' is a signature pointer
660 while `parmtype' is a pointer to a signature table. We don't really
661 do any conversions in this case, so just return 0. */
662
663 if (codel == RECORD_TYPE && coder == POINTER_TYPE
664 && IS_SIGNATURE_POINTER (type) && IS_SIGNATURE (TREE_TYPE (parmtype)))
665 return ZERO_RETURN (h);
666
667 if (codel == RECORD_TYPE && coder == RECORD_TYPE)
668 {
669 int b_or_d = get_base_distance (type, parmtype, 0, (tree*)0);
670 if (b_or_d < 0)
671 {
672 b_or_d = get_base_distance (parmtype, type, 0, (tree*)0);
673 if (b_or_d < 0)
674 return EVIL_RETURN (h);
675 h.distance = -b_or_d;
676 }
677 else
678 h.distance = b_or_d;
679 h.code = STD_CODE;
680 return h;
681 }
682 return EVIL_RETURN (h);
683 }
684
685 /* A clone of build_type_conversion for checking user-defined conversions in
686 overload resolution. */
687
688 static int
689 user_harshness (type, parmtype)
690 register tree type, parmtype;
691 {
692 tree conv;
693 tree winner = NULL_TREE;
694 int code;
695
696 {
697 tree typename = build_typename_overload (type);
698 if (lookup_fnfields (TYPE_BINFO (parmtype), typename, 0))
699 return 0;
700 }
701
702 for (conv = lookup_conversions (parmtype); conv; conv = TREE_CHAIN (conv))
703 {
704 struct harshness_code tmp;
705 tree cand = TREE_VALUE (conv);
706
707 if (winner && winner == cand)
708 continue;
709
710 tmp = convert_harshness (type, TREE_TYPE (TREE_TYPE (cand)), NULL_TREE);
711 if ((tmp.code < USER_CODE) && (tmp.distance >= 0))
712 {
713 if (winner)
714 return EVIL_CODE;
715 else
716 {
717 winner = cand;
718 code = tmp.code;
719 }
720 }
721 }
722
723 if (winner)
724 return code;
725
726 return -1;
727 }
728
729 #ifdef DEBUG_MATCHING
730 static char *
731 print_harshness (h)
732 struct harshness_code *h;
733 {
734 static char buf[1024];
735 char tmp[1024];
736
737 bzero (buf, 1024 * sizeof (char));
738 strcat (buf, "codes=[");
739 if (h->code & EVIL_CODE)
740 strcat (buf, "EVIL");
741 if (h->code & CONST_CODE)
742 strcat (buf, " CONST");
743 if (h->code & ELLIPSIS_CODE)
744 strcat (buf, " ELLIPSIS");
745 if (h->code & USER_CODE)
746 strcat (buf, " USER");
747 if (h->code & STD_CODE)
748 strcat (buf, " STD");
749 if (h->code & PROMO_CODE)
750 strcat (buf, " PROMO");
751 if (h->code & QUAL_CODE)
752 strcat (buf, " QUAL");
753 if (h->code & TRIVIAL_CODE)
754 strcat (buf, " TRIVIAL");
755 if (buf[0] == '\0')
756 strcat (buf, "0");
757
758 sprintf (tmp, "] distance=%d int_penalty=%d", h->distance, h->int_penalty);
759
760 strcat (buf, tmp);
761
762 return buf;
763 }
764 #endif
765
766 /* Algorithm: For each argument, calculate how difficult it is to
767 make FUNCTION accept that argument. If we can easily tell that
768 FUNCTION won't be acceptable to one of the arguments, then we
769 don't need to compute the ease of converting the other arguments,
770 since it will never show up in the intersection of all arguments'
771 favorite functions.
772
773 Conversions between builtin and user-defined types are allowed, but
774 no function involving such a conversion is preferred to one which
775 does not require such a conversion. Furthermore, such conversions
776 must be unique. */
777
778 void
779 compute_conversion_costs (function, tta_in, cp, arglen)
780 tree function;
781 tree tta_in;
782 struct candidate *cp;
783 int arglen;
784 {
785 tree ttf_in = TYPE_ARG_TYPES (TREE_TYPE (function));
786 tree ttf = ttf_in;
787 tree tta = tta_in;
788
789 /* Start out with no strikes against. */
790 int evil_strikes = 0;
791 int ellipsis_strikes = 0;
792 int user_strikes = 0;
793 int b_or_d_strikes = 0;
794 int easy_strikes = 0;
795
796 int strike_index = 0, win;
797 struct harshness_code lose;
798 extern int cp_silent;
799
800 #ifdef GATHER_STATISTICS
801 n_compute_conversion_costs++;
802 #endif
803
804 #ifndef DEBUG_MATCHING
805 /* We don't emit any warnings or errors while trying out each candidate. */
806 cp_silent = 1;
807 #endif
808
809 cp->function = function;
810 cp->arg = tta ? TREE_VALUE (tta) : NULL_TREE;
811 cp->u.bad_arg = 0; /* optimistic! */
812
813 cp->h.code = 0;
814 cp->h.distance = 0;
815 cp->h.int_penalty = 0;
816 bzero ((char *) cp->harshness,
817 (cp->h_len + 1) * sizeof (struct harshness_code));
818
819 while (ttf && tta)
820 {
821 struct harshness_code h;
822
823 if (ttf == void_list_node)
824 break;
825
826 if (type_unknown_p (TREE_VALUE (tta)))
827 {
828 /* Must perform some instantiation here. */
829 tree rhs = TREE_VALUE (tta);
830 tree lhstype = TREE_VALUE (ttf);
831
832 /* Keep quiet about possible contravariance violations. */
833 int old_inhibit_warnings = inhibit_warnings;
834 inhibit_warnings = 1;
835
836 /* @@ This is to undo what `grokdeclarator' does to
837 parameter types. It really should go through
838 something more general. */
839
840 TREE_TYPE (tta) = unknown_type_node;
841 rhs = instantiate_type (lhstype, rhs, 0);
842 inhibit_warnings = old_inhibit_warnings;
843
844 if (TREE_CODE (rhs) == ERROR_MARK)
845 h.code = EVIL_CODE;
846 else
847 h = convert_harshness (lhstype, TREE_TYPE (rhs), rhs);
848 }
849 else
850 {
851 #ifdef DEBUG_MATCHING
852 static tree old_function = NULL_TREE;
853
854 if (!old_function || function != old_function)
855 {
856 cp_error ("trying %D", function);
857 old_function = function;
858 }
859
860 cp_error (" doing (%T) %E against arg %T",
861 TREE_TYPE (TREE_VALUE (tta)), TREE_VALUE (tta),
862 TREE_VALUE (ttf));
863 #endif
864
865 h = convert_harshness (TREE_VALUE (ttf),
866 TREE_TYPE (TREE_VALUE (tta)),
867 TREE_VALUE (tta));
868
869 #ifdef DEBUG_MATCHING
870 cp_error (" evaluated %s", print_harshness (&h));
871 #endif
872 }
873
874 cp->harshness[strike_index] = h;
875 if ((h.code & EVIL_CODE)
876 || ((h.code & STD_CODE) && h.distance < 0))
877 {
878 cp->u.bad_arg = strike_index;
879 evil_strikes = 1;
880 }
881 else if (h.code & ELLIPSIS_CODE)
882 ellipsis_strikes += 1;
883 #if 0
884 /* This is never set by `convert_harshness'. */
885 else if (h.code & USER_CODE)
886 {
887 user_strikes += 1;
888 }
889 #endif
890 else
891 {
892 if ((h.code & STD_CODE) && h.distance)
893 {
894 if (h.distance > b_or_d_strikes)
895 b_or_d_strikes = h.distance;
896 }
897 else
898 easy_strikes += (h.code & (STD_CODE|PROMO_CODE|TRIVIAL_CODE));
899 cp->h.code |= h.code;
900 /* Make sure we communicate this. */
901 cp->h.int_penalty += h.int_penalty;
902 }
903
904 ttf = TREE_CHAIN (ttf);
905 tta = TREE_CHAIN (tta);
906 strike_index += 1;
907 }
908
909 if (tta)
910 {
911 /* ran out of formals, and parmlist is fixed size. */
912 if (ttf /* == void_type_node */)
913 {
914 cp->h.code = EVIL_CODE;
915 cp->u.bad_arg = -1;
916 cp_silent = 0;
917 return;
918 }
919 else
920 {
921 struct harshness_code h;
922 int l = list_length (tta);
923 ellipsis_strikes += l;
924 h.code = ELLIPSIS_CODE;
925 h.distance = 0;
926 h.int_penalty = 0;
927 for (; l; --l)
928 cp->harshness[strike_index++] = h;
929 }
930 }
931 else if (ttf && ttf != void_list_node)
932 {
933 /* ran out of actuals, and no defaults. */
934 if (TREE_PURPOSE (ttf) == NULL_TREE)
935 {
936 cp->h.code = EVIL_CODE;
937 cp->u.bad_arg = -2;
938 cp_silent = 0;
939 return;
940 }
941 /* Store index of first default. */
942 cp->harshness[arglen].distance = strike_index+1;
943 }
944 else
945 cp->harshness[arglen].distance = 0;
946
947 /* Argument list lengths work out, so don't need to check them again. */
948 if (evil_strikes)
949 {
950 /* We do not check for derived->base conversions here, since in
951 no case would they give evil strike counts, unless such conversions
952 are somehow ambiguous. */
953
954 /* See if any user-defined conversions apply.
955 But make sure that we do not loop. */
956 static int dont_convert_types = 0;
957
958 if (dont_convert_types)
959 {
960 cp->h.code = EVIL_CODE;
961 cp_silent = 0;
962 return;
963 }
964
965 win = 0; /* Only get one chance to win. */
966 ttf = TYPE_ARG_TYPES (TREE_TYPE (function));
967 tta = tta_in;
968 strike_index = 0;
969 evil_strikes = 0;
970
971 while (ttf && tta)
972 {
973 if (ttf == void_list_node)
974 break;
975
976 lose = cp->harshness[strike_index];
977 if ((lose.code & EVIL_CODE)
978 || ((lose.code & STD_CODE) && lose.distance < 0))
979 {
980 tree actual_type = TREE_TYPE (TREE_VALUE (tta));
981 tree formal_type = TREE_VALUE (ttf);
982 int extra_conversions = 0;
983
984 dont_convert_types = 1;
985
986 if (TREE_CODE (formal_type) == REFERENCE_TYPE)
987 formal_type = TREE_TYPE (formal_type);
988 if (TREE_CODE (actual_type) == REFERENCE_TYPE)
989 actual_type = TREE_TYPE (actual_type);
990
991 if (formal_type != error_mark_node
992 && actual_type != error_mark_node)
993 {
994 formal_type = complete_type (TYPE_MAIN_VARIANT (formal_type));
995 actual_type = complete_type (TYPE_MAIN_VARIANT (actual_type));
996
997 if (TYPE_HAS_CONSTRUCTOR (formal_type))
998 {
999 /* If it has a constructor for this type,
1000 try to use it. */
1001 /* @@ There is no way to save this result yet, so
1002 success is a NULL_TREE for now. */
1003 if (convert_to_aggr (formal_type, TREE_VALUE (tta), 0, 1)
1004 != error_mark_node)
1005 win++;
1006 }
1007 if (TYPE_LANG_SPECIFIC (actual_type)
1008 && TYPE_HAS_CONVERSION (actual_type))
1009 {
1010 int extra = user_harshness (formal_type, actual_type);
1011
1012 if (extra == EVIL_CODE)
1013 win += 2;
1014 else if (extra >= 0)
1015 {
1016 win++;
1017 extra_conversions = extra;
1018 }
1019 }
1020 }
1021 dont_convert_types = 0;
1022
1023 if (win == 1)
1024 {
1025 user_strikes += 1;
1026 cp->harshness[strike_index].code
1027 = USER_CODE | (extra_conversions ? STD_CODE : 0);
1028 win = 0;
1029 }
1030 else
1031 {
1032 if (cp->u.bad_arg > strike_index)
1033 cp->u.bad_arg = strike_index;
1034
1035 evil_strikes = win ? 2 : 1;
1036 break;
1037 }
1038 }
1039
1040 ttf = TREE_CHAIN (ttf);
1041 tta = TREE_CHAIN (tta);
1042 strike_index += 1;
1043 }
1044 }
1045
1046 /* Const member functions get a small penalty because defaulting
1047 to const is less useful than defaulting to non-const. */
1048 /* This is bogus, it does not correspond to anything in the ARM.
1049 This code will be fixed when this entire section is rewritten
1050 to conform to the ARM. (mrs) */
1051 if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
1052 {
1053 tree this_parm = TREE_VALUE (ttf_in);
1054
1055 if (TREE_CODE (this_parm) == RECORD_TYPE /* Is `this' a sig ptr? */
1056 ? TYPE_READONLY (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (this_parm))))
1057 : TYPE_READONLY (TREE_TYPE (this_parm)))
1058 {
1059 cp->harshness[0].code |= TRIVIAL_CODE;
1060 ++easy_strikes;
1061 }
1062 else
1063 {
1064 /* Calling a non-const member function from a const member function
1065 is probably invalid, but for now we let it only draw a warning.
1066 We indicate that such a mismatch has occurred by setting the
1067 harshness to a maximum value. */
1068 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tta_in))) == POINTER_TYPE
1069 && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (TREE_VALUE (tta_in))))))
1070 cp->harshness[0].code |= CONST_CODE;
1071 }
1072 }
1073
1074 if (evil_strikes)
1075 cp->h.code = EVIL_CODE;
1076 if (ellipsis_strikes)
1077 cp->h.code |= ELLIPSIS_CODE;
1078 if (user_strikes)
1079 cp->h.code |= USER_CODE;
1080 cp_silent = 0;
1081 #ifdef DEBUG_MATCHING
1082 cp_error ("final eval %s", print_harshness (&cp->h));
1083 #endif
1084 }
1085
1086 /* Subroutine of ideal_candidate. See if X or Y is a better match
1087 than the other. */
1088
1089 static int
1090 strictly_better (x, y)
1091 unsigned int x, y;
1092 {
1093 unsigned short xor;
1094
1095 if (x == y)
1096 return 0;
1097
1098 xor = x ^ y;
1099 if (xor >= x || xor >= y)
1100 return 1;
1101 return 0;
1102 }
1103
1104 /* When one of several possible overloaded functions and/or methods
1105 can be called, choose the best candidate for overloading.
1106
1107 BASETYPE is the context from which we start method resolution
1108 or NULL if we are comparing overloaded functions.
1109 CANDIDATES is the array of candidates we have to choose from.
1110 N_CANDIDATES is the length of CANDIDATES.
1111 PARMS is a TREE_LIST of parameters to the function we'll ultimately
1112 choose. It is modified in place when resolving methods. It is not
1113 modified in place when resolving overloaded functions.
1114 LEN is the length of the parameter list. */
1115
1116 static struct candidate *
1117 ideal_candidate (candidates, n_candidates, len)
1118 struct candidate *candidates;
1119 int n_candidates;
1120 int len;
1121 {
1122 struct candidate *cp = candidates+n_candidates;
1123 int i, j = -1, best_code;
1124
1125 /* For each argument, sort the functions from best to worst for the arg.
1126 For each function that's not best for this arg, set its overall
1127 harshness to EVIL so that other args won't like it. The candidate
1128 list for the last argument is the intersection of all the best-liked
1129 functions. */
1130
1131 qsort (candidates, n_candidates, sizeof (struct candidate),
1132 (int (*) PROTO((const void *, const void *))) rank_for_overload);
1133 best_code = cp[-1].h.code;
1134
1135 /* If they're at least as good as each other, do an arg-by-arg check. */
1136 if (! strictly_better (cp[-1].h.code, cp[-2].h.code))
1137 {
1138 int better = 0;
1139 int worse = 0;
1140
1141 for (j = 0; j < n_candidates; j++)
1142 if (! strictly_better (candidates[j].h.code, best_code))
1143 break;
1144
1145 qsort (candidates+j, n_candidates-j, sizeof (struct candidate),
1146 (int (*) PROTO((const void *, const void *))) rank_for_ideal);
1147 for (i = 0; i < len; i++)
1148 {
1149 if (cp[-1].harshness[i].code < cp[-2].harshness[i].code)
1150 better = 1;
1151 else if (cp[-1].harshness[i].code > cp[-2].harshness[i].code)
1152 worse = 1;
1153 else if (cp[-1].harshness[i].code & STD_CODE)
1154 {
1155 /* If it involves a standard conversion, let the
1156 inheritance lattice be the final arbiter. */
1157 if (cp[-1].harshness[i].distance > cp[-2].harshness[i].distance)
1158 worse = 1;
1159 else if (cp[-1].harshness[i].distance < cp[-2].harshness[i].distance)
1160 better = 1;
1161 }
1162 else if (cp[-1].harshness[i].code & PROMO_CODE)
1163 {
1164 /* For integral promotions, take into account a finer
1165 granularity for determining which types should be favored
1166 over others in such promotions. */
1167 if (cp[-1].harshness[i].int_penalty > cp[-2].harshness[i].int_penalty)
1168 worse = 1;
1169 else if (cp[-1].harshness[i].int_penalty < cp[-2].harshness[i].int_penalty)
1170 better = 1;
1171 }
1172 }
1173
1174 if (! better || worse)
1175 return NULL;
1176 }
1177 return cp-1;
1178 }
1179
1180 /* Assume that if the class referred to is not in the
1181 current class hierarchy, that it may be remote.
1182 PARENT is assumed to be of aggregate type here. */
1183
1184 static int
1185 may_be_remote (parent)
1186 tree parent;
1187 {
1188 if (TYPE_OVERLOADS_METHOD_CALL_EXPR (parent) == 0)
1189 return 0;
1190
1191 if (current_class_type == NULL_TREE)
1192 return 0;
1193
1194 if (parent == current_class_type)
1195 return 0;
1196
1197 if (UNIQUELY_DERIVED_FROM_P (parent, current_class_type))
1198 return 0;
1199 return 1;
1200 }
1201
1202 tree
1203 build_vfield_ref (datum, type)
1204 tree datum, type;
1205 {
1206 tree rval;
1207 int old_assume_nonnull_objects = flag_assume_nonnull_objects;
1208
1209 if (datum == error_mark_node)
1210 return error_mark_node;
1211
1212 /* Vtable references are always made from non-null objects. */
1213 flag_assume_nonnull_objects = 1;
1214 if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
1215 datum = convert_from_reference (datum);
1216
1217 if (! TYPE_USES_COMPLEX_INHERITANCE (type))
1218 rval = build (COMPONENT_REF, TREE_TYPE (CLASSTYPE_VFIELD (type)),
1219 datum, CLASSTYPE_VFIELD (type));
1220 else
1221 rval = build_component_ref (datum, DECL_NAME (CLASSTYPE_VFIELD (type)), NULL_TREE, 0);
1222 flag_assume_nonnull_objects = old_assume_nonnull_objects;
1223
1224 return rval;
1225 }
1226
1227 /* Build a call to a member of an object. I.e., one that overloads
1228 operator ()(), or is a pointer-to-function or pointer-to-method. */
1229
1230 static tree
1231 build_field_call (basetype_path, instance_ptr, name, parms)
1232 tree basetype_path, instance_ptr, name, parms;
1233 {
1234 tree field, instance;
1235
1236 if (name == ctor_identifier || name == dtor_identifier)
1237 return NULL_TREE;
1238
1239 if (instance_ptr == current_class_ptr)
1240 {
1241 /* Check to see if we really have a reference to an instance variable
1242 with `operator()()' overloaded. */
1243 field = IDENTIFIER_CLASS_VALUE (name);
1244
1245 if (field == NULL_TREE)
1246 {
1247 cp_error ("`this' has no member named `%D'", name);
1248 return error_mark_node;
1249 }
1250
1251 if (TREE_CODE (field) == FIELD_DECL)
1252 {
1253 /* If it's a field, try overloading operator (),
1254 or calling if the field is a pointer-to-function. */
1255 instance = build_component_ref_1 (current_class_ref, field, 0);
1256 if (instance == error_mark_node)
1257 return error_mark_node;
1258
1259 if (TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1260 && (TYPE_OVERLOADS_CALL_EXPR (TREE_TYPE (instance))
1261 || flag_ansi_overloading))
1262 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL, instance, parms, NULL_TREE);
1263
1264 if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
1265 {
1266 if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE)
1267 return build_function_call (instance, parms);
1268 else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE)
1269 return build_function_call (instance, tree_cons (NULL_TREE, current_class_ptr, parms));
1270 }
1271 }
1272 return NULL_TREE;
1273 }
1274
1275 /* Check to see if this is not really a reference to an instance variable
1276 with `operator()()' overloaded. */
1277 field = lookup_field (basetype_path, name, 1, 0);
1278
1279 /* This can happen if the reference was ambiguous or for access
1280 violations. */
1281 if (field == error_mark_node)
1282 return error_mark_node;
1283
1284 if (field)
1285 {
1286 tree basetype;
1287 tree ftype = TREE_TYPE (field);
1288
1289 if (TREE_CODE (ftype) == REFERENCE_TYPE)
1290 ftype = TREE_TYPE (ftype);
1291
1292 if (TYPE_LANG_SPECIFIC (ftype)
1293 && (TYPE_OVERLOADS_CALL_EXPR (ftype) || flag_ansi_overloading))
1294 {
1295 /* Make the next search for this field very short. */
1296 basetype = DECL_FIELD_CONTEXT (field);
1297 instance_ptr = convert_pointer_to (basetype, instance_ptr);
1298
1299 instance = build_indirect_ref (instance_ptr, NULL_PTR);
1300 return build_opfncall (CALL_EXPR, LOOKUP_NORMAL,
1301 build_component_ref_1 (instance, field, 0),
1302 parms, NULL_TREE);
1303 }
1304 if (TREE_CODE (ftype) == POINTER_TYPE)
1305 {
1306 if (TREE_CODE (TREE_TYPE (ftype)) == FUNCTION_TYPE
1307 || TREE_CODE (TREE_TYPE (ftype)) == METHOD_TYPE)
1308 {
1309 /* This is a member which is a pointer to function. */
1310 tree ref
1311 = build_component_ref_1 (build_indirect_ref (instance_ptr,
1312 NULL_PTR),
1313 field, LOOKUP_COMPLAIN);
1314 if (ref == error_mark_node)
1315 return error_mark_node;
1316 return build_function_call (ref, parms);
1317 }
1318 }
1319 else if (TREE_CODE (ftype) == METHOD_TYPE)
1320 {
1321 error ("invalid call via pointer-to-member function");
1322 return error_mark_node;
1323 }
1324 else
1325 return NULL_TREE;
1326 }
1327 return NULL_TREE;
1328 }
1329
1330 static tree
1331 find_scoped_type (type, inner_name, inner_types)
1332 tree type, inner_name, inner_types;
1333 {
1334 tree tags = CLASSTYPE_TAGS (type);
1335
1336 while (tags)
1337 {
1338 /* The TREE_PURPOSE of an enum tag (which becomes a member of the
1339 enclosing class) is set to the name for the enum type. So, if
1340 inner_name is `bar', and we strike `baz' for `enum bar { baz }',
1341 then this test will be true. */
1342 if (TREE_PURPOSE (tags) == inner_name)
1343 {
1344 if (inner_types == NULL_TREE)
1345 return TYPE_MAIN_DECL (TREE_VALUE (tags));
1346 return resolve_scope_to_name (TREE_VALUE (tags), inner_types);
1347 }
1348 tags = TREE_CHAIN (tags);
1349 }
1350
1351 /* Look for a TYPE_DECL. */
1352 for (tags = TYPE_FIELDS (type); tags; tags = TREE_CHAIN (tags))
1353 if (TREE_CODE (tags) == TYPE_DECL && DECL_NAME (tags) == inner_name)
1354 {
1355 /* Code by raeburn. */
1356 if (inner_types == NULL_TREE)
1357 return tags;
1358 return resolve_scope_to_name (TREE_TYPE (tags), inner_types);
1359 }
1360
1361 return NULL_TREE;
1362 }
1363
1364 /* Resolve an expression NAME1::NAME2::...::NAMEn to
1365 the name that names the above nested type. INNER_TYPES
1366 is a chain of nested type names (held together by SCOPE_REFs);
1367 OUTER_TYPE is the type we know to enclose INNER_TYPES.
1368 Returns NULL_TREE if there is an error. */
1369
1370 tree
1371 resolve_scope_to_name (outer_type, inner_stuff)
1372 tree outer_type, inner_stuff;
1373 {
1374 register tree tmp;
1375 tree inner_name, inner_type;
1376
1377 if (outer_type == NULL_TREE && current_class_type != NULL_TREE)
1378 {
1379 /* We first try to look for a nesting in our current class context,
1380 then try any enclosing classes. */
1381 tree type = current_class_type;
1382
1383 while (type && (TREE_CODE (type) == RECORD_TYPE
1384 || TREE_CODE (type) == UNION_TYPE))
1385 {
1386 tree rval = resolve_scope_to_name (type, inner_stuff);
1387
1388 if (rval != NULL_TREE)
1389 return rval;
1390 type = DECL_CONTEXT (TYPE_MAIN_DECL (type));
1391 }
1392 }
1393
1394 if (TREE_CODE (inner_stuff) == SCOPE_REF)
1395 {
1396 inner_name = TREE_OPERAND (inner_stuff, 0);
1397 inner_type = TREE_OPERAND (inner_stuff, 1);
1398 }
1399 else
1400 {
1401 inner_name = inner_stuff;
1402 inner_type = NULL_TREE;
1403 }
1404
1405 if (outer_type == NULL_TREE)
1406 {
1407 tree x;
1408 /* If we have something that's already a type by itself,
1409 use that. */
1410 if (IDENTIFIER_HAS_TYPE_VALUE (inner_name))
1411 {
1412 if (inner_type)
1413 return resolve_scope_to_name (IDENTIFIER_TYPE_VALUE (inner_name),
1414 inner_type);
1415 return inner_name;
1416 }
1417
1418 x = lookup_name (inner_name, 0);
1419
1420 if (x && TREE_CODE (x) == NAMESPACE_DECL)
1421 {
1422 x = lookup_namespace_name (x, inner_type);
1423 return x;
1424 }
1425 return NULL_TREE;
1426 }
1427
1428 if (! IS_AGGR_TYPE (outer_type))
1429 return NULL_TREE;
1430
1431 /* Look for member classes or enums. */
1432 tmp = find_scoped_type (outer_type, inner_name, inner_type);
1433
1434 /* If it's not a type in this class, then go down into the
1435 base classes and search there. */
1436 if (! tmp && TYPE_BINFO (outer_type))
1437 {
1438 tree binfos = TYPE_BINFO_BASETYPES (outer_type);
1439 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
1440
1441 for (i = 0; i < n_baselinks; i++)
1442 {
1443 tree base_binfo = TREE_VEC_ELT (binfos, i);
1444 tmp = resolve_scope_to_name (BINFO_TYPE (base_binfo), inner_stuff);
1445 if (tmp)
1446 return tmp;
1447 }
1448 tmp = NULL_TREE;
1449 }
1450
1451 return tmp;
1452 }
1453
1454 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
1455 This is how virtual function calls are avoided. */
1456
1457 tree
1458 build_scoped_method_call (exp, basetype, name, parms)
1459 tree exp, basetype, name, parms;
1460 {
1461 /* Because this syntactic form does not allow
1462 a pointer to a base class to be `stolen',
1463 we need not protect the derived->base conversion
1464 that happens here.
1465
1466 @@ But we do have to check access privileges later. */
1467 tree binfo, decl;
1468 tree type = TREE_TYPE (exp);
1469
1470 if (type == error_mark_node
1471 || basetype == error_mark_node)
1472 return error_mark_node;
1473
1474 if (processing_template_decl)
1475 {
1476 if (TREE_CODE (name) == BIT_NOT_EXPR)
1477 {
1478 tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1479 name = build_min_nt (BIT_NOT_EXPR, type);
1480 }
1481 name = build_min_nt (SCOPE_REF, basetype, name);
1482 return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
1483 }
1484
1485 if (TREE_CODE (type) == REFERENCE_TYPE)
1486 type = TREE_TYPE (type);
1487
1488 if (TREE_CODE (basetype) == TREE_VEC)
1489 {
1490 binfo = basetype;
1491 basetype = BINFO_TYPE (binfo);
1492 }
1493 else
1494 binfo = NULL_TREE;
1495
1496 /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
1497 that explicit ~int is caught in the parser; this deals with typedefs
1498 and template parms. */
1499 if (TREE_CODE (name) == BIT_NOT_EXPR && ! IS_AGGR_TYPE (basetype))
1500 {
1501 if (type != basetype)
1502 cp_error ("type of `%E' does not match destructor type `%T' (type was `%T')",
1503 exp, basetype, type);
1504 name = TREE_OPERAND (name, 0);
1505 if (basetype != name && basetype != get_type_value (name))
1506 cp_error ("qualified type `%T' does not match destructor name `~%T'",
1507 basetype, name);
1508 return cp_convert (void_type_node, exp);
1509 }
1510
1511 if (! is_aggr_type (basetype, 1))
1512 return error_mark_node;
1513
1514 if (! IS_AGGR_TYPE (type))
1515 {
1516 cp_error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
1517 exp, type);
1518 return error_mark_node;
1519 }
1520
1521 if (! binfo)
1522 {
1523 binfo = get_binfo (basetype, type, 1);
1524 if (binfo == error_mark_node)
1525 return error_mark_node;
1526 if (! binfo)
1527 error_not_base_type (basetype, type);
1528 }
1529
1530 if (binfo)
1531 {
1532 if (TREE_CODE (exp) == INDIRECT_REF)
1533 decl = build_indirect_ref
1534 (convert_pointer_to_real
1535 (binfo, build_unary_op (ADDR_EXPR, exp, 0)), NULL_PTR);
1536 else
1537 decl = build_scoped_ref (exp, basetype);
1538
1539 /* Call to a destructor. */
1540 if (TREE_CODE (name) == BIT_NOT_EXPR)
1541 {
1542 /* Explicit call to destructor. */
1543 name = TREE_OPERAND (name, 0);
1544 if (! (name == TYPE_MAIN_VARIANT (TREE_TYPE (decl))
1545 || name == constructor_name (TREE_TYPE (decl))
1546 || TREE_TYPE (decl) == get_type_value (name)))
1547 {
1548 cp_error
1549 ("qualified type `%T' does not match destructor name `~%T'",
1550 TREE_TYPE (decl), name);
1551 return error_mark_node;
1552 }
1553 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
1554 return cp_convert (void_type_node, exp);
1555
1556 return build_delete (TREE_TYPE (decl), decl, integer_two_node,
1557 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
1558 0);
1559 }
1560
1561 /* Call to a method. */
1562 return build_method_call (decl, name, parms, binfo,
1563 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
1564 }
1565 return error_mark_node;
1566 }
1567
1568 static void
1569 print_candidates (candidates)
1570 tree candidates;
1571 {
1572 cp_error_at ("candidates are: %D", TREE_VALUE (candidates));
1573 candidates = TREE_CHAIN (candidates);
1574
1575 while (candidates)
1576 {
1577 cp_error_at (" %D", TREE_VALUE (candidates));
1578 candidates = TREE_CHAIN (candidates);
1579 }
1580 }
1581
1582 static void
1583 print_n_candidates (candidates, n)
1584 struct candidate *candidates;
1585 int n;
1586 {
1587 int i;
1588
1589 cp_error_at ("candidates are: %D", candidates[0].function);
1590 for (i = 1; i < n; i++)
1591 cp_error_at (" %D", candidates[i].function);
1592 }
1593
1594 /* We want the address of a function or method. We avoid creating a
1595 pointer-to-member function. */
1596
1597 tree
1598 build_addr_func (function)
1599 tree function;
1600 {
1601 tree type = TREE_TYPE (function);
1602
1603 /* We have to do these by hand to avoid real pointer to member
1604 functions. */
1605 if (TREE_CODE (type) == METHOD_TYPE)
1606 {
1607 tree addr;
1608
1609 type = build_pointer_type (type);
1610
1611 if (mark_addressable (function) == 0)
1612 return error_mark_node;
1613
1614 addr = build1 (ADDR_EXPR, type, function);
1615
1616 /* Address of a static or external variable or function counts
1617 as a constant */
1618 if (staticp (function))
1619 TREE_CONSTANT (addr) = 1;
1620
1621 function = addr;
1622 }
1623 else
1624 function = default_conversion (function);
1625
1626 return function;
1627 }
1628
1629 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
1630 POINTER_TYPE to those. Note, pointer to member function types
1631 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
1632
1633 tree
1634 build_call (function, result_type, parms)
1635 tree function, result_type, parms;
1636 {
1637 int is_constructor = 0;
1638
1639 function = build_addr_func (function);
1640
1641 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
1642 {
1643 sorry ("unable to call pointer to member function here");
1644 return error_mark_node;
1645 }
1646
1647 if (TREE_CODE (function) == ADDR_EXPR
1648 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1649 && DECL_CONSTRUCTOR_P (TREE_OPERAND (function, 0)))
1650 is_constructor = 1;
1651
1652 function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
1653 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
1654 TREE_TYPE (function) = result_type;
1655 TREE_SIDE_EFFECTS (function) = 1;
1656
1657 return function;
1658 }
1659
1660 static tree
1661 default_parm_conversions (parms, last)
1662 tree parms, *last;
1663 {
1664 tree parm, parmtypes = NULL_TREE;
1665
1666 *last = NULL_TREE;
1667
1668 for (parm = parms; parm; parm = TREE_CHAIN (parm))
1669 {
1670 tree t = TREE_TYPE (TREE_VALUE (parm));
1671
1672 if (TREE_CODE (t) == OFFSET_TYPE
1673 || TREE_CODE (t) == METHOD_TYPE
1674 || TREE_CODE (t) == FUNCTION_TYPE)
1675 {
1676 TREE_VALUE (parm) = default_conversion (TREE_VALUE (parm));
1677 t = TREE_TYPE (TREE_VALUE (parm));
1678 }
1679
1680 if (t == error_mark_node)
1681 return error_mark_node;
1682
1683 *last = build_tree_list (NULL_TREE, t);
1684 parmtypes = chainon (parmtypes, *last);
1685 }
1686
1687 return parmtypes;
1688 }
1689
1690
1691 /* Build something of the form ptr->method (args)
1692 or object.method (args). This can also build
1693 calls to constructors, and find friends.
1694
1695 Member functions always take their class variable
1696 as a pointer.
1697
1698 INSTANCE is a class instance.
1699
1700 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
1701
1702 PARMS help to figure out what that NAME really refers to.
1703
1704 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
1705 down to the real instance type to use for access checking. We need this
1706 information to get protected accesses correct. This parameter is used
1707 by build_member_call.
1708
1709 FLAGS is the logical disjunction of zero or more LOOKUP_
1710 flags. See cp-tree.h for more info.
1711
1712 If this is all OK, calls build_function_call with the resolved
1713 member function.
1714
1715 This function must also handle being called to perform
1716 initialization, promotion/coercion of arguments, and
1717 instantiation of default parameters.
1718
1719 Note that NAME may refer to an instance variable name. If
1720 `operator()()' is defined for the type of that field, then we return
1721 that result. */
1722
1723 tree
1724 build_method_call (instance, name, parms, basetype_path, flags)
1725 tree instance, name, parms, basetype_path;
1726 int flags;
1727 {
1728 register tree function, fntype, value_type;
1729 register tree basetype, save_basetype;
1730 register tree baselink, result, parmtypes;
1731 tree last;
1732 int pass;
1733 tree access = access_public_node;
1734 tree orig_basetype = basetype_path ? BINFO_TYPE (basetype_path) : NULL_TREE;
1735
1736 /* Range of cases for vtable optimization. */
1737 enum vtable_needs { not_needed, maybe_needed, unneeded, needed };
1738 enum vtable_needs need_vtbl = not_needed;
1739
1740 char *name_kind;
1741 tree save_name = name;
1742 int ever_seen = 0;
1743 tree instance_ptr = NULL_TREE;
1744 int all_virtual = flag_all_virtual;
1745 int static_call_context = 0;
1746 tree found_fns = NULL_TREE;
1747
1748 /* Keep track of `const' and `volatile' objects. */
1749 int constp, volatilep;
1750
1751 #ifdef GATHER_STATISTICS
1752 n_build_method_call++;
1753 #endif
1754
1755 if (instance == error_mark_node
1756 || name == error_mark_node
1757 || parms == error_mark_node
1758 || (instance != NULL_TREE && TREE_TYPE (instance) == error_mark_node))
1759 return error_mark_node;
1760
1761 if (processing_template_decl)
1762 {
1763 if (TREE_CODE (name) == BIT_NOT_EXPR)
1764 {
1765 tree type = get_aggr_from_typedef (TREE_OPERAND (name, 0), 1);
1766 name = build_min_nt (BIT_NOT_EXPR, type);
1767 }
1768
1769 return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
1770 }
1771
1772 /* This is the logic that magically deletes the second argument to
1773 operator delete, if it is not needed. */
1774 if (name == ansi_opname[(int) DELETE_EXPR] && list_length (parms)==2)
1775 {
1776 tree save_last = TREE_CHAIN (parms);
1777 tree result;
1778 /* get rid of unneeded argument */
1779 TREE_CHAIN (parms) = NULL_TREE;
1780 result = build_method_call (instance, name, parms, basetype_path,
1781 (LOOKUP_SPECULATIVELY|flags)
1782 &~LOOKUP_COMPLAIN);
1783 /* If it finds a match, return it. */
1784 if (result)
1785 return build_method_call (instance, name, parms, basetype_path, flags);
1786 /* If it doesn't work, two argument delete must work */
1787 TREE_CHAIN (parms) = save_last;
1788 }
1789 /* We already know whether it's needed or not for vec delete. */
1790 else if (name == ansi_opname[(int) VEC_DELETE_EXPR]
1791 && TYPE_LANG_SPECIFIC (TREE_TYPE (instance))
1792 && ! TYPE_VEC_DELETE_TAKES_SIZE (TREE_TYPE (instance)))
1793 TREE_CHAIN (parms) = NULL_TREE;
1794
1795 if (TREE_CODE (name) == BIT_NOT_EXPR)
1796 {
1797 flags |= LOOKUP_DESTRUCTOR;
1798 name = TREE_OPERAND (name, 0);
1799 if (parms)
1800 error ("destructors take no parameters");
1801 basetype = TREE_TYPE (instance);
1802 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1803 basetype = TREE_TYPE (basetype);
1804 if (! (name == basetype
1805 || (IS_AGGR_TYPE (basetype)
1806 && name == constructor_name (basetype))
1807 || basetype == get_type_value (name)))
1808 {
1809 cp_error ("destructor name `~%D' does not match type `%T' of expression",
1810 name, basetype);
1811 return cp_convert (void_type_node, instance);
1812 }
1813
1814 if (! TYPE_HAS_DESTRUCTOR (basetype))
1815 return cp_convert (void_type_node, instance);
1816 instance = default_conversion (instance);
1817 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
1818 return build_delete (build_pointer_type (basetype),
1819 instance_ptr, integer_two_node,
1820 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
1821 }
1822
1823 if (flag_ansi_overloading)
1824 return build_new_method_call (instance, name, parms, basetype_path, flags);
1825
1826 {
1827 char *xref_name;
1828
1829 /* Initialize name for error reporting. */
1830 if (IDENTIFIER_OPNAME_P (name) && ! IDENTIFIER_TYPENAME_P (name))
1831 {
1832 char *p = operator_name_string (name);
1833 xref_name = (char *)alloca (strlen (p) + 10);
1834 sprintf (xref_name, "operator %s", p);
1835 }
1836 else if (TREE_CODE (name) == SCOPE_REF)
1837 xref_name = IDENTIFIER_POINTER (TREE_OPERAND (name, 1));
1838 else
1839 xref_name = IDENTIFIER_POINTER (name);
1840
1841 GNU_xref_call (current_function_decl, xref_name);
1842 }
1843
1844 if (instance == NULL_TREE)
1845 {
1846 basetype = NULL_TREE;
1847 /* Check cases where this is really a call to raise
1848 an exception. */
1849 if (current_class_type && TREE_CODE (name) == IDENTIFIER_NODE)
1850 {
1851 basetype = purpose_member (name, CLASSTYPE_TAGS (current_class_type));
1852 if (basetype)
1853 basetype = TREE_VALUE (basetype);
1854 }
1855 else if (TREE_CODE (name) == SCOPE_REF
1856 && TREE_CODE (TREE_OPERAND (name, 0)) == IDENTIFIER_NODE)
1857 {
1858 if (! is_aggr_typedef (TREE_OPERAND (name, 0), 1))
1859 return error_mark_node;
1860 basetype = purpose_member (TREE_OPERAND (name, 1),
1861 CLASSTYPE_TAGS (IDENTIFIER_TYPE_VALUE (TREE_OPERAND (name, 0))));
1862 if (basetype)
1863 basetype = TREE_VALUE (basetype);
1864 }
1865
1866 if (basetype != NULL_TREE)
1867 ;
1868 /* call to a constructor... */
1869 else if (basetype_path)
1870 {
1871 basetype = BINFO_TYPE (basetype_path);
1872 if (name == TYPE_IDENTIFIER (basetype))
1873 name = ctor_identifier;
1874 }
1875 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
1876 {
1877 basetype = IDENTIFIER_TYPE_VALUE (name);
1878 name = ctor_identifier;
1879 }
1880 else
1881 {
1882 tree typedef_name = lookup_name (name, 1);
1883 if (typedef_name && TREE_CODE (typedef_name) == TYPE_DECL)
1884 {
1885 /* Canonicalize the typedef name. */
1886 basetype = TREE_TYPE (typedef_name);
1887 name = ctor_identifier;
1888 }
1889 else
1890 {
1891 cp_error ("no constructor named `%T' in scope",
1892 name);
1893 return error_mark_node;
1894 }
1895 }
1896
1897 if (! IS_AGGR_TYPE (basetype))
1898 {
1899 non_aggr_error:
1900 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
1901 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
1902 name, instance, basetype);
1903
1904 return error_mark_node;
1905 }
1906 }
1907 else if (instance == current_class_ref || instance == current_class_ptr)
1908 {
1909 /* When doing initialization, we side-effect the TREE_TYPE of
1910 current_class_ref, hence we cannot set up BASETYPE from CURRENT_CLASS_TYPE. */
1911 basetype = TREE_TYPE (current_class_ref);
1912
1913 /* Anything manifestly `this' in constructors and destructors
1914 has a known type, so virtual function tables are not needed. */
1915 if (TYPE_VIRTUAL_P (basetype)
1916 && !(flags & LOOKUP_NONVIRTUAL))
1917 need_vtbl = (dtor_label || ctor_label)
1918 ? unneeded : maybe_needed;
1919
1920 /* If `this' is a signature pointer and `name' is not a constructor,
1921 we are calling a signature member function. In that case, set the
1922 `basetype' to the signature type and dereference the `optr' field. */
1923 if (IS_SIGNATURE_POINTER (basetype)
1924 && TYPE_IDENTIFIER (basetype) != name)
1925 {
1926 basetype = SIGNATURE_TYPE (basetype);
1927 instance_ptr = instance;
1928 basetype_path = TYPE_BINFO (basetype);
1929 }
1930 else
1931 {
1932 instance = current_class_ref;
1933 instance_ptr = current_class_ptr;
1934 basetype_path = TYPE_BINFO (current_class_type);
1935 }
1936 result = build_field_call (basetype_path, instance_ptr, name, parms);
1937
1938 if (result)
1939 return result;
1940 }
1941 else if (TREE_CODE (instance) == RESULT_DECL)
1942 {
1943 basetype = TREE_TYPE (instance);
1944 /* Should we ever have to make a virtual function reference
1945 from a RESULT_DECL, know that it must be of fixed type
1946 within the scope of this function. */
1947 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
1948 need_vtbl = maybe_needed;
1949 instance_ptr = build1 (ADDR_EXPR, build_pointer_type (basetype), instance);
1950 }
1951 else
1952 {
1953 /* The MAIN_VARIANT of the type that `instance_ptr' winds up being. */
1954 tree inst_ptr_basetype;
1955
1956 static_call_context
1957 = (TREE_CODE (instance) == INDIRECT_REF
1958 && TREE_CODE (TREE_OPERAND (instance, 0)) == NOP_EXPR
1959 && TREE_OPERAND (TREE_OPERAND (instance, 0), 0) == error_mark_node);
1960
1961 if (TREE_CODE (instance) == OFFSET_REF)
1962 instance = resolve_offset_ref (instance);
1963
1964 /* the base type of an instance variable is pointer to class */
1965 basetype = TREE_TYPE (instance);
1966
1967 if (TREE_CODE (basetype) == REFERENCE_TYPE)
1968 {
1969 basetype = TREE_TYPE (basetype);
1970 if (! IS_AGGR_TYPE (basetype))
1971 goto non_aggr_error;
1972 /* Call to convert not needed because we are remaining
1973 within the same type. */
1974 instance_ptr = build1 (NOP_EXPR, build_pointer_type (basetype),
1975 instance);
1976 inst_ptr_basetype = TYPE_MAIN_VARIANT (basetype);
1977 }
1978 else
1979 {
1980 if (! IS_AGGR_TYPE (basetype)
1981 && ! (TYPE_LANG_SPECIFIC (basetype)
1982 && (IS_SIGNATURE_POINTER (basetype)
1983 || IS_SIGNATURE_REFERENCE (basetype))))
1984 goto non_aggr_error;
1985
1986 /* If `instance' is a signature pointer/reference and `name' is
1987 not a constructor, we are calling a signature member function.
1988 In that case set the `basetype' to the signature type. */
1989 if ((IS_SIGNATURE_POINTER (basetype)
1990 || IS_SIGNATURE_REFERENCE (basetype))
1991 && TYPE_IDENTIFIER (basetype) != name)
1992 basetype = SIGNATURE_TYPE (basetype);
1993
1994 basetype = complete_type (basetype);
1995
1996 if ((IS_SIGNATURE (basetype)
1997 && (instance_ptr = instance))
1998 || (lvalue_p (instance)
1999 && (instance_ptr = build_unary_op (ADDR_EXPR, instance, 0)))
2000 || (instance_ptr = unary_complex_lvalue (ADDR_EXPR, instance)))
2001 {
2002 if (instance_ptr == error_mark_node)
2003 return error_mark_node;
2004 }
2005 else if (TREE_CODE (instance) == NOP_EXPR
2006 || TREE_CODE (instance) == CONSTRUCTOR)
2007 {
2008 /* A cast is not an lvalue. Initialize a fresh temp
2009 with the value we are casting from, and proceed with
2010 that temporary. We can't cast to a reference type,
2011 so that simplifies the initialization to something
2012 we can manage. */
2013 tree temp = get_temp_name (TREE_TYPE (instance), 0);
2014 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
2015 expand_aggr_init (temp, instance, 0, flags);
2016 else
2017 {
2018 store_init_value (temp, instance);
2019 expand_decl_init (temp);
2020 }
2021 instance = temp;
2022 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
2023 }
2024 else
2025 {
2026 if (TREE_CODE (instance) != CALL_EXPR)
2027 my_friendly_abort (125);
2028 if (TYPE_NEEDS_CONSTRUCTING (basetype))
2029 instance = build_cplus_new (basetype, instance);
2030 else
2031 {
2032 instance = get_temp_name (basetype, 0);
2033 TREE_ADDRESSABLE (instance) = 1;
2034 }
2035 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
2036 }
2037 /* @@ Should we call comp_target_types here? */
2038 if (IS_SIGNATURE (basetype))
2039 inst_ptr_basetype = basetype;
2040 else
2041 inst_ptr_basetype = TREE_TYPE (TREE_TYPE (instance_ptr));
2042 if (TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (inst_ptr_basetype))
2043 basetype = inst_ptr_basetype;
2044 else
2045 {
2046 instance_ptr = cp_convert (build_pointer_type (basetype), instance_ptr);
2047 if (instance_ptr == error_mark_node)
2048 return error_mark_node;
2049 }
2050 }
2051
2052 /* After converting `instance_ptr' above, `inst_ptr_basetype' was
2053 not updated, so we use `basetype' instead. */
2054 if (basetype_path == NULL_TREE
2055 && IS_SIGNATURE (basetype))
2056 basetype_path = TYPE_BINFO (basetype);
2057 else if (basetype_path == NULL_TREE
2058 || (BINFO_TYPE (basetype_path)
2059 != TYPE_MAIN_VARIANT (inst_ptr_basetype)))
2060 basetype_path = TYPE_BINFO (inst_ptr_basetype);
2061
2062 result = build_field_call (basetype_path, instance_ptr, name, parms);
2063 if (result)
2064 return result;
2065
2066 if (!(flags & LOOKUP_NONVIRTUAL) && TYPE_VIRTUAL_P (basetype))
2067 {
2068 if (TREE_SIDE_EFFECTS (instance_ptr))
2069 {
2070 /* This action is needed because the instance is needed
2071 for providing the base of the virtual function table.
2072 Without using a SAVE_EXPR, the function we are building
2073 may be called twice, or side effects on the instance
2074 variable (such as a post-increment), may happen twice. */
2075 instance_ptr = save_expr (instance_ptr);
2076 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2077 }
2078 else if (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE)
2079 {
2080 /* This happens when called for operator new (). */
2081 instance = build_indirect_ref (instance, NULL_PTR);
2082 }
2083
2084 need_vtbl = maybe_needed;
2085 }
2086 }
2087
2088 if (save_name == ctor_identifier)
2089 save_name = TYPE_IDENTIFIER (basetype);
2090
2091 if (TYPE_SIZE (complete_type (basetype)) == 0)
2092 {
2093 /* This is worth complaining about, I think. */
2094 cp_error ("cannot lookup method in incomplete type `%T'", basetype);
2095 return error_mark_node;
2096 }
2097
2098 save_basetype = TYPE_MAIN_VARIANT (basetype);
2099
2100 parmtypes = default_parm_conversions (parms, &last);
2101 if (parmtypes == error_mark_node)
2102 {
2103 return error_mark_node;
2104 }
2105
2106 if (instance && IS_SIGNATURE (basetype))
2107 {
2108 /* @@ Should this be the constp/volatilep flags for the optr field
2109 of the signature pointer? */
2110 constp = TYPE_READONLY (basetype);
2111 volatilep = TYPE_VOLATILE (basetype);
2112 parms = tree_cons (NULL_TREE, instance_ptr, parms);
2113 }
2114 else if (instance)
2115 {
2116 /* TREE_READONLY (instance) fails for references. */
2117 constp = TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr)));
2118 volatilep = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr)));
2119 parms = tree_cons (NULL_TREE, instance_ptr, parms);
2120 }
2121 else
2122 {
2123 /* Raw constructors are always in charge. */
2124 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2125 && ! (flags & LOOKUP_HAS_IN_CHARGE))
2126 {
2127 flags |= LOOKUP_HAS_IN_CHARGE;
2128 parms = tree_cons (NULL_TREE, integer_one_node, parms);
2129 parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes);
2130 }
2131
2132 constp = 0;
2133 volatilep = 0;
2134 instance_ptr = build_int_2 (0, 0);
2135 TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
2136 parms = tree_cons (NULL_TREE, instance_ptr, parms);
2137 }
2138
2139 parmtypes = tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes);
2140
2141 if (last == NULL_TREE)
2142 last = parmtypes;
2143
2144 /* Look up function name in the structure type definition. */
2145
2146 /* FIXME Axe most of this now? */
2147 if ((IDENTIFIER_HAS_TYPE_VALUE (name)
2148 && ! IDENTIFIER_OPNAME_P (name)
2149 && IS_AGGR_TYPE (IDENTIFIER_TYPE_VALUE (name)))
2150 || name == constructor_name (basetype)
2151 || name == ctor_identifier)
2152 {
2153 tree tmp = NULL_TREE;
2154 if (IDENTIFIER_TYPE_VALUE (name) == basetype
2155 || name == constructor_name (basetype)
2156 || name == ctor_identifier)
2157 tmp = TYPE_BINFO (basetype);
2158 else
2159 tmp = get_binfo (IDENTIFIER_TYPE_VALUE (name), basetype, 0);
2160
2161 if (tmp != NULL_TREE)
2162 {
2163 name_kind = "constructor";
2164
2165 if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)
2166 && ! (flags & LOOKUP_HAS_IN_CHARGE))
2167 {
2168 /* Constructors called for initialization
2169 only are never in charge. */
2170 tree tmplist;
2171
2172 flags |= LOOKUP_HAS_IN_CHARGE;
2173 tmplist = tree_cons (NULL_TREE, integer_zero_node,
2174 TREE_CHAIN (parms));
2175 TREE_CHAIN (parms) = tmplist;
2176 tmplist = tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
2177 TREE_CHAIN (parmtypes) = tmplist;
2178 }
2179 basetype = BINFO_TYPE (tmp);
2180 }
2181 else
2182 name_kind = "method";
2183 }
2184 else
2185 name_kind = "method";
2186
2187 if (basetype_path == NULL_TREE
2188 || BINFO_TYPE (basetype_path) != TYPE_MAIN_VARIANT (basetype))
2189 basetype_path = TYPE_BINFO (basetype);
2190 result = lookup_fnfields (basetype_path, name,
2191 (flags & LOOKUP_COMPLAIN));
2192 if (result == error_mark_node)
2193 return error_mark_node;
2194
2195 for (pass = 0; pass < 2; pass++)
2196 {
2197 struct candidate *candidates;
2198 struct candidate *cp;
2199 int len;
2200 unsigned best = 1;
2201
2202 baselink = result;
2203
2204 if (pass > 0)
2205 {
2206 candidates
2207 = (struct candidate *) alloca ((ever_seen+1)
2208 * sizeof (struct candidate));
2209 bzero ((char *) candidates, (ever_seen + 1) * sizeof (struct candidate));
2210 cp = candidates;
2211 len = list_length (parms);
2212 ever_seen = 0;
2213
2214 /* First see if a global function has a shot at it. */
2215 if (flags & LOOKUP_GLOBAL)
2216 {
2217 tree friend_parms;
2218 tree parm = instance_ptr;
2219
2220 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE)
2221 parm = convert_from_reference (parm);
2222 else if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE)
2223 parm = build_indirect_ref (parm, "friendifying parms (compiler error)");
2224 else
2225 my_friendly_abort (167);
2226
2227 friend_parms = tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
2228
2229 cp->h_len = len;
2230 cp->harshness = (struct harshness_code *)
2231 alloca ((len + 1) * sizeof (struct harshness_code));
2232
2233 result = build_overload_call_real (name, friend_parms, 0, cp, 1);
2234
2235 /* If it turns out to be the one we were actually looking for
2236 (it was probably a friend function), the return the
2237 good result. */
2238 if (TREE_CODE (result) == CALL_EXPR)
2239 return result;
2240
2241 while ((cp->h.code & EVIL_CODE) == 0)
2242 {
2243 /* non-standard uses: set the field to 0 to indicate
2244 we are using a non-member function. */
2245 cp->u.field = 0;
2246 if (cp->harshness[len].distance == 0
2247 && cp->h.code < best)
2248 best = cp->h.code;
2249 cp += 1;
2250 }
2251 }
2252 }
2253
2254 if (baselink)
2255 {
2256 /* We have a hit (of sorts). If the parameter list is
2257 "error_mark_node", or some variant thereof, it won't
2258 match any methods. Since we have verified that the is
2259 some method vaguely matching this one (in name at least),
2260 silently return.
2261
2262 Don't stop for friends, however. */
2263 basetype_path = TREE_PURPOSE (baselink);
2264
2265 function = TREE_VALUE (baselink);
2266 if (TREE_CODE (basetype_path) == TREE_LIST)
2267 basetype_path = TREE_VALUE (basetype_path);
2268 basetype = BINFO_TYPE (basetype_path);
2269
2270 for (; function; function = DECL_CHAIN (function))
2271 {
2272 #ifdef GATHER_STATISTICS
2273 n_inner_fields_searched++;
2274 #endif
2275 ever_seen++;
2276 if (pass > 0)
2277 found_fns = tree_cons (NULL_TREE, function, found_fns);
2278
2279 /* Not looking for friends here. */
2280 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE
2281 && ! DECL_STATIC_FUNCTION_P (function))
2282 continue;
2283
2284 if (pass > 0)
2285 {
2286 tree these_parms = parms;
2287
2288 #ifdef GATHER_STATISTICS
2289 n_inner_fields_searched++;
2290 #endif
2291 cp->h_len = len;
2292 cp->harshness = (struct harshness_code *)
2293 alloca ((len + 1) * sizeof (struct harshness_code));
2294
2295 if (DECL_STATIC_FUNCTION_P (function))
2296 these_parms = TREE_CHAIN (these_parms);
2297 compute_conversion_costs (function, these_parms, cp, len);
2298
2299 if ((cp->h.code & EVIL_CODE) == 0)
2300 {
2301 cp->u.field = function;
2302 cp->function = function;
2303 cp->basetypes = basetype_path;
2304
2305 /* Don't allow non-converting constructors to convert. */
2306 if (flags & LOOKUP_ONLYCONVERTING
2307 && DECL_LANG_SPECIFIC (function)
2308 && DECL_NONCONVERTING_P (function))
2309 continue;
2310
2311 /* No "two-level" conversions. */
2312 if (flags & LOOKUP_NO_CONVERSION
2313 && (cp->h.code & USER_CODE))
2314 continue;
2315
2316 cp++;
2317 }
2318 }
2319 }
2320 }
2321
2322 if (pass == 0)
2323 {
2324 tree igv = lookup_name_nonclass (name);
2325
2326 /* No exact match could be found. Now try to find match
2327 using default conversions. */
2328 if ((flags & LOOKUP_GLOBAL) && igv)
2329 {
2330 if (TREE_CODE (igv) == FUNCTION_DECL)
2331 ever_seen += 1;
2332 else if (TREE_CODE (igv) == TREE_LIST)
2333 ever_seen += count_functions (igv);
2334 }
2335
2336 if (ever_seen == 0)
2337 {
2338 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2339 == LOOKUP_SPECULATIVELY)
2340 return NULL_TREE;
2341
2342 TREE_CHAIN (last) = void_list_node;
2343 if (flags & LOOKUP_GLOBAL)
2344 cp_error ("no global or member function `%D(%A)' defined",
2345 save_name, parmtypes);
2346 else
2347 cp_error ("no member function `%T::%D(%A)' defined",
2348 save_basetype, save_name, TREE_CHAIN (parmtypes));
2349 return error_mark_node;
2350 }
2351 continue;
2352 }
2353
2354 if (cp - candidates != 0)
2355 {
2356 /* Rank from worst to best. Then cp will point to best one.
2357 Private fields have their bits flipped. For unsigned
2358 numbers, this should make them look very large.
2359 If the best alternate has a (signed) negative value,
2360 then all we ever saw were private members. */
2361 if (cp - candidates > 1)
2362 {
2363 int n_candidates = cp - candidates;
2364 extern int warn_synth;
2365 TREE_VALUE (parms) = instance_ptr;
2366 cp = ideal_candidate (candidates, n_candidates, len);
2367 if (cp == (struct candidate *)0)
2368 {
2369 if (flags & LOOKUP_COMPLAIN)
2370 {
2371 TREE_CHAIN (last) = void_list_node;
2372 cp_error ("call of overloaded %s `%D(%A)' is ambiguous",
2373 name_kind, save_name, TREE_CHAIN (parmtypes));
2374 print_n_candidates (candidates, n_candidates);
2375 }
2376 return error_mark_node;
2377 }
2378 if (cp->h.code & EVIL_CODE)
2379 return error_mark_node;
2380 if (warn_synth
2381 && DECL_NAME (cp->function) == ansi_opname[MODIFY_EXPR]
2382 && DECL_ARTIFICIAL (cp->function)
2383 && n_candidates == 2)
2384 {
2385 cp_warning ("using synthesized `%#D' for copy assignment",
2386 cp->function);
2387 cp_warning_at (" where cfront would use `%#D'",
2388 candidates->function);
2389 }
2390 }
2391 else if (cp[-1].h.code & EVIL_CODE)
2392 {
2393 if (flags & LOOKUP_COMPLAIN)
2394 cp_error ("ambiguous type conversion requested for %s `%D'",
2395 name_kind, save_name);
2396 return error_mark_node;
2397 }
2398 else
2399 cp--;
2400
2401 /* The global function was the best, so use it. */
2402 if (cp->u.field == 0)
2403 {
2404 /* We must convert the instance pointer into a reference type.
2405 Global overloaded functions can only either take
2406 aggregate objects (which come for free from references)
2407 or reference data types anyway. */
2408 TREE_VALUE (parms) = copy_node (instance_ptr);
2409 TREE_TYPE (TREE_VALUE (parms)) = build_reference_type (TREE_TYPE (TREE_TYPE (instance_ptr)));
2410 return build_function_call (cp->function, parms);
2411 }
2412
2413 function = cp->function;
2414 basetype_path = cp->basetypes;
2415 if (! DECL_STATIC_FUNCTION_P (function))
2416 TREE_VALUE (parms) = cp->arg;
2417 goto found_and_maybe_warn;
2418 }
2419
2420 if (flags & (LOOKUP_COMPLAIN|LOOKUP_SPECULATIVELY))
2421 {
2422 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2423 == LOOKUP_SPECULATIVELY)
2424 return NULL_TREE;
2425
2426 if (DECL_STATIC_FUNCTION_P (cp->function))
2427 parms = TREE_CHAIN (parms);
2428 if (ever_seen)
2429 {
2430 if (flags & LOOKUP_SPECULATIVELY)
2431 return NULL_TREE;
2432 if (static_call_context
2433 && TREE_CODE (TREE_TYPE (cp->function)) == METHOD_TYPE)
2434 cp_error ("object missing in call to `%D'", cp->function);
2435 else if (ever_seen > 1)
2436 {
2437 TREE_CHAIN (last) = void_list_node;
2438 cp_error ("no matching function for call to `%T::%D (%A)%V'",
2439 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (instance_ptr))),
2440 save_name, TREE_CHAIN (parmtypes),
2441 TREE_TYPE (TREE_TYPE (instance_ptr)));
2442 TREE_CHAIN (last) = NULL_TREE;
2443 print_candidates (found_fns);
2444 }
2445 else
2446 report_type_mismatch (cp, parms, name_kind);
2447 return error_mark_node;
2448 }
2449
2450 if ((flags & (LOOKUP_SPECULATIVELY|LOOKUP_COMPLAIN))
2451 == LOOKUP_COMPLAIN)
2452 {
2453 cp_error ("%T has no method named %D", save_basetype, save_name);
2454 return error_mark_node;
2455 }
2456 return NULL_TREE;
2457 }
2458 continue;
2459
2460 found_and_maybe_warn:
2461 if ((cp->harshness[0].code & CONST_CODE)
2462 /* 12.1p2: Constructors can be called for const objects. */
2463 && ! DECL_CONSTRUCTOR_P (cp->function))
2464 {
2465 if (flags & LOOKUP_COMPLAIN)
2466 {
2467 cp_error_at ("non-const member function `%D'", cp->function);
2468 error ("called for const object at this point in file");
2469 }
2470 /* Not good enough for a match. */
2471 else
2472 return error_mark_node;
2473 }
2474 goto found;
2475 }
2476 /* Silently return error_mark_node. */
2477 return error_mark_node;
2478
2479 found:
2480 if (flags & LOOKUP_PROTECT)
2481 access = compute_access (basetype_path, function);
2482
2483 if (access == access_private_node)
2484 {
2485 if (flags & LOOKUP_COMPLAIN)
2486 {
2487 cp_error_at ("%s `%+#D' is %s", name_kind, function,
2488 TREE_PRIVATE (function) ? "private"
2489 : "from private base class");
2490 error ("within this context");
2491 }
2492 return error_mark_node;
2493 }
2494 else if (access == access_protected_node)
2495 {
2496 if (flags & LOOKUP_COMPLAIN)
2497 {
2498 cp_error_at ("%s `%+#D' %s", name_kind, function,
2499 TREE_PROTECTED (function) ? "is protected"
2500 : "has protected accessibility");
2501 error ("within this context");
2502 }
2503 return error_mark_node;
2504 }
2505
2506 /* From here on down, BASETYPE is the type that INSTANCE_PTR's
2507 type (if it exists) is a pointer to. */
2508
2509 if (DECL_ABSTRACT_VIRTUAL_P (function)
2510 && instance == current_class_ref
2511 && DECL_CONSTRUCTOR_P (current_function_decl)
2512 && ! (flags & LOOKUP_NONVIRTUAL)
2513 && value_member (function, get_abstract_virtuals (basetype)))
2514 cp_error ("abstract virtual `%#D' called from constructor", function);
2515
2516 if (IS_SIGNATURE (basetype))
2517 {
2518 if (static_call_context)
2519 {
2520 cp_error ("cannot call signature member function `%T::%D' without signature pointer/reference",
2521 basetype, save_name);
2522 return error_mark_node;
2523 }
2524 return build_signature_method_call (function, parms);
2525 }
2526
2527 function = DECL_MAIN_VARIANT (function);
2528 mark_used (function);
2529
2530 fntype = TREE_TYPE (function);
2531 if (TREE_CODE (fntype) == POINTER_TYPE)
2532 fntype = TREE_TYPE (fntype);
2533 basetype = DECL_CLASS_CONTEXT (function);
2534
2535 /* If we are referencing a virtual function from an object
2536 of effectively static type, then there is no need
2537 to go through the virtual function table. */
2538 if (need_vtbl == maybe_needed)
2539 {
2540 int fixed_type = resolves_to_fixed_type_p (instance, 0);
2541
2542 if (all_virtual == 1
2543 && DECL_VINDEX (function)
2544 && may_be_remote (basetype))
2545 need_vtbl = needed;
2546 else if (DECL_VINDEX (function))
2547 need_vtbl = fixed_type ? unneeded : needed;
2548 else
2549 need_vtbl = not_needed;
2550 }
2551
2552 if (TREE_CODE (fntype) == METHOD_TYPE && static_call_context
2553 && !DECL_CONSTRUCTOR_P (function))
2554 {
2555 /* Let's be nasty to the user now, and give reasonable
2556 error messages. */
2557 instance_ptr = current_class_ptr;
2558 if (instance_ptr)
2559 {
2560 if (basetype != current_class_type)
2561 {
2562 if (basetype == error_mark_node)
2563 return error_mark_node;
2564 else
2565 {
2566 if (orig_basetype != NULL_TREE)
2567 error_not_base_type (orig_basetype, current_class_type);
2568 else
2569 error_not_base_type (function, current_class_type);
2570 return error_mark_node;
2571 }
2572 }
2573 }
2574 /* Only allow a static member function to call another static member
2575 function. */
2576 else if (DECL_LANG_SPECIFIC (function)
2577 && !DECL_STATIC_FUNCTION_P (function))
2578 {
2579 cp_error ("cannot call member function `%D' without object",
2580 function);
2581 return error_mark_node;
2582 }
2583 }
2584
2585 value_type = TREE_TYPE (fntype) ? TREE_TYPE (fntype) : void_type_node;
2586
2587 if (TYPE_SIZE (complete_type (value_type)) == 0)
2588 {
2589 if (flags & LOOKUP_COMPLAIN)
2590 incomplete_type_error (0, value_type);
2591 return error_mark_node;
2592 }
2593
2594 if (DECL_STATIC_FUNCTION_P (function))
2595 parms = convert_arguments (NULL_TREE, TYPE_ARG_TYPES (fntype),
2596 TREE_CHAIN (parms), function, LOOKUP_NORMAL);
2597 else if (need_vtbl == unneeded)
2598 {
2599 int sub_flags = DECL_CONSTRUCTOR_P (function) ? flags : LOOKUP_NORMAL;
2600 basetype = TREE_TYPE (instance);
2601 if (TYPE_METHOD_BASETYPE (TREE_TYPE (function))
2602 != TYPE_MAIN_VARIANT (basetype))
2603 {
2604 basetype = DECL_CLASS_CONTEXT (function);
2605 instance_ptr = convert_pointer_to (basetype, instance_ptr);
2606 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2607 }
2608 parms = tree_cons (NULL_TREE, instance_ptr,
2609 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, sub_flags));
2610 }
2611 else
2612 {
2613 if ((flags & LOOKUP_NONVIRTUAL) == 0)
2614 basetype = DECL_CONTEXT (function);
2615
2616 /* First parm could be integer_zerop with casts like
2617 ((Object*)0)->Object::IsA() */
2618 if (!integer_zerop (TREE_VALUE (parms)))
2619 {
2620 /* Since we can't have inheritance with a union, doing get_binfo
2621 on it won't work. We do all the convert_pointer_to_real
2622 stuff to handle MI correctly...for unions, that's not
2623 an issue, so we must short-circuit that extra work here. */
2624 tree tmp = TREE_TYPE (TREE_TYPE (TREE_VALUE (parms)));
2625 if (tmp != NULL_TREE && TREE_CODE (tmp) == UNION_TYPE)
2626 instance_ptr = TREE_VALUE (parms);
2627 else
2628 {
2629 tree binfo = get_binfo (basetype,
2630 TREE_TYPE (TREE_TYPE (TREE_VALUE (parms))),
2631 0);
2632 instance_ptr = convert_pointer_to_real (binfo, TREE_VALUE (parms));
2633 }
2634 instance_ptr
2635 = convert_pointer_to (build_type_variant (basetype,
2636 constp, volatilep),
2637 instance_ptr);
2638
2639 if (TREE_CODE (instance_ptr) == COND_EXPR)
2640 {
2641 instance_ptr = save_expr (instance_ptr);
2642 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2643 }
2644 else if (TREE_CODE (instance_ptr) == NOP_EXPR
2645 && TREE_CODE (TREE_OPERAND (instance_ptr, 0)) == ADDR_EXPR
2646 && TREE_OPERAND (TREE_OPERAND (instance_ptr, 0), 0) == instance)
2647 ;
2648 /* The call to `convert_pointer_to' may return error_mark_node. */
2649 else if (instance_ptr == error_mark_node)
2650 return instance_ptr;
2651 else if (instance == NULL_TREE
2652 || TREE_CODE (instance) != INDIRECT_REF
2653 || TREE_OPERAND (instance, 0) != instance_ptr)
2654 instance = build_indirect_ref (instance_ptr, NULL_PTR);
2655 }
2656 parms = tree_cons (NULL_TREE, instance_ptr,
2657 convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, LOOKUP_NORMAL));
2658 }
2659
2660 if (parms == error_mark_node
2661 || (parms && TREE_CHAIN (parms) == error_mark_node))
2662 return error_mark_node;
2663
2664 if (need_vtbl == needed)
2665 {
2666 function = build_vfn_ref (&TREE_VALUE (parms), instance,
2667 DECL_VINDEX (function));
2668 TREE_TYPE (function) = build_pointer_type (fntype);
2669 }
2670
2671 if (TREE_CODE (function) == FUNCTION_DECL)
2672 GNU_xref_call (current_function_decl,
2673 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (function)));
2674
2675 result = build_call (function, value_type, parms);
2676 if (IS_AGGR_TYPE (value_type))
2677 result = build_cplus_new (value_type, result);
2678 result = convert_from_reference (result);
2679 return result;
2680 }
2681
2682 /* Similar to `build_method_call', but for overloaded non-member functions.
2683 The name of this function comes through NAME. The name depends
2684 on PARMS.
2685
2686 Note that this function must handle simple `C' promotions,
2687 as well as variable numbers of arguments (...), and
2688 default arguments to boot.
2689
2690 If the overloading is successful, we return a tree node which
2691 contains the call to the function.
2692
2693 If overloading produces candidates which are probable, but not definite,
2694 we hold these candidates. If FINAL_CP is non-zero, then we are free
2695 to assume that final_cp points to enough storage for all candidates that
2696 this function might generate. The `harshness' array is preallocated for
2697 the first candidate, but not for subsequent ones.
2698
2699 Note that the DECL_RTL of FUNCTION must be made to agree with this
2700 function's new name. */
2701
2702 tree
2703 build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
2704 tree fnname, parms;
2705 int flags;
2706 struct candidate *final_cp;
2707 int require_complete;
2708 {
2709 /* must check for overloading here */
2710 tree functions, function;
2711 tree parmtypes, last;
2712 register tree outer;
2713 int length;
2714 int parmlength = list_length (parms);
2715
2716 struct candidate *candidates, *cp;
2717
2718 if (final_cp)
2719 {
2720 final_cp[0].h.code = 0;
2721 final_cp[0].h.distance = 0;
2722 final_cp[0].function = 0;
2723 /* end marker. */
2724 final_cp[1].h.code = EVIL_CODE;
2725 }
2726
2727 parmtypes = default_parm_conversions (parms, &last);
2728 if (parmtypes == error_mark_node)
2729 {
2730 if (final_cp)
2731 final_cp->h.code = EVIL_CODE;
2732 return error_mark_node;
2733 }
2734
2735 if (last)
2736 TREE_CHAIN (last) = void_list_node;
2737 else
2738 parmtypes = void_list_node;
2739
2740 if (is_overloaded_fn (fnname))
2741 {
2742 functions = fnname;
2743 if (TREE_CODE (fnname) == TREE_LIST)
2744 fnname = TREE_PURPOSE (functions);
2745 else if (TREE_CODE (fnname) == FUNCTION_DECL)
2746 fnname = DECL_NAME (functions);
2747 }
2748 else
2749 functions = lookup_name_nonclass (fnname);
2750
2751 if (functions == NULL_TREE)
2752 {
2753 if (flags & LOOKUP_SPECULATIVELY)
2754 return NULL_TREE;
2755 if (flags & LOOKUP_COMPLAIN)
2756 error ("only member functions apply");
2757 if (final_cp)
2758 final_cp->h.code = EVIL_CODE;
2759 return error_mark_node;
2760 }
2761
2762 if (TREE_CODE (functions) == FUNCTION_DECL && ! IDENTIFIER_OPNAME_P (fnname))
2763 {
2764 functions = DECL_MAIN_VARIANT (functions);
2765 if (final_cp)
2766 {
2767 /* We are just curious whether this is a viable alternative or
2768 not. */
2769 compute_conversion_costs (functions, parms, final_cp, parmlength);
2770 return functions;
2771 }
2772 else
2773 return build_function_call_real (functions, parms, 1, flags);
2774 }
2775
2776 if (TREE_CODE (functions) == TREE_LIST
2777 && TREE_VALUE (functions) == NULL_TREE)
2778 {
2779 if (flags & LOOKUP_SPECULATIVELY)
2780 return NULL_TREE;
2781
2782 if (flags & LOOKUP_COMPLAIN)
2783 cp_error ("function `%D' declared overloaded, but no instances of that function declared",
2784 TREE_PURPOSE (functions));
2785 if (final_cp)
2786 final_cp->h.code = EVIL_CODE;
2787 return error_mark_node;
2788 }
2789
2790 length = count_functions (functions);
2791
2792 if (final_cp)
2793 candidates = final_cp;
2794 else
2795 {
2796 candidates
2797 = (struct candidate *)alloca ((length+1) * sizeof (struct candidate));
2798 bzero ((char *) candidates, (length + 1) * sizeof (struct candidate));
2799 }
2800
2801 cp = candidates;
2802
2803 my_friendly_assert (is_overloaded_fn (functions), 169);
2804
2805 functions = get_first_fn (functions);
2806
2807 /* OUTER is the list of FUNCTION_DECLS, in a TREE_LIST. */
2808 for (outer = functions; outer; outer = DECL_CHAIN (outer))
2809 {
2810 int template_cost = 0;
2811 function = outer;
2812 if (TREE_CODE (function) != FUNCTION_DECL
2813 && ! (TREE_CODE (function) == TEMPLATE_DECL
2814 && TREE_CODE (DECL_TEMPLATE_RESULT (function)) == FUNCTION_DECL))
2815 {
2816 enum tree_code code = TREE_CODE (function);
2817 if (code == TEMPLATE_DECL)
2818 code = TREE_CODE (DECL_TEMPLATE_RESULT (function));
2819 if (code == CONST_DECL)
2820 cp_error_at
2821 ("enumeral value `%D' conflicts with function of same name",
2822 function);
2823 else if (code == VAR_DECL)
2824 {
2825 if (TREE_STATIC (function))
2826 cp_error_at
2827 ("variable `%D' conflicts with function of same name",
2828 function);
2829 else
2830 cp_error_at
2831 ("constant field `%D' conflicts with function of same name",
2832 function);
2833 }
2834 else if (code == TYPE_DECL)
2835 continue;
2836 else
2837 my_friendly_abort (2);
2838 error ("at this point in file");
2839 continue;
2840 }
2841 if (TREE_CODE (function) == TEMPLATE_DECL)
2842 {
2843 int ntparms = DECL_NTPARMS (function);
2844 tree targs = make_tree_vec (ntparms);
2845 int i;
2846
2847 i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (function),
2848 &TREE_VEC_ELT (targs, 0),
2849 TYPE_ARG_TYPES (TREE_TYPE (function)),
2850 parms, &template_cost, 0, 0);
2851 if (i == 0)
2852 {
2853 function = instantiate_template (function, targs);
2854 if (function == error_mark_node)
2855 return function;
2856 }
2857 }
2858
2859 if (TREE_CODE (function) == TEMPLATE_DECL)
2860 {
2861 /* Unconverted template -- failed match. */
2862 cp->function = function;
2863 cp->u.bad_arg = -4;
2864 cp->h.code = EVIL_CODE;
2865 }
2866 else
2867 {
2868 struct candidate *cp2;
2869
2870 /* Check that this decl is not the same as a function that's in
2871 the list due to some template instantiation. */
2872 cp2 = candidates;
2873 while (cp2 != cp)
2874 if (cp2->function == function)
2875 break;
2876 else
2877 cp2 += 1;
2878 if (cp2->function == function)
2879 continue;
2880
2881 function = DECL_MAIN_VARIANT (function);
2882
2883 /* Can't use alloca here, since result might be
2884 passed to calling function. */
2885 cp->h_len = parmlength;
2886 cp->harshness = (struct harshness_code *)
2887 oballoc ((parmlength + 1) * sizeof (struct harshness_code));
2888
2889 compute_conversion_costs (function, parms, cp, parmlength);
2890
2891 /* Make sure this is clear as well. */
2892 cp->h.int_penalty += template_cost;
2893
2894 if ((cp[0].h.code & EVIL_CODE) == 0)
2895 {
2896 cp[1].h.code = EVIL_CODE;
2897 cp++;
2898 }
2899 }
2900 }
2901
2902 if (cp - candidates)
2903 {
2904 tree rval = error_mark_node;
2905
2906 /* Leave marker. */
2907 cp[0].h.code = EVIL_CODE;
2908 if (cp - candidates > 1)
2909 {
2910 struct candidate *best_cp
2911 = ideal_candidate (candidates, cp - candidates, parmlength);
2912 if (best_cp == (struct candidate *)0)
2913 {
2914 if (flags & LOOKUP_COMPLAIN)
2915 {
2916 cp_error ("call of overloaded `%D' is ambiguous", fnname);
2917 print_n_candidates (candidates, cp - candidates);
2918 }
2919 return error_mark_node;
2920 }
2921 else
2922 rval = best_cp->function;
2923 }
2924 else
2925 {
2926 cp -= 1;
2927 if (cp->h.code & EVIL_CODE)
2928 {
2929 if (flags & LOOKUP_COMPLAIN)
2930 error ("type conversion ambiguous");
2931 }
2932 else
2933 rval = cp->function;
2934 }
2935
2936 if (final_cp)
2937 return rval;
2938
2939 return build_function_call_real (rval, parms, require_complete, flags);
2940 }
2941
2942 if (flags & LOOKUP_SPECULATIVELY)
2943 return NULL_TREE;
2944
2945 if (flags & LOOKUP_COMPLAIN)
2946 report_type_mismatch (cp, parms, "function");
2947
2948 return error_mark_node;
2949 }
2950
2951 /* This requires a complete type on the result of the call. */
2952
2953 tree
2954 build_overload_call (fnname, parms, flags)
2955 tree fnname, parms;
2956 int flags;
2957 {
2958 return build_overload_call_real (fnname, parms, flags, (struct candidate *)0, 1);
2959 }
2960
2961 /* New overloading code. */
2962
2963 struct z_candidate {
2964 tree fn;
2965 tree convs;
2966 tree second_conv;
2967 int viable;
2968 tree basetype_path;
2969 tree template;
2970 struct z_candidate *next;
2971 };
2972
2973 #define IDENTITY_RANK 0
2974 #define EXACT_RANK 1
2975 #define PROMO_RANK 2
2976 #define STD_RANK 3
2977 #define PBOOL_RANK 4
2978 #define USER_RANK 5
2979 #define ELLIPSIS_RANK 6
2980 #define BAD_RANK 7
2981
2982 #define ICS_RANK(NODE) \
2983 (ICS_BAD_FLAG (NODE) ? BAD_RANK \
2984 : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK \
2985 : ICS_USER_FLAG (NODE) ? USER_RANK \
2986 : ICS_STD_RANK (NODE))
2987
2988 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
2989
2990 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
2991 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2992 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
2993 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
2994
2995 #define USER_CONV_FN(NODE) TREE_OPERAND (NODE, 1)
2996
2997 int
2998 null_ptr_cst_p (t)
2999 tree t;
3000 {
3001 if (t == null_node
3002 || integer_zerop (t) && INTEGRAL_TYPE_P (TREE_TYPE (t)))
3003 return 1;
3004 return 0;
3005 }
3006
3007 static tree
3008 build_conv (code, type, from)
3009 enum tree_code code;
3010 tree type, from;
3011 {
3012 tree t = build1 (code, type, from);
3013 int rank = ICS_STD_RANK (from);
3014 switch (code)
3015 {
3016 case PTR_CONV:
3017 case PMEM_CONV:
3018 case BASE_CONV:
3019 case STD_CONV:
3020 if (rank < STD_RANK)
3021 rank = STD_RANK;
3022 break;
3023
3024 case LVALUE_CONV:
3025 case QUAL_CONV:
3026 case RVALUE_CONV:
3027 if (rank < EXACT_RANK)
3028 rank = EXACT_RANK;
3029
3030 default:
3031 break;
3032 }
3033 ICS_STD_RANK (t) = rank;
3034 ICS_USER_FLAG (t) = ICS_USER_FLAG (from);
3035 ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
3036 return t;
3037 }
3038
3039 static tree
3040 non_reference (t)
3041 tree t;
3042 {
3043 if (TREE_CODE (t) == REFERENCE_TYPE)
3044 t = TREE_TYPE (t);
3045 return t;
3046 }
3047
3048 static tree
3049 strip_top_quals (t)
3050 tree t;
3051 {
3052 if (TREE_CODE (t) == ARRAY_TYPE)
3053 return t;
3054 return TYPE_MAIN_VARIANT (t);
3055 }
3056
3057 /* Returns the standard conversion path (see [conv]) from type FROM to type
3058 TO, if any. For proper handling of null pointer constants, you must
3059 also pass the expression EXPR to convert from. */
3060
3061 static tree
3062 standard_conversion (to, from, expr)
3063 tree to, from, expr;
3064 {
3065 enum tree_code fcode, tcode;
3066 tree conv;
3067 int fromref = 0;
3068
3069 if (TREE_CODE (to) == REFERENCE_TYPE)
3070 to = TREE_TYPE (to);
3071 if (TREE_CODE (from) == REFERENCE_TYPE)
3072 {
3073 fromref = 1;
3074 from = TREE_TYPE (from);
3075 }
3076 to = strip_top_quals (to);
3077 from = strip_top_quals (from);
3078
3079 fcode = TREE_CODE (from);
3080 tcode = TREE_CODE (to);
3081
3082 conv = build1 (IDENTITY_CONV, from, expr);
3083
3084 if (fcode == FUNCTION_TYPE)
3085 {
3086 from = build_pointer_type (from);
3087 fcode = TREE_CODE (from);
3088 conv = build_conv (LVALUE_CONV, from, conv);
3089 }
3090 else if (fcode == ARRAY_TYPE)
3091 {
3092 from = build_pointer_type (TREE_TYPE (from));
3093 fcode = TREE_CODE (from);
3094 conv = build_conv (LVALUE_CONV, from, conv);
3095 }
3096 else if (fromref || (expr && real_lvalue_p (expr)))
3097 conv = build_conv (RVALUE_CONV, from, conv);
3098
3099 if (from == to)
3100 return conv;
3101
3102 if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
3103 && expr && null_ptr_cst_p (expr))
3104 {
3105 conv = build_conv (STD_CONV, to, conv);
3106 }
3107 else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
3108 {
3109 enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
3110 enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
3111 tree nconv = NULL_TREE;
3112
3113 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (from)),
3114 TYPE_MAIN_VARIANT (TREE_TYPE (to)), 1))
3115 nconv = conv;
3116 else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
3117 && ufcode != FUNCTION_TYPE)
3118 {
3119 from = build_pointer_type
3120 (cp_build_type_variant (void_type_node,
3121 TYPE_READONLY (TREE_TYPE (from)),
3122 TYPE_VOLATILE (TREE_TYPE (from))));
3123 nconv = build_conv (PTR_CONV, from, conv);
3124 }
3125 else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
3126 {
3127 tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
3128 tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
3129
3130 if (DERIVED_FROM_P (fbase, tbase)
3131 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (from))),
3132 TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (to))),
3133 1)))
3134 {
3135 from = build_offset_type (tbase, TREE_TYPE (TREE_TYPE (from)));
3136 from = build_pointer_type (from);
3137 nconv = build_conv (PMEM_CONV, from, conv);
3138 }
3139 }
3140 else if (IS_AGGR_TYPE (TREE_TYPE (from))
3141 && IS_AGGR_TYPE (TREE_TYPE (to)))
3142 {
3143 if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
3144 {
3145 from = cp_build_type_variant (TREE_TYPE (to),
3146 TYPE_READONLY (TREE_TYPE (from)),
3147 TYPE_VOLATILE (TREE_TYPE (from)));
3148 from = build_pointer_type (from);
3149 nconv = build_conv (PTR_CONV, from, conv);
3150 }
3151 }
3152
3153 if (nconv && comptypes (from, to, 1))
3154 conv = nconv;
3155 else if (nconv && comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
3156 conv = build_conv (QUAL_CONV, to, nconv);
3157 else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
3158 {
3159 conv = build_conv (PTR_CONV, to, conv);
3160 ICS_BAD_FLAG (conv) = 1;
3161 }
3162 else
3163 return 0;
3164
3165 from = to;
3166 }
3167 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
3168 {
3169 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
3170 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
3171 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
3172 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
3173
3174 if (! DERIVED_FROM_P (fbase, tbase)
3175 || ! comptypes (TREE_TYPE (fromfn), TREE_TYPE (tofn), 1)
3176 || ! compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
3177 TREE_CHAIN (TYPE_ARG_TYPES (tofn)), 1)
3178 || TYPE_READONLY (fbase) != TYPE_READONLY (tbase)
3179 || TYPE_VOLATILE (fbase) != TYPE_VOLATILE (tbase))
3180 return 0;
3181
3182 from = cp_build_type_variant (tbase, TYPE_READONLY (fbase),
3183 TYPE_VOLATILE (fbase));
3184 from = build_cplus_method_type (from, TREE_TYPE (fromfn),
3185 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
3186 from = build_ptrmemfunc_type (build_pointer_type (from));
3187 conv = build_conv (PMEM_CONV, from, conv);
3188 }
3189 else if (tcode == BOOLEAN_TYPE)
3190 {
3191 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
3192 || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
3193 return 0;
3194
3195 conv = build_conv (STD_CONV, to, conv);
3196 if (fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)
3197 && ICS_STD_RANK (conv) < PBOOL_RANK)
3198 ICS_STD_RANK (conv) = PBOOL_RANK;
3199 }
3200 /* We don't check for ENUMERAL_TYPE here because there are no standard
3201 conversions to enum type. */
3202 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
3203 || tcode == REAL_TYPE)
3204 {
3205 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
3206 return 0;
3207 conv = build_conv (STD_CONV, to, conv);
3208
3209 /* Give this a better rank if it's a promotion. */
3210 if (to == type_promotes_to (from)
3211 && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
3212 ICS_STD_RANK (conv) = PROMO_RANK;
3213 }
3214 else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3215 && DERIVED_FROM_P (to, from))
3216 conv = build_conv (BASE_CONV, to, conv);
3217 else
3218 return 0;
3219
3220 return conv;
3221 }
3222
3223 /* Returns the conversion path from type FROM to reference type TO for
3224 purposes of reference binding. For lvalue binding, either pass a
3225 reference type to FROM or an lvalue expression to EXPR.
3226
3227 Currently does not distinguish in the generated trees between binding to
3228 an lvalue and a temporary. Should it? */
3229
3230 static tree
3231 reference_binding (rto, rfrom, expr, flags)
3232 tree rto, rfrom, expr;
3233 int flags;
3234 {
3235 tree conv;
3236 int lvalue = 1;
3237 tree to = TREE_TYPE (rto);
3238 tree from = rfrom;
3239 int related;
3240
3241 if (TREE_CODE (from) == REFERENCE_TYPE)
3242 from = TREE_TYPE (from);
3243 else if (! expr || ! real_lvalue_p (expr))
3244 lvalue = 0;
3245
3246 related = (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from)
3247 || (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
3248 && DERIVED_FROM_P (to, from)));
3249
3250 if (lvalue && related
3251 && TYPE_READONLY (to) >= TYPE_READONLY (from)
3252 && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
3253 {
3254 conv = build1 (IDENTITY_CONV, from, expr);
3255
3256 if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
3257 conv = build_conv (REF_BIND, rto, conv);
3258 else
3259 {
3260 conv = build_conv (REF_BIND, rto, conv);
3261 ICS_STD_RANK (conv) = STD_RANK;
3262 }
3263 }
3264 else
3265 conv = NULL_TREE;
3266
3267 if (! conv)
3268 {
3269 conv = standard_conversion (to, rfrom, expr);
3270 if (conv)
3271 {
3272 conv = build_conv (REF_BIND, rto, conv);
3273
3274 /* Bind directly to a base subobject of a class rvalue. Do it
3275 after building the conversion for proper handling of ICS_RANK. */
3276 if (TREE_CODE (TREE_OPERAND (conv, 0)) == BASE_CONV)
3277 TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
3278 }
3279 if (conv
3280 && ((! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
3281 && (flags & LOOKUP_NO_TEMP_BIND) == 0))
3282 /* If T1 is reference-related to T2, cv1 must be the same
3283 cv-qualification as, or greater cv-qualification than,
3284 cv2; otherwise, the program is ill-formed. */
3285 || (related
3286 && (TYPE_READONLY (to) < TYPE_READONLY (from)
3287 || TYPE_VOLATILE (to) < TYPE_VOLATILE (from)))))
3288 ICS_BAD_FLAG (conv) = 1;
3289 }
3290
3291 return conv;
3292 }
3293
3294 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
3295 to type TO. The optional expression EXPR may affect the conversion.
3296 FLAGS are the usual overloading flags. Only LOOKUP_NO_CONVERSION is
3297 significant. */
3298
3299 static tree
3300 implicit_conversion (to, from, expr, flags)
3301 tree to, from, expr;
3302 int flags;
3303 {
3304 tree conv;
3305 struct z_candidate *cand;
3306
3307 if (expr && type_unknown_p (expr))
3308 {
3309 expr = instantiate_type (to, expr, 0);
3310 if (expr == error_mark_node)
3311 return 0;
3312 from = TREE_TYPE (expr);
3313 }
3314
3315 if (TREE_CODE (to) == REFERENCE_TYPE)
3316 conv = reference_binding (to, from, expr, flags);
3317 else
3318 conv = standard_conversion (to, from, expr);
3319
3320 if (conv)
3321 ;
3322 else if ((IS_AGGR_TYPE (non_reference (from))
3323 || IS_AGGR_TYPE (non_reference (to)))
3324 && (flags & LOOKUP_NO_CONVERSION) == 0)
3325 {
3326 cand = build_user_type_conversion_1
3327 (to, expr, LOOKUP_ONLYCONVERTING);
3328 if (cand)
3329 conv = cand->second_conv;
3330 if ((! conv || ICS_BAD_FLAG (conv))
3331 && TREE_CODE (to) == REFERENCE_TYPE
3332 && (flags & LOOKUP_NO_TEMP_BIND) == 0)
3333 {
3334 cand = build_user_type_conversion_1
3335 (TYPE_MAIN_VARIANT (TREE_TYPE (to)), expr, LOOKUP_ONLYCONVERTING);
3336 if (cand)
3337 {
3338 if (! TYPE_READONLY (TREE_TYPE (to))
3339 || TYPE_VOLATILE (TREE_TYPE (to)))
3340 ICS_BAD_FLAG (cand->second_conv) = 1;
3341 if (!conv || (ICS_BAD_FLAG (conv)
3342 > ICS_BAD_FLAG (cand->second_conv)))
3343 conv = build_conv (REF_BIND, to, cand->second_conv);
3344 }
3345 }
3346 }
3347
3348 return conv;
3349 }
3350
3351 /* Create an overload candidate for the function or method FN called with
3352 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
3353 to implicit_conversion. */
3354
3355 static struct z_candidate *
3356 add_function_candidate (candidates, fn, arglist, flags)
3357 struct z_candidate *candidates;
3358 tree fn, arglist;
3359 int flags;
3360 {
3361 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
3362 int i, len;
3363 tree convs;
3364 tree parmnode = parmlist;
3365 tree argnode = arglist;
3366 int viable = 1;
3367 struct z_candidate *cand;
3368
3369 /* The `this' and `in_chrg' arguments to constructors are not considered
3370 in overload resolution. */
3371 if (DECL_CONSTRUCTOR_P (fn))
3372 {
3373 parmnode = TREE_CHAIN (parmnode);
3374 argnode = TREE_CHAIN (argnode);
3375 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
3376 {
3377 parmnode = TREE_CHAIN (parmnode);
3378 argnode = TREE_CHAIN (argnode);
3379 }
3380 }
3381
3382 len = list_length (argnode);
3383 convs = make_tree_vec (len);
3384
3385 for (i = 0; i < len; ++i)
3386 {
3387 tree arg = TREE_VALUE (argnode);
3388 tree argtype = TREE_TYPE (arg);
3389 tree t;
3390
3391 argtype = cp_build_type_variant
3392 (argtype, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg));
3393
3394 if (parmnode == void_list_node)
3395 break;
3396 else if (parmnode)
3397 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3398 else
3399 {
3400 t = build1 (IDENTITY_CONV, argtype, arg);
3401 ICS_ELLIPSIS_FLAG (t) = 1;
3402 }
3403
3404 if (i == 0 && t && TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
3405 && ! DECL_CONSTRUCTOR_P (fn))
3406 ICS_THIS_FLAG (t) = 1;
3407
3408 TREE_VEC_ELT (convs, i) = t;
3409 if (! t)
3410 break;
3411
3412 if (ICS_BAD_FLAG (t))
3413 viable = -1;
3414
3415 if (parmnode)
3416 parmnode = TREE_CHAIN (parmnode);
3417 argnode = TREE_CHAIN (argnode);
3418 }
3419
3420 if (i < len)
3421 viable = 0;
3422
3423 /* Make sure there are default args for the rest of the parms. */
3424 for (; parmnode && parmnode != void_list_node;
3425 parmnode = TREE_CHAIN (parmnode))
3426 if (! TREE_PURPOSE (parmnode))
3427 {
3428 viable = 0;
3429 break;
3430 }
3431
3432 cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
3433
3434 cand->fn = fn;
3435 cand->convs = convs;
3436 cand->second_conv = NULL_TREE;
3437 cand->viable = viable;
3438 cand->basetype_path = NULL_TREE;
3439 cand->template = NULL_TREE;
3440 cand->next = candidates;
3441
3442 return cand;
3443 }
3444
3445 /* Create an overload candidate for the conversion function FN which will
3446 be invoked for expression OBJ, producing a pointer-to-function which
3447 will in turn be called with the argument list ARGLIST, and add it to
3448 CANDIDATES. FLAGS is passed on to implicit_conversion. */
3449
3450 static struct z_candidate *
3451 add_conv_candidate (candidates, fn, obj, arglist)
3452 struct z_candidate *candidates;
3453 tree fn, obj, arglist;
3454 {
3455 tree totype = TREE_TYPE (TREE_TYPE (fn));
3456 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
3457 int i, len = list_length (arglist) + 1;
3458 tree convs = make_tree_vec (len);
3459 tree parmnode = parmlist;
3460 tree argnode = arglist;
3461 int viable = 1;
3462 struct z_candidate *cand;
3463 int flags = LOOKUP_NORMAL;
3464
3465 for (i = 0; i < len; ++i)
3466 {
3467 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
3468 tree argtype = lvalue_type (arg);
3469 tree t;
3470
3471 if (i == 0)
3472 t = implicit_conversion (totype, argtype, arg, flags);
3473 else if (parmnode == void_list_node)
3474 break;
3475 else if (parmnode)
3476 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
3477 else
3478 {
3479 t = build1 (IDENTITY_CONV, argtype, arg);
3480 ICS_ELLIPSIS_FLAG (t) = 1;
3481 }
3482
3483 TREE_VEC_ELT (convs, i) = t;
3484 if (! t)
3485 break;
3486
3487 if (ICS_BAD_FLAG (t))
3488 viable = -1;
3489
3490 if (i == 0)
3491 continue;
3492
3493 if (parmnode)
3494 parmnode = TREE_CHAIN (parmnode);
3495 argnode = TREE_CHAIN (argnode);
3496 }
3497
3498 if (i < len)
3499 viable = 0;
3500
3501 for (; parmnode && parmnode != void_list_node;
3502 parmnode = TREE_CHAIN (parmnode))
3503 if (! TREE_PURPOSE (parmnode))
3504 {
3505 viable = 0;
3506 break;
3507 }
3508
3509 cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
3510
3511 cand->fn = fn;
3512 cand->convs = convs;
3513 cand->second_conv = NULL_TREE;
3514 cand->viable = viable;
3515 cand->basetype_path = NULL_TREE;
3516 cand->template = NULL_TREE;
3517 cand->next = candidates;
3518
3519 return cand;
3520 }
3521
3522 static struct z_candidate *
3523 build_builtin_candidate (candidates, fnname, type1, type2,
3524 args, argtypes, flags)
3525 struct z_candidate *candidates;
3526 tree fnname, type1, type2, *args, *argtypes;
3527 int flags;
3528
3529 {
3530 tree t, convs;
3531 int viable = 1, i;
3532 struct z_candidate *cand;
3533 tree types[2];
3534
3535 types[0] = type1;
3536 types[1] = type2;
3537
3538 convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
3539
3540 for (i = 0; i < 2; ++i)
3541 {
3542 if (! args[i])
3543 break;
3544
3545 t = implicit_conversion (types[i], argtypes[i], args[i], flags);
3546 if (! t)
3547 {
3548 viable = 0;
3549 /* We need something for printing the candidate. */
3550 t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
3551 }
3552 else if (ICS_BAD_FLAG (t))
3553 viable = 0;
3554 TREE_VEC_ELT (convs, i) = t;
3555 }
3556
3557 /* For COND_EXPR we rearranged the arguments; undo that now. */
3558 if (args[2])
3559 {
3560 TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
3561 TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
3562 t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
3563 if (t)
3564 TREE_VEC_ELT (convs, 0) = t;
3565 else
3566 viable = 0;
3567 }
3568
3569 cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
3570
3571 cand->fn = fnname;
3572 cand->convs = convs;
3573 cand->second_conv = NULL_TREE;
3574 cand->viable = viable;
3575 cand->basetype_path = NULL_TREE;
3576 cand->template = NULL_TREE;
3577 cand->next = candidates;
3578
3579 return cand;
3580 }
3581
3582 static int
3583 is_complete (t)
3584 tree t;
3585 {
3586 return TYPE_SIZE (complete_type (t)) != NULL_TREE;
3587 }
3588
3589 /* Create any builtin operator overload candidates for the operator in
3590 question given the converted operand types TYPE1 and TYPE2. The other
3591 args are passed through from add_builtin_candidates to
3592 build_builtin_candidate. */
3593
3594 static struct z_candidate *
3595 add_builtin_candidate (candidates, code, code2, fnname, type1, type2,
3596 args, argtypes, flags)
3597 struct z_candidate *candidates;
3598 enum tree_code code, code2;
3599 tree fnname, type1, type2, *args, *argtypes;
3600 int flags;
3601 {
3602 switch (code)
3603 {
3604 case POSTINCREMENT_EXPR:
3605 case POSTDECREMENT_EXPR:
3606 args[1] = integer_zero_node;
3607 type2 = integer_type_node;
3608 }
3609
3610 switch (code)
3611 {
3612
3613 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
3614 and VQ is either volatile or empty, there exist candidate operator
3615 functions of the form
3616 VQ T& operator++(VQ T&);
3617 T operator++(VQ T&, int);
3618 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
3619 type other than bool, and VQ is either volatile or empty, there exist
3620 candidate operator functions of the form
3621 VQ T& operator--(VQ T&);
3622 T operator--(VQ T&, int);
3623 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
3624 complete object type, and VQ is either volatile or empty, there exist
3625 candidate operator functions of the form
3626 T*VQ& operator++(T*VQ&);
3627 T*VQ& operator--(T*VQ&);
3628 T* operator++(T*VQ&, int);
3629 T* operator--(T*VQ&, int); */
3630
3631 case POSTDECREMENT_EXPR:
3632 case PREDECREMENT_EXPR:
3633 if (TREE_CODE (type1) == BOOLEAN_TYPE)
3634 return candidates;
3635 case POSTINCREMENT_EXPR:
3636 case PREINCREMENT_EXPR:
3637 if ((ARITHMETIC_TYPE_P (type1) && TREE_CODE (type1) != ENUMERAL_TYPE)
3638 || TYPE_PTROB_P (type1))
3639 {
3640 type1 = build_reference_type (type1);
3641 break;
3642 }
3643 return candidates;
3644
3645 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
3646 exist candidate operator functions of the form
3647
3648 T& operator*(T*);
3649
3650 8 For every function type T, there exist candidate operator functions of
3651 the form
3652 T& operator*(T*); */
3653
3654 case INDIRECT_REF:
3655 if (TREE_CODE (type1) == POINTER_TYPE
3656 && (TYPE_PTROB_P (type1)
3657 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
3658 break;
3659 return candidates;
3660
3661 /* 9 For every type T, there exist candidate operator functions of the form
3662 T* operator+(T*);
3663
3664 10For every promoted arithmetic type T, there exist candidate operator
3665 functions of the form
3666 T operator+(T);
3667 T operator-(T); */
3668
3669 case CONVERT_EXPR: /* unary + */
3670 if (TREE_CODE (type1) == POINTER_TYPE
3671 && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
3672 break;
3673 case NEGATE_EXPR:
3674 if (ARITHMETIC_TYPE_P (type1))
3675 break;
3676 return candidates;
3677
3678 /* 11For every promoted integral type T, there exist candidate operator
3679 functions of the form
3680 T operator~(T); */
3681
3682 case BIT_NOT_EXPR:
3683 if (INTEGRAL_TYPE_P (type1))
3684 break;
3685 return candidates;
3686
3687 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
3688 is the same type as C2 or is a derived class of C2, T is a complete
3689 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3690 there exist candidate operator functions of the form
3691 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3692 where CV12 is the union of CV1 and CV2. */
3693
3694 case MEMBER_REF:
3695 if (TREE_CODE (type1) == POINTER_TYPE
3696 && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
3697 {
3698 tree c1 = TREE_TYPE (type1);
3699 tree c2 = (TYPE_PTRMEMFUNC_P (type2)
3700 ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
3701 : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
3702
3703 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
3704 && (TYPE_PTRMEMFUNC_P (type2)
3705 || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
3706 break;
3707 }
3708 return candidates;
3709
3710 /* 13For every pair of promoted arithmetic types L and R, there exist can-
3711 didate operator functions of the form
3712 LR operator*(L, R);
3713 LR operator/(L, R);
3714 LR operator+(L, R);
3715 LR operator-(L, R);
3716 bool operator<(L, R);
3717 bool operator>(L, R);
3718 bool operator<=(L, R);
3719 bool operator>=(L, R);
3720 bool operator==(L, R);
3721 bool operator!=(L, R);
3722 where LR is the result of the usual arithmetic conversions between
3723 types L and R.
3724
3725 14For every pair of types T and I, where T is a cv-qualified or cv-
3726 unqualified complete object type and I is a promoted integral type,
3727 there exist candidate operator functions of the form
3728 T* operator+(T*, I);
3729 T& operator[](T*, I);
3730 T* operator-(T*, I);
3731 T* operator+(I, T*);
3732 T& operator[](I, T*);
3733
3734 15For every T, where T is a pointer to complete object type, there exist
3735 candidate operator functions of the form112)
3736 ptrdiff_t operator-(T, T);
3737
3738 16For every pointer type T, there exist candidate operator functions of
3739 the form
3740 bool operator<(T, T);
3741 bool operator>(T, T);
3742 bool operator<=(T, T);
3743 bool operator>=(T, T);
3744 bool operator==(T, T);
3745 bool operator!=(T, T);
3746
3747 17For every pointer to member type T, there exist candidate operator
3748 functions of the form
3749 bool operator==(T, T);
3750 bool operator!=(T, T); */
3751
3752 case MINUS_EXPR:
3753 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
3754 break;
3755 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3756 {
3757 type2 = ptrdiff_type_node;
3758 break;
3759 }
3760 case MULT_EXPR:
3761 case TRUNC_DIV_EXPR:
3762 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3763 break;
3764 return candidates;
3765
3766 case EQ_EXPR:
3767 case NE_EXPR:
3768 if (TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2)
3769 || TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3770 break;
3771 if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
3772 && null_ptr_cst_p (args[1]))
3773 {
3774 type2 = type1;
3775 break;
3776 }
3777 if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
3778 && null_ptr_cst_p (args[0]))
3779 {
3780 type1 = type2;
3781 break;
3782 }
3783 case LT_EXPR:
3784 case GT_EXPR:
3785 case LE_EXPR:
3786 case GE_EXPR:
3787 case MAX_EXPR:
3788 case MIN_EXPR:
3789 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2)
3790 || TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3791 break;
3792 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
3793 {
3794 type2 = type1;
3795 break;
3796 }
3797 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
3798 {
3799 type1 = type2;
3800 break;
3801 }
3802 return candidates;
3803
3804 case PLUS_EXPR:
3805 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3806 break;
3807 case ARRAY_REF:
3808 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
3809 {
3810 type1 = ptrdiff_type_node;
3811 break;
3812 }
3813 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3814 {
3815 type2 = ptrdiff_type_node;
3816 break;
3817 }
3818 return candidates;
3819
3820 /* 18For every pair of promoted integral types L and R, there exist candi-
3821 date operator functions of the form
3822 LR operator%(L, R);
3823 LR operator&(L, R);
3824 LR operator^(L, R);
3825 LR operator|(L, R);
3826 L operator<<(L, R);
3827 L operator>>(L, R);
3828 where LR is the result of the usual arithmetic conversions between
3829 types L and R. */
3830
3831 case TRUNC_MOD_EXPR:
3832 case BIT_AND_EXPR:
3833 case BIT_IOR_EXPR:
3834 case BIT_XOR_EXPR:
3835 case LSHIFT_EXPR:
3836 case RSHIFT_EXPR:
3837 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3838 break;
3839 return candidates;
3840
3841 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
3842 type, VQ is either volatile or empty, and R is a promoted arithmetic
3843 type, there exist candidate operator functions of the form
3844 VQ L& operator=(VQ L&, R);
3845 VQ L& operator*=(VQ L&, R);
3846 VQ L& operator/=(VQ L&, R);
3847 VQ L& operator+=(VQ L&, R);
3848 VQ L& operator-=(VQ L&, R);
3849
3850 20For every pair T, VQ), where T is any type and VQ is either volatile
3851 or empty, there exist candidate operator functions of the form
3852 T*VQ& operator=(T*VQ&, T*);
3853
3854 21For every pair T, VQ), where T is a pointer to member type and VQ is
3855 either volatile or empty, there exist candidate operator functions of
3856 the form
3857 VQ T& operator=(VQ T&, T);
3858
3859 22For every triple T, VQ, I), where T is a cv-qualified or cv-
3860 unqualified complete object type, VQ is either volatile or empty, and
3861 I is a promoted integral type, there exist candidate operator func-
3862 tions of the form
3863 T*VQ& operator+=(T*VQ&, I);
3864 T*VQ& operator-=(T*VQ&, I);
3865
3866 23For every triple L, VQ, R), where L is an integral or enumeration
3867 type, VQ is either volatile or empty, and R is a promoted integral
3868 type, there exist candidate operator functions of the form
3869
3870 VQ L& operator%=(VQ L&, R);
3871 VQ L& operator<<=(VQ L&, R);
3872 VQ L& operator>>=(VQ L&, R);
3873 VQ L& operator&=(VQ L&, R);
3874 VQ L& operator^=(VQ L&, R);
3875 VQ L& operator|=(VQ L&, R); */
3876
3877 case MODIFY_EXPR:
3878 switch (code2)
3879 {
3880 case PLUS_EXPR:
3881 case MINUS_EXPR:
3882 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
3883 {
3884 type2 = ptrdiff_type_node;
3885 break;
3886 }
3887 case MULT_EXPR:
3888 case TRUNC_DIV_EXPR:
3889 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3890 break;
3891 return candidates;
3892
3893 case TRUNC_MOD_EXPR:
3894 case BIT_AND_EXPR:
3895 case BIT_IOR_EXPR:
3896 case BIT_XOR_EXPR:
3897 case LSHIFT_EXPR:
3898 case RSHIFT_EXPR:
3899 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
3900 break;
3901 return candidates;
3902
3903 case NOP_EXPR:
3904 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3905 break;
3906 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
3907 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
3908 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
3909 || ((TYPE_PTRMEMFUNC_P (type1)
3910 || TREE_CODE (type1) == POINTER_TYPE)
3911 && null_ptr_cst_p (args[1])))
3912 {
3913 type2 = type1;
3914 break;
3915 }
3916 return candidates;
3917
3918 default:
3919 my_friendly_abort (367);
3920 }
3921 type1 = build_reference_type (type1);
3922 break;
3923
3924 case COND_EXPR:
3925 /* Kludge around broken overloading rules whereby
3926 bool ? const char& : enum is ambiguous
3927 (between int and const char&). */
3928 flags |= LOOKUP_NO_TEMP_BIND;
3929
3930 /* Extension: Support ?: of enumeral type. Hopefully this will not
3931 be an extension for long. */
3932 if (TREE_CODE (type1) == ENUMERAL_TYPE && type1 == type2)
3933 break;
3934 else if (TREE_CODE (type1) == ENUMERAL_TYPE
3935 || TREE_CODE (type2) == ENUMERAL_TYPE)
3936 return candidates;
3937 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
3938 break;
3939 if (TREE_CODE (type1) == TREE_CODE (type2)
3940 && (TREE_CODE (type1) == REFERENCE_TYPE
3941 || TREE_CODE (type1) == POINTER_TYPE
3942 || TYPE_PTRMEMFUNC_P (type1)
3943 || IS_AGGR_TYPE (type1)))
3944 break;
3945 if (TREE_CODE (type1) == REFERENCE_TYPE
3946 || TREE_CODE (type2) == REFERENCE_TYPE)
3947 return candidates;
3948 if (((TYPE_PTRMEMFUNC_P (type1) || TREE_CODE (type1) == POINTER_TYPE)
3949 && null_ptr_cst_p (args[1]))
3950 || IS_AGGR_TYPE (type1))
3951 {
3952 type2 = type1;
3953 break;
3954 }
3955 if (((TYPE_PTRMEMFUNC_P (type2) || TREE_CODE (type2) == POINTER_TYPE)
3956 && null_ptr_cst_p (args[0]))
3957 || IS_AGGR_TYPE (type2))
3958 {
3959 type1 = type2;
3960 break;
3961 }
3962 return candidates;
3963
3964 default:
3965 my_friendly_abort (367);
3966 }
3967
3968 /* If we're dealing with two pointer types, we need candidates
3969 for both of them. */
3970 if (type2 && type1 != type2
3971 && TREE_CODE (type1) == TREE_CODE (type2)
3972 && (TREE_CODE (type1) == REFERENCE_TYPE
3973 || (TREE_CODE (type1) == POINTER_TYPE
3974 && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
3975 || TYPE_PTRMEMFUNC_P (type1)
3976 || IS_AGGR_TYPE (type1)))
3977 {
3978 candidates = build_builtin_candidate
3979 (candidates, fnname, type1, type1, args, argtypes, flags);
3980 return build_builtin_candidate
3981 (candidates, fnname, type2, type2, args, argtypes, flags);
3982 }
3983
3984 return build_builtin_candidate
3985 (candidates, fnname, type1, type2, args, argtypes, flags);
3986 }
3987
3988 tree
3989 type_decays_to (type)
3990 tree type;
3991 {
3992 if (TREE_CODE (type) == ARRAY_TYPE)
3993 return build_pointer_type (TREE_TYPE (type));
3994 if (TREE_CODE (type) == FUNCTION_TYPE)
3995 return build_pointer_type (type);
3996 return type;
3997 }
3998
3999 /* There are three conditions of builtin candidates:
4000
4001 1) bool-taking candidates. These are the same regardless of the input.
4002 2) pointer-pair taking candidates. These are generated for each type
4003 one of the input types converts to.
4004 3) arithmetic candidates. According to the WP, we should generate
4005 all of these, but I'm trying not to... */
4006
4007 static struct z_candidate *
4008 add_builtin_candidates (candidates, code, code2, fnname, args, flags)
4009 struct z_candidate *candidates;
4010 enum tree_code code, code2;
4011 tree fnname, *args;
4012 int flags;
4013 {
4014 int ref1, i;
4015 tree type, argtypes[3], types[2];
4016
4017 for (i = 0; i < 3; ++i)
4018 {
4019 if (args[i])
4020 argtypes[i] = lvalue_type (args[i]);
4021 else
4022 argtypes[i] = NULL_TREE;
4023 }
4024
4025 switch (code)
4026 {
4027 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
4028 and VQ is either volatile or empty, there exist candidate operator
4029 functions of the form
4030 VQ T& operator++(VQ T&); */
4031
4032 case POSTINCREMENT_EXPR:
4033 case PREINCREMENT_EXPR:
4034 case POSTDECREMENT_EXPR:
4035 case PREDECREMENT_EXPR:
4036 case MODIFY_EXPR:
4037 ref1 = 1;
4038 break;
4039
4040 /* 24There also exist candidate operator functions of the form
4041 bool operator!(bool);
4042 bool operator&&(bool, bool);
4043 bool operator||(bool, bool); */
4044
4045 case TRUTH_NOT_EXPR:
4046 return build_builtin_candidate
4047 (candidates, fnname, boolean_type_node,
4048 NULL_TREE, args, argtypes, flags);
4049
4050 case TRUTH_ORIF_EXPR:
4051 case TRUTH_ANDIF_EXPR:
4052 return build_builtin_candidate
4053 (candidates, fnname, boolean_type_node,
4054 boolean_type_node, args, argtypes, flags);
4055
4056 case ADDR_EXPR:
4057 case COMPOUND_EXPR:
4058 case COMPONENT_REF:
4059 return candidates;
4060
4061 default:
4062 ref1 = 0;
4063 }
4064
4065 types[0] = types[1] = NULL_TREE;
4066
4067 for (i = 0; i < 2; ++i)
4068 {
4069 if (! args[i])
4070 ;
4071 else if (IS_AGGR_TYPE (argtypes[i]))
4072 {
4073 tree convs = lookup_conversions (argtypes[i]);
4074
4075 if (code == COND_EXPR)
4076 {
4077 if (real_lvalue_p (args[i]))
4078 types[i] = tree_cons
4079 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4080
4081 types[i] = tree_cons
4082 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
4083 }
4084
4085 else if (! convs || (i == 0 && code == MODIFY_EXPR
4086 && code2 == NOP_EXPR))
4087 return candidates;
4088
4089 for (; convs; convs = TREE_CHAIN (convs))
4090 {
4091 type = TREE_TYPE (TREE_TYPE (TREE_VALUE (convs)));
4092
4093 if (i == 0 && ref1
4094 && (TREE_CODE (type) != REFERENCE_TYPE
4095 || TYPE_READONLY (TREE_TYPE (type))))
4096 continue;
4097
4098 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
4099 types[i] = tree_cons (NULL_TREE, type, types[i]);
4100
4101 type = non_reference (type);
4102 if (i != 0 || ! ref1)
4103 {
4104 type = TYPE_MAIN_VARIANT (type_decays_to (type));
4105 if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4106 types[i] = tree_cons (NULL_TREE, type, types[i]);
4107 if (INTEGRAL_TYPE_P (type))
4108 type = type_promotes_to (type);
4109 }
4110
4111 if (! value_member (type, types[i]))
4112 types[i] = tree_cons (NULL_TREE, type, types[i]);
4113 }
4114 }
4115 else
4116 {
4117 if (code == COND_EXPR && real_lvalue_p (args[i]))
4118 types[i] = tree_cons
4119 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
4120 type = non_reference (argtypes[i]);
4121 if (i != 0 || ! ref1)
4122 {
4123 type = TYPE_MAIN_VARIANT (type_decays_to (type));
4124 if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
4125 types[i] = tree_cons (NULL_TREE, type, types[i]);
4126 if (INTEGRAL_TYPE_P (type))
4127 type = type_promotes_to (type);
4128 }
4129 types[i] = tree_cons (NULL_TREE, type, types[i]);
4130 }
4131 }
4132
4133 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
4134 {
4135 if (types[1])
4136 for (type = types[1]; type; type = TREE_CHAIN (type))
4137 candidates = add_builtin_candidate
4138 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4139 TREE_VALUE (type), args, argtypes, flags);
4140 else
4141 candidates = add_builtin_candidate
4142 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
4143 NULL_TREE, args, argtypes, flags);
4144 }
4145
4146 return candidates;
4147 }
4148
4149 static struct z_candidate *
4150 add_template_candidate (candidates, tmpl, arglist, return_type, flags)
4151 struct z_candidate *candidates;
4152 tree tmpl, arglist, return_type;
4153 int flags;
4154 {
4155 int ntparms = DECL_NTPARMS (tmpl);
4156 tree targs = make_tree_vec (ntparms);
4157 struct z_candidate *cand;
4158 int i;
4159 tree fn;
4160
4161 i = fn_type_unification (tmpl, targs, arglist, return_type, 0);
4162
4163 if (i != 0)
4164 return candidates;
4165
4166 fn = instantiate_template (tmpl, targs);
4167 if (fn == error_mark_node)
4168 return candidates;
4169
4170 cand = add_function_candidate (candidates, fn, arglist, flags);
4171 cand->template = DECL_TEMPLATE_INFO (fn);
4172 return cand;
4173 }
4174
4175
4176 static struct z_candidate *
4177 add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type)
4178 struct z_candidate *candidates;
4179 tree tmpl, obj, arglist, return_type;
4180 {
4181 int ntparms = DECL_NTPARMS (tmpl);
4182 tree targs = make_tree_vec (ntparms);
4183 struct z_candidate *cand;
4184 int i;
4185 tree fn;
4186
4187 i = fn_type_unification (tmpl, targs, arglist, return_type, 0);
4188
4189 if (i != 0)
4190 return candidates;
4191
4192 fn = instantiate_template (tmpl, targs);
4193 if (fn == error_mark_node)
4194 return candidates;
4195
4196 cand = add_conv_candidate (candidates, fn, obj, arglist);
4197 cand->template = DECL_TEMPLATE_INFO (fn);
4198 return cand;
4199 }
4200
4201
4202 static int
4203 any_viable (cands)
4204 struct z_candidate *cands;
4205 {
4206 for (; cands; cands = cands->next)
4207 if (pedantic ? cands->viable == 1 : cands->viable)
4208 return 1;
4209 return 0;
4210 }
4211
4212 static struct z_candidate *
4213 splice_viable (cands)
4214 struct z_candidate *cands;
4215 {
4216 struct z_candidate **p = &cands;
4217
4218 for (; *p; )
4219 {
4220 if (pedantic ? (*p)->viable == 1 : (*p)->viable)
4221 p = &((*p)->next);
4222 else
4223 *p = (*p)->next;
4224 }
4225
4226 return cands;
4227 }
4228
4229 static tree
4230 build_this (obj)
4231 tree obj;
4232 {
4233 /* Fix this to work on non-lvalues. */
4234 if (IS_SIGNATURE_POINTER (TREE_TYPE (obj))
4235 || IS_SIGNATURE_REFERENCE (TREE_TYPE (obj)))
4236 return obj;
4237 else
4238 return build_unary_op (ADDR_EXPR, obj, 0);
4239 }
4240
4241 static void
4242 print_z_candidates (candidates)
4243 struct z_candidate *candidates;
4244 {
4245 char *str = "candidates are:";
4246 for (; candidates; candidates = candidates->next)
4247 {
4248 if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
4249 {
4250 if (candidates->fn == ansi_opname [COND_EXPR])
4251 cp_error ("%s %D(%T, %T, %T) <builtin>", str, candidates->fn,
4252 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4253 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
4254 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
4255 else if (TREE_VEC_LENGTH (candidates->convs) == 2)
4256 cp_error ("%s %D(%T, %T) <builtin>", str, candidates->fn,
4257 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
4258 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
4259 else
4260 cp_error ("%s %D(%T) <builtin>", str, candidates->fn,
4261 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
4262 }
4263 else
4264 cp_error_at ("%s %+D%s", str, candidates->fn,
4265 candidates->viable == -1 ? " <near match>" : "");
4266 str = " ";
4267 }
4268 }
4269
4270 /* Returns the best overload candidate to perform the requested
4271 conversion. This function is used for three the overloading situations
4272 described in [over.match.copy], [over.match.conv], and [over.match.ref].
4273 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
4274 per [dcl.init.ref], so we ignore temporary bindings. */
4275
4276 static struct z_candidate *
4277 build_user_type_conversion_1 (totype, expr, flags)
4278 tree totype, expr;
4279 int flags;
4280 {
4281 struct z_candidate *candidates, *cand;
4282 tree fromtype = TREE_TYPE (expr);
4283 tree ctors = NULL_TREE, convs = NULL_TREE, *p;
4284 tree args;
4285 tree templates = NULL_TREE;
4286
4287 if (IS_AGGR_TYPE (totype))
4288 ctors = lookup_fnfields (TYPE_BINFO (totype), ctor_identifier, 0);
4289 if (IS_AGGR_TYPE (fromtype)
4290 && (! IS_AGGR_TYPE (totype) || ! DERIVED_FROM_P (totype, fromtype)))
4291 convs = lookup_conversions (fromtype);
4292
4293 candidates = 0;
4294 flags |= LOOKUP_NO_CONVERSION;
4295
4296 if (ctors)
4297 {
4298 tree t = build_int_2 (0, 0);
4299 TREE_TYPE (t) = build_pointer_type (totype);
4300 args = build_tree_list (NULL_TREE, expr);
4301 if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
4302 args = tree_cons (NULL_TREE, integer_one_node, args);
4303 args = tree_cons (NULL_TREE, t, args);
4304
4305 ctors = TREE_VALUE (ctors);
4306 }
4307 for (; ctors; ctors = DECL_CHAIN (ctors))
4308 {
4309 if (DECL_NONCONVERTING_P (ctors))
4310 continue;
4311
4312 if (TREE_CODE (ctors) == TEMPLATE_DECL)
4313 {
4314 templates = decl_tree_cons (NULL_TREE, ctors, templates);
4315 candidates =
4316 add_template_candidate (candidates, ctors,
4317 args, NULL_TREE, flags);
4318 }
4319 else
4320 candidates = add_function_candidate (candidates, ctors,
4321 args, flags);
4322
4323 if (candidates)
4324 {
4325 candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
4326 candidates->basetype_path = TYPE_BINFO (totype);
4327 }
4328 }
4329
4330 if (convs)
4331 args = build_tree_list (NULL_TREE, build_this (expr));
4332
4333 for (; convs; convs = TREE_CHAIN (convs))
4334 {
4335 tree fn = TREE_VALUE (convs);
4336 int convflags = LOOKUP_NO_CONVERSION;
4337 tree ics;
4338
4339 /* If we are called to convert to a reference type, we are trying to
4340 find an lvalue binding, so don't even consider temporaries. If
4341 we don't find an lvalue binding, the caller will try again to
4342 look for a temporary binding. */
4343 if (TREE_CODE (totype) == REFERENCE_TYPE)
4344 convflags |= LOOKUP_NO_TEMP_BIND;
4345
4346 ics = implicit_conversion
4347 (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
4348
4349 if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
4350 /* ignore the near match. */;
4351 else if (ics)
4352 for (; fn; fn = DECL_CHAIN (fn))
4353 {
4354 if (TREE_CODE (fn) == TEMPLATE_DECL)
4355 {
4356 templates = decl_tree_cons (NULL_TREE, fn, templates);
4357 candidates =
4358 add_template_candidate (candidates, fn, args,
4359 totype, flags);
4360 }
4361 else
4362 candidates = add_function_candidate (candidates, fn,
4363 args, flags);
4364
4365 if (candidates)
4366 {
4367 candidates->second_conv = ics;
4368 candidates->basetype_path = TREE_PURPOSE (convs);
4369 if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
4370 candidates->viable = -1;
4371 }
4372 }
4373 }
4374
4375 if (! any_viable (candidates))
4376 {
4377 #if 0
4378 if (flags & LOOKUP_COMPLAIN)
4379 {
4380 if (candidates && ! candidates->next)
4381 /* say why this one won't work or try to be loose */;
4382 else
4383 cp_error ("no viable candidates");
4384 }
4385 #endif
4386
4387 return 0;
4388 }
4389
4390 candidates = splice_viable (candidates);
4391 cand = tourney (candidates);
4392
4393 if (cand == 0)
4394 {
4395 if (flags & LOOKUP_COMPLAIN)
4396 {
4397 cp_error ("conversion from `%T' to `%T' is ambiguous",
4398 fromtype, totype);
4399 print_z_candidates (candidates);
4400 }
4401
4402 cand = candidates; /* any one will do */
4403 cand->second_conv = build1 (AMBIG_CONV, totype, expr);
4404 ICS_USER_FLAG (cand->second_conv) = 1;
4405 ICS_BAD_FLAG (cand->second_conv) = 1;
4406
4407 return cand;
4408 }
4409
4410 for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
4411 p = &(TREE_OPERAND (*p, 0));
4412
4413 /* Pedantically, normal function declarations are never considered
4414 to refer to template instantiations, but we won't implement that
4415 until we implement full template instantiation syntax. */
4416 if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)
4417 && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4418 add_maybe_template (cand->fn, templates);
4419
4420 *p = build
4421 (USER_CONV,
4422 (DECL_CONSTRUCTOR_P (cand->fn)
4423 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
4424 NULL_TREE, cand->fn, cand->convs, cand->basetype_path);
4425 ICS_USER_FLAG (cand->second_conv) = 1;
4426 if (cand->viable == -1)
4427 ICS_BAD_FLAG (cand->second_conv) = 1;
4428
4429 return cand;
4430 }
4431
4432 tree
4433 build_user_type_conversion (totype, expr, flags)
4434 tree totype, expr;
4435 int flags;
4436 {
4437 struct z_candidate *cand
4438 = build_user_type_conversion_1 (totype, expr, flags);
4439
4440 if (cand)
4441 {
4442 if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
4443 return error_mark_node;
4444 return convert_from_reference (convert_like (cand->second_conv, expr));
4445 }
4446 return NULL_TREE;
4447 }
4448
4449 /* Do any initial processing on the arguments to a function call. */
4450
4451 static tree
4452 resolve_args (args)
4453 tree args;
4454 {
4455 tree t;
4456 for (t = args; t; t = TREE_CHAIN (t))
4457 {
4458 if (TREE_VALUE (t) == error_mark_node)
4459 return error_mark_node;
4460 else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
4461 {
4462 error ("invalid use of void expression");
4463 return error_mark_node;
4464 }
4465 else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
4466 TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
4467 }
4468 return args;
4469 }
4470
4471 tree
4472 build_new_function_call (fn, args, obj)
4473 tree fn, args, obj;
4474 {
4475 struct z_candidate *candidates = 0, *cand;
4476
4477 if (obj == NULL_TREE && TREE_CODE (fn) == TREE_LIST)
4478 {
4479 tree t;
4480 tree templates = NULL_TREE;
4481
4482 args = resolve_args (args);
4483
4484 if (args == error_mark_node)
4485 return error_mark_node;
4486
4487 for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
4488 {
4489 if (TREE_CODE (t) == TEMPLATE_DECL)
4490 {
4491 templates = decl_tree_cons (NULL_TREE, t, templates);
4492 candidates = add_template_candidate
4493 (candidates, t, args, NULL_TREE, LOOKUP_NORMAL);
4494 }
4495 else
4496 candidates = add_function_candidate
4497 (candidates, t, args, LOOKUP_NORMAL);
4498 }
4499
4500 if (! any_viable (candidates))
4501 {
4502 if (candidates && ! candidates->next)
4503 return build_function_call (candidates->fn, args);
4504 cp_error ("no matching function for call to `%D (%A)'",
4505 TREE_PURPOSE (fn), args);
4506 if (candidates)
4507 print_z_candidates (candidates);
4508 return error_mark_node;
4509 }
4510 candidates = splice_viable (candidates);
4511 cand = tourney (candidates);
4512
4513 if (cand == 0)
4514 {
4515 cp_error ("call of overloaded `%D (%A)' is ambiguous",
4516 TREE_PURPOSE (fn), args);
4517 print_z_candidates (candidates);
4518 return error_mark_node;
4519 }
4520
4521 /* Pedantically, normal function declarations are never considered
4522 to refer to template instantiations, but we won't implement that
4523 until we implement full template instantiation syntax. */
4524 if (templates && ! cand->template && ! DECL_INITIAL (cand->fn))
4525 add_maybe_template (cand->fn, templates);
4526
4527 return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
4528 }
4529
4530 return build_function_call (fn, args);
4531 }
4532
4533 static tree
4534 build_object_call (obj, args)
4535 tree obj, args;
4536 {
4537 struct z_candidate *candidates = 0, *cand;
4538 tree fns, convs, mem_args;
4539 tree type = TREE_TYPE (obj);
4540 tree templates = NULL_TREE;
4541
4542 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
4543
4544 args = resolve_args (args);
4545
4546 if (args == error_mark_node)
4547 return error_mark_node;
4548
4549 if (fns)
4550 {
4551 tree fn = TREE_VALUE (fns);
4552 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
4553
4554 for (; fn; fn = DECL_CHAIN (fn))
4555 {
4556 if (TREE_CODE (fn) == TEMPLATE_DECL)
4557 {
4558 templates = decl_tree_cons (NULL_TREE, fn, templates);
4559 candidates = add_template_candidate (candidates, fn,
4560 mem_args, NULL_TREE,
4561 LOOKUP_NORMAL);
4562 }
4563 else
4564 candidates = add_function_candidate
4565 (candidates, fn, mem_args, LOOKUP_NORMAL);
4566
4567 if (candidates)
4568 candidates->basetype_path = TREE_PURPOSE (fns);
4569 }
4570 }
4571
4572 convs = lookup_conversions (type);
4573
4574 for (; convs; convs = TREE_CHAIN (convs))
4575 {
4576 tree fn = TREE_VALUE (convs);
4577 tree totype = TREE_TYPE (TREE_TYPE (fn));
4578
4579 if (TREE_CODE (totype) == POINTER_TYPE
4580 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4581 for (; fn; fn = DECL_CHAIN (fn))
4582 {
4583 if (TREE_CODE (fn) == TEMPLATE_DECL)
4584 {
4585 templates = decl_tree_cons (NULL_TREE, fn, templates);
4586 candidates = add_template_conv_candidate (candidates,
4587 fn,
4588 obj,
4589 args,
4590 totype);
4591 }
4592 else
4593 candidates = add_conv_candidate (candidates, fn, obj, args);
4594
4595 if (candidates)
4596 candidates->basetype_path = TREE_PURPOSE (convs);
4597 }
4598 }
4599
4600 if (! any_viable (candidates))
4601 {
4602 cp_error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
4603 print_z_candidates (candidates);
4604 return error_mark_node;
4605 }
4606
4607 candidates = splice_viable (candidates);
4608 cand = tourney (candidates);
4609
4610 if (cand == 0)
4611 {
4612 cp_error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
4613 print_z_candidates (candidates);
4614 return error_mark_node;
4615 }
4616
4617 if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
4618 return build_over_call (cand->fn, cand->convs, mem_args, LOOKUP_NORMAL);
4619
4620 obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
4621
4622 /* FIXME */
4623 return build_function_call (obj, args);
4624 }
4625
4626 static void
4627 op_error (code, code2, arg1, arg2, arg3, problem)
4628 enum tree_code code, code2;
4629 tree arg1, arg2, arg3;
4630 char *problem;
4631 {
4632 char * opname
4633 = (code == MODIFY_EXPR ? assignop_tab [code2] : opname_tab [code]);
4634
4635 switch (code)
4636 {
4637 case COND_EXPR:
4638 cp_error ("%s for `%T ? %T : %T'", problem,
4639 error_type (arg1), error_type (arg2), error_type (arg3));
4640 break;
4641 case POSTINCREMENT_EXPR:
4642 case POSTDECREMENT_EXPR:
4643 cp_error ("%s for `%T%s'", problem, error_type (arg1), opname);
4644 break;
4645 case ARRAY_REF:
4646 cp_error ("%s for `%T[%T]'", problem,
4647 error_type (arg1), error_type (arg2));
4648 break;
4649 default:
4650 if (arg2)
4651 cp_error ("%s for `%T %s %T'", problem,
4652 error_type (arg1), opname, error_type (arg2));
4653 else
4654 cp_error ("%s for `%s%T'", problem, opname, error_type (arg1));
4655 }
4656 }
4657
4658 tree
4659 build_new_op (code, flags, arg1, arg2, arg3)
4660 enum tree_code code;
4661 int flags;
4662 tree arg1, arg2, arg3;
4663 {
4664 struct z_candidate *candidates = 0, *cand;
4665 tree fns, mem_arglist, arglist, fnname;
4666 enum tree_code code2 = NOP_EXPR;
4667 tree templates = NULL_TREE;
4668 tree conv;
4669
4670 if (arg1 == error_mark_node
4671 || arg2 == error_mark_node
4672 || arg3 == error_mark_node)
4673 return error_mark_node;
4674
4675 if (code == MODIFY_EXPR)
4676 {
4677 code2 = TREE_CODE (arg3);
4678 arg3 = NULL_TREE;
4679 fnname = ansi_assopname[code2];
4680 }
4681 else
4682 fnname = ansi_opname[code];
4683
4684 switch (code)
4685 {
4686 case NEW_EXPR:
4687 case VEC_NEW_EXPR:
4688 {
4689 tree rval;
4690
4691 arglist = tree_cons (NULL_TREE, arg2, arg3);
4692 if (flags & LOOKUP_GLOBAL)
4693 return build_new_function_call
4694 (lookup_name_nonclass (fnname), arglist, NULL_TREE);
4695
4696 /* FIXME */
4697 rval = build_method_call
4698 (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node),
4699 "new"),
4700 fnname, arglist, NULL_TREE, flags);
4701 if (rval == error_mark_node)
4702 /* User might declare fancy operator new, but invoke it
4703 like standard one. */
4704 return rval;
4705
4706 TREE_TYPE (rval) = arg1;
4707 TREE_CALLS_NEW (rval) = 1;
4708 return rval;
4709 }
4710
4711 case VEC_DELETE_EXPR:
4712 case DELETE_EXPR:
4713 {
4714 tree rval;
4715
4716 if (flags & LOOKUP_GLOBAL)
4717 return build_new_function_call
4718 (lookup_name_nonclass (fnname),
4719 build_tree_list (NULL_TREE, arg1), NULL_TREE);
4720
4721 arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
4722
4723 arg1 = TREE_TYPE (arg1);
4724
4725 /* This handles the case where we're trying to delete
4726 X (*a)[10];
4727 a=new X[5][10];
4728 delete[] a; */
4729
4730 if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
4731 {
4732 /* Strip off the pointer and the array. */
4733 arg1 = TREE_TYPE (TREE_TYPE (arg1));
4734
4735 while (TREE_CODE (arg1) == ARRAY_TYPE)
4736 arg1 = (TREE_TYPE (arg1));
4737
4738 arg1 = build_pointer_type (arg1);
4739 }
4740
4741 /* FIXME */
4742 rval = build_method_call
4743 (build_indirect_ref (build1 (NOP_EXPR, arg1,
4744 error_mark_node),
4745 NULL_PTR),
4746 fnname, arglist, NULL_TREE, flags);
4747 #if 0
4748 /* This can happen when operator delete is protected. */
4749 my_friendly_assert (rval != error_mark_node, 250);
4750 TREE_TYPE (rval) = void_type_node;
4751 #endif
4752 return rval;
4753 }
4754
4755 case CALL_EXPR:
4756 return build_object_call (arg1, arg2);
4757 }
4758
4759 /* The comma operator can have void args. */
4760 if (TREE_CODE (arg1) == OFFSET_REF)
4761 arg1 = resolve_offset_ref (arg1);
4762 if (arg2 && TREE_CODE (arg2) == OFFSET_REF)
4763 arg2 = resolve_offset_ref (arg2);
4764 if (arg3 && TREE_CODE (arg3) == OFFSET_REF)
4765 arg3 = resolve_offset_ref (arg3);
4766
4767 if (code == COND_EXPR)
4768 {
4769 if (arg2 == NULL_TREE
4770 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4771 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4772 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4773 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4774 goto builtin;
4775 }
4776 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4777 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4778 goto builtin;
4779
4780 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4781 arg2 = integer_zero_node;
4782
4783 fns = lookup_name_nonclass (fnname);
4784 /* + Koenig lookup */
4785
4786 if (arg2 && arg3)
4787 arglist = tree_cons (NULL_TREE, arg1, tree_cons
4788 (NULL_TREE, arg2, build_tree_list (NULL_TREE, arg3)));
4789 else if (arg2)
4790 arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
4791 else
4792 arglist = build_tree_list (NULL_TREE, arg1);
4793
4794 if (fns && TREE_CODE (fns) == TREE_LIST)
4795 fns = TREE_VALUE (fns);
4796 for (; fns; fns = DECL_CHAIN (fns))
4797 {
4798 if (TREE_CODE (fns) == TEMPLATE_DECL)
4799 {
4800 templates = decl_tree_cons (NULL_TREE, fns, templates);
4801 candidates = add_template_candidate
4802 (candidates, fns, arglist, TREE_TYPE (fnname), flags);
4803 }
4804 else
4805 candidates = add_function_candidate (candidates, fns, arglist, flags);
4806 }
4807
4808 if (IS_AGGR_TYPE (TREE_TYPE (arg1)))
4809 fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 0);
4810 else
4811 fns = NULL_TREE;
4812
4813 if (fns)
4814 {
4815 tree fn = TREE_VALUE (fns);
4816 mem_arglist = tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
4817 for (; fn; fn = DECL_CHAIN (fn))
4818 {
4819 tree this_arglist;
4820
4821 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4822 this_arglist = mem_arglist;
4823 else
4824 this_arglist = arglist;
4825
4826 if (TREE_CODE (fn) == TEMPLATE_DECL)
4827 {
4828 /* A member template. */
4829 templates = decl_tree_cons (NULL_TREE, fn, templates);
4830 candidates = add_template_candidate
4831 (candidates, fn, this_arglist,
4832 TREE_TYPE (fnname), LOOKUP_NORMAL);
4833 }
4834 else
4835 candidates = add_function_candidate
4836 (candidates, fn, this_arglist, flags);
4837
4838 if (candidates)
4839 candidates->basetype_path = TREE_PURPOSE (fns);
4840 }
4841 }
4842
4843 {
4844 tree args[3];
4845
4846 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4847 to know about two args; a builtin candidate will always have a first
4848 parameter of type bool. We'll handle that in
4849 build_builtin_candidate. */
4850 if (code == COND_EXPR)
4851 {
4852 args[0] = arg2;
4853 args[1] = arg3;
4854 args[2] = arg1;
4855 }
4856 else
4857 {
4858 args[0] = arg1;
4859 args[1] = arg2;
4860 args[2] = NULL_TREE;
4861 }
4862
4863 candidates = add_builtin_candidates
4864 (candidates, code, code2, fnname, args, flags);
4865 }
4866
4867 if (! any_viable (candidates))
4868 {
4869 switch (code)
4870 {
4871 case POSTINCREMENT_EXPR:
4872 case POSTDECREMENT_EXPR:
4873 /* Look for an `operator++ (int)'. If they didn't have
4874 one, then we fall back to the old way of doing things. */
4875 if (flags & LOOKUP_COMPLAIN)
4876 cp_pedwarn ("no `%D (int)' declared for postfix `%s', trying prefix operator instead",
4877 fnname, opname_tab [code]);
4878 if (code == POSTINCREMENT_EXPR)
4879 code = PREINCREMENT_EXPR;
4880 else
4881 code = PREDECREMENT_EXPR;
4882 return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
4883
4884 /* The caller will deal with these. */
4885 case ADDR_EXPR:
4886 case COMPOUND_EXPR:
4887 case COMPONENT_REF:
4888 return NULL_TREE;
4889 }
4890 if (flags & LOOKUP_COMPLAIN)
4891 {
4892 op_error (code, code2, arg1, arg2, arg3, "no match");
4893 print_z_candidates (candidates);
4894 }
4895 return error_mark_node;
4896 }
4897 candidates = splice_viable (candidates);
4898 cand = tourney (candidates);
4899
4900 if (cand == 0)
4901 {
4902 if (flags & LOOKUP_COMPLAIN)
4903 {
4904 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4905 print_z_candidates (candidates);
4906 }
4907 return error_mark_node;
4908 }
4909
4910 if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4911 {
4912 extern int warn_synth;
4913 if (warn_synth
4914 && fnname == ansi_opname[MODIFY_EXPR]
4915 && DECL_ARTIFICIAL (cand->fn)
4916 && candidates->next
4917 && ! candidates->next->next)
4918 {
4919 cp_warning ("using synthesized `%#D' for copy assignment",
4920 cand->fn);
4921 cp_warning_at (" where cfront would use `%#D'",
4922 cand == candidates
4923 ? candidates->next->fn
4924 : candidates->fn);
4925 }
4926
4927 if (DECL_FUNCTION_MEMBER_P (cand->fn))
4928 enforce_access (cand->basetype_path, cand->fn);
4929
4930 /* Pedantically, normal function declarations are never considered
4931 to refer to template instantiations, but we won't implement that
4932 until we implement full template instantiation syntax. */
4933 if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)
4934 && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
4935 add_maybe_template (cand->fn, templates);
4936
4937 return build_over_call
4938 (cand->fn, cand->convs,
4939 TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
4940 ? mem_arglist : arglist,
4941 LOOKUP_NORMAL);
4942 }
4943
4944 /* Check for comparison of different enum types. */
4945 switch (code)
4946 {
4947 case GT_EXPR:
4948 case LT_EXPR:
4949 case GE_EXPR:
4950 case LE_EXPR:
4951 case EQ_EXPR:
4952 case NE_EXPR:
4953 if (flag_int_enum_equivalence == 0
4954 && TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4955 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4956 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4957 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
4958 {
4959 cp_warning ("comparison between `%#T' and `%#T'",
4960 TREE_TYPE (arg1), TREE_TYPE (arg2));
4961 }
4962 }
4963
4964 /* We need to strip any leading REF_BIND so that bitfields don't cause
4965 errors. This should not remove any important conversions, because
4966 builtins don't apply to class objects directly. */
4967 conv = TREE_VEC_ELT (cand->convs, 0);
4968 if (TREE_CODE (conv) == REF_BIND)
4969 conv = TREE_OPERAND (conv, 0);
4970 arg1 = convert_like (conv, arg1);
4971 if (arg2)
4972 arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
4973 if (arg3)
4974 arg3 = convert_like (TREE_VEC_ELT (cand->convs, 2), arg3);
4975
4976 builtin:
4977 switch (code)
4978 {
4979 case MODIFY_EXPR:
4980 return build_modify_expr (arg1, code2, arg2);
4981
4982 case INDIRECT_REF:
4983 return build_indirect_ref (arg1, "unary *");
4984
4985 case PLUS_EXPR:
4986 case MINUS_EXPR:
4987 case MULT_EXPR:
4988 case TRUNC_DIV_EXPR:
4989 case GT_EXPR:
4990 case LT_EXPR:
4991 case GE_EXPR:
4992 case LE_EXPR:
4993 case EQ_EXPR:
4994 case NE_EXPR:
4995 case MAX_EXPR:
4996 case MIN_EXPR:
4997 case LSHIFT_EXPR:
4998 case RSHIFT_EXPR:
4999 case TRUNC_MOD_EXPR:
5000 case BIT_AND_EXPR:
5001 case BIT_IOR_EXPR:
5002 case BIT_XOR_EXPR:
5003 case TRUTH_ANDIF_EXPR:
5004 case TRUTH_ORIF_EXPR:
5005 return build_binary_op_nodefault (code, arg1, arg2, code);
5006
5007 case CONVERT_EXPR:
5008 case NEGATE_EXPR:
5009 case BIT_NOT_EXPR:
5010 case TRUTH_NOT_EXPR:
5011 case PREINCREMENT_EXPR:
5012 case POSTINCREMENT_EXPR:
5013 case PREDECREMENT_EXPR:
5014 case POSTDECREMENT_EXPR:
5015 case REALPART_EXPR:
5016 case IMAGPART_EXPR:
5017 return build_unary_op (code, arg1, candidates != 0);
5018
5019 case ARRAY_REF:
5020 return build_array_ref (arg1, arg2);
5021
5022 case COND_EXPR:
5023 return build_conditional_expr (arg1, arg2, arg3);
5024
5025 case MEMBER_REF:
5026 return build_m_component_ref
5027 (build_indirect_ref (arg1, NULL_PTR), arg2);
5028
5029 /* The caller will deal with these. */
5030 case ADDR_EXPR:
5031 case COMPONENT_REF:
5032 case COMPOUND_EXPR:
5033 return NULL_TREE;
5034
5035 default:
5036 my_friendly_abort (367);
5037 }
5038 }
5039
5040 static void
5041 enforce_access (basetype_path, function)
5042 tree basetype_path, function;
5043 {
5044 tree access = compute_access (basetype_path, function);
5045
5046 if (access == access_private_node)
5047 {
5048 cp_error_at ("`%+#D' is %s", function,
5049 TREE_PRIVATE (function) ? "private"
5050 : "from private base class");
5051 error ("within this context");
5052 }
5053 else if (access == access_protected_node)
5054 {
5055 cp_error_at ("`%+#D' %s", function,
5056 TREE_PROTECTED (function) ? "is protected"
5057 : "has protected accessibility");
5058 error ("within this context");
5059 }
5060 }
5061
5062 /* Perform the conversions in CONVS on the expression EXPR. */
5063
5064 static tree
5065 convert_like (convs, expr)
5066 tree convs, expr;
5067 {
5068 if (ICS_BAD_FLAG (convs)
5069 && TREE_CODE (convs) != USER_CONV
5070 && TREE_CODE (convs) != AMBIG_CONV)
5071 {
5072 tree t = convs;
5073 for (; t; t = TREE_OPERAND (t, 0))
5074 {
5075 if (TREE_CODE (t) == USER_CONV)
5076 {
5077 expr = convert_like (t, expr);
5078 break;
5079 }
5080 else if (TREE_CODE (t) == AMBIG_CONV)
5081 return convert_like (t, expr);
5082 else if (TREE_CODE (t) == IDENTITY_CONV)
5083 break;
5084 }
5085 return convert_for_initialization
5086 (NULL_TREE, TREE_TYPE (convs), expr, LOOKUP_NORMAL,
5087 "conversion", NULL_TREE, 0);
5088 }
5089
5090 switch (TREE_CODE (convs))
5091 {
5092 case USER_CONV:
5093 {
5094 tree fn = TREE_OPERAND (convs, 1);
5095 tree args;
5096 enforce_access (TREE_OPERAND (convs, 3), fn);
5097
5098 if (DECL_CONSTRUCTOR_P (fn))
5099 {
5100 tree t = build_int_2 (0, 0);
5101 TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
5102
5103 args = build_tree_list (NULL_TREE, expr);
5104 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5105 args = tree_cons (NULL_TREE, integer_one_node, args);
5106 args = tree_cons (NULL_TREE, t, args);
5107 }
5108 else
5109 args = build_this (expr);
5110 expr = build_over_call
5111 (TREE_OPERAND (convs, 1), TREE_OPERAND (convs, 2),
5112 args, LOOKUP_NORMAL);
5113
5114 /* If this is a constructor or a function returning an aggr type,
5115 we need to build up a TARGET_EXPR. */
5116 if (DECL_CONSTRUCTOR_P (fn))
5117 expr = build_cplus_new (TREE_TYPE (convs), expr);
5118
5119 return expr;
5120 }
5121 case IDENTITY_CONV:
5122 if (type_unknown_p (expr))
5123 expr = instantiate_type (TREE_TYPE (convs), expr, 1);
5124 if (TREE_READONLY_DECL_P (expr))
5125 expr = decl_constant_value (expr);
5126 return expr;
5127 case AMBIG_CONV:
5128 /* Call build_user_type_conversion again for the error. */
5129 return build_user_type_conversion
5130 (TREE_TYPE (convs), TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
5131 };
5132
5133 expr = convert_like (TREE_OPERAND (convs, 0), expr);
5134 if (expr == error_mark_node)
5135 return error_mark_node;
5136
5137 switch (TREE_CODE (convs))
5138 {
5139 case RVALUE_CONV:
5140 if (! IS_AGGR_TYPE (TREE_TYPE (convs)))
5141 return expr;
5142 /* else fall through */
5143 case BASE_CONV:
5144 return build_user_type_conversion
5145 (TREE_TYPE (convs), expr, LOOKUP_NORMAL);
5146 case REF_BIND:
5147 return convert_to_reference
5148 (TREE_TYPE (convs), expr,
5149 CONV_IMPLICIT, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
5150 error_mark_node);
5151 case LVALUE_CONV:
5152 return decay_conversion (expr);
5153 }
5154 return ocp_convert (TREE_TYPE (convs), expr, CONV_IMPLICIT,
5155 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
5156 }
5157
5158 static tree
5159 convert_default_arg (type, arg)
5160 tree type, arg;
5161 {
5162 arg = break_out_target_exprs (arg);
5163
5164 if (TREE_CODE (arg) == CONSTRUCTOR)
5165 {
5166 arg = digest_init (type, arg, 0);
5167 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5168 "default argument", 0, 0);
5169 }
5170 else
5171 {
5172 /* This could get clobbered by the following call. */
5173 if (TREE_HAS_CONSTRUCTOR (arg))
5174 arg = copy_node (arg);
5175
5176 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5177 "default argument", 0, 0);
5178 #ifdef PROMOTE_PROTOTYPES
5179 if ((TREE_CODE (type) == INTEGER_TYPE
5180 || TREE_CODE (type) == ENUMERAL_TYPE)
5181 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5182 arg = default_conversion (arg);
5183 #endif
5184 }
5185
5186 return arg;
5187 }
5188
5189 static tree
5190 build_over_call (fn, convs, args, flags)
5191 tree fn, convs, args;
5192 int flags;
5193 {
5194 tree converted_args = NULL_TREE;
5195 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5196 tree conv, arg, val;
5197 int i = 0;
5198 int is_method = 0;
5199
5200 if (args && TREE_CODE (args) != TREE_LIST)
5201 args = build_tree_list (NULL_TREE, args);
5202 arg = args;
5203
5204 /* The implicit parameters to a constructor are not considered by overload
5205 resolution, and must be of the proper type. */
5206 if (DECL_CONSTRUCTOR_P (fn))
5207 {
5208 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
5209 arg = TREE_CHAIN (arg);
5210 parm = TREE_CHAIN (parm);
5211 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
5212 {
5213 converted_args = tree_cons
5214 (NULL_TREE, TREE_VALUE (arg), converted_args);
5215 arg = TREE_CHAIN (arg);
5216 parm = TREE_CHAIN (parm);
5217 }
5218 }
5219 /* Bypass access control for 'this' parameter. */
5220 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5221 {
5222 tree parmtype = TREE_VALUE (parm);
5223 tree argtype = TREE_TYPE (TREE_VALUE (arg));
5224 if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
5225 {
5226 int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
5227 < TYPE_VOLATILE (TREE_TYPE (argtype)));
5228 int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
5229 < TYPE_READONLY (TREE_TYPE (argtype)));
5230 char *p = (dv && dc ? "const and volatile"
5231 : dc ? "const" : dv ? "volatile" : "");
5232
5233 cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
5234 TREE_TYPE (argtype), fn, p);
5235 }
5236 converted_args = tree_cons
5237 (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
5238 converted_args);
5239 parm = TREE_CHAIN (parm);
5240 arg = TREE_CHAIN (arg);
5241 ++i;
5242 is_method = 1;
5243 }
5244
5245 for (; arg && parm;
5246 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5247 {
5248 tree type = TREE_VALUE (parm);
5249
5250 conv = TREE_VEC_ELT (convs, i);
5251 if (ICS_BAD_FLAG (conv))
5252 {
5253 tree t = conv;
5254 val = TREE_VALUE (arg);
5255
5256 for (; t; t = TREE_OPERAND (t, 0))
5257 {
5258 if (TREE_CODE (t) == USER_CONV
5259 || TREE_CODE (t) == AMBIG_CONV)
5260 {
5261 val = convert_like (t, val);
5262 break;
5263 }
5264 else if (TREE_CODE (t) == IDENTITY_CONV)
5265 break;
5266 }
5267 val = convert_for_initialization
5268 (NULL_TREE, type, val, LOOKUP_NORMAL,
5269 "argument passing", fn, i - is_method);
5270 }
5271 else
5272 val = convert_like (conv, TREE_VALUE (arg));
5273
5274 #ifdef PROMOTE_PROTOTYPES
5275 if ((TREE_CODE (type) == INTEGER_TYPE
5276 || TREE_CODE (type) == ENUMERAL_TYPE)
5277 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
5278 val = default_conversion (val);
5279 #endif
5280 converted_args = tree_cons (NULL_TREE, val, converted_args);
5281 }
5282
5283 /* Default arguments */
5284 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm))
5285 {
5286 tree arg = TREE_PURPOSE (parm);
5287
5288 if (DECL_TEMPLATE_INFO (fn))
5289 /* This came from a template. Instantiate the default arg here,
5290 not in tsubst. */
5291 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5292 TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
5293 converted_args = tree_cons
5294 (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
5295 converted_args);
5296 }
5297
5298 /* Ellipsis */
5299 for (; arg; arg = TREE_CHAIN (arg))
5300 {
5301 val = TREE_VALUE (arg);
5302
5303 if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
5304 && (TYPE_PRECISION (TREE_TYPE (val))
5305 < TYPE_PRECISION (double_type_node)))
5306 /* Convert `float' to `double'. */
5307 val = cp_convert (double_type_node, val);
5308 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
5309 && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
5310 cp_warning ("cannot pass objects of type `%T' through `...'",
5311 TREE_TYPE (val));
5312 else
5313 /* Convert `short' and `char' to full-size `int'. */
5314 val = default_conversion (val);
5315
5316 converted_args = tree_cons (NULL_TREE, val, converted_args);
5317 }
5318
5319 converted_args = nreverse (converted_args);
5320
5321 /* Avoid actually calling copy constructors and copy assignment operators,
5322 if possible. */
5323 if (DECL_CONSTRUCTOR_P (fn)
5324 && TREE_VEC_LENGTH (convs) == 1
5325 && copy_args_p (fn))
5326 {
5327 tree targ;
5328 arg = TREE_VALUE (TREE_CHAIN (converted_args));
5329
5330 /* Pull out the real argument, disregarding const-correctness. */
5331 targ = arg;
5332 while (TREE_CODE (targ) == NOP_EXPR
5333 || TREE_CODE (targ) == NON_LVALUE_EXPR
5334 || TREE_CODE (targ) == CONVERT_EXPR)
5335 targ = TREE_OPERAND (targ, 0);
5336 if (TREE_CODE (targ) == ADDR_EXPR)
5337 {
5338 targ = TREE_OPERAND (targ, 0);
5339 if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
5340 TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
5341 targ = NULL_TREE;
5342 }
5343 else
5344 targ = NULL_TREE;
5345
5346 if (targ)
5347 arg = targ;
5348 else
5349 arg = build_indirect_ref (arg, 0);
5350
5351 /* [class.copy]: the copy constructor is implicitly defined even if
5352 the implementation elided its use. */
5353 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5354 mark_used (fn);
5355
5356 /* If we're creating a temp and we already have one, don't create a
5357 new one. If we're not creating a temp but we get one, use
5358 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5359 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5360 temp or an INIT_EXPR otherwise. */
5361 if (integer_zerop (TREE_VALUE (args)))
5362 {
5363 if (! real_lvalue_p (arg))
5364 return arg;
5365 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5366 {
5367 val = build (VAR_DECL, DECL_CONTEXT (fn));
5368 layout_decl (val, 0);
5369 val = build (TARGET_EXPR, DECL_CONTEXT (fn), val, arg, 0, 0);
5370 TREE_SIDE_EFFECTS (val) = 1;
5371 return val;
5372 }
5373 }
5374 else if (! real_lvalue_p (arg)
5375 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5376 {
5377 tree to = stabilize_reference
5378 (build_indirect_ref (TREE_VALUE (args), 0));
5379 val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5380 TREE_SIDE_EFFECTS (val) = 1;
5381 return build_unary_op (ADDR_EXPR, val, 0);
5382 }
5383 }
5384 else if (DECL_NAME (fn) == ansi_opname[MODIFY_EXPR]
5385 && copy_args_p (fn)
5386 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5387 {
5388 tree to = stabilize_reference
5389 (build_indirect_ref (TREE_VALUE (converted_args), 0));
5390 arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
5391 val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5392 TREE_SIDE_EFFECTS (val) = 1;
5393 return val;
5394 }
5395
5396 mark_used (fn);
5397
5398 if (DECL_CONTEXT (fn) && IS_SIGNATURE (DECL_CONTEXT (fn)))
5399 return build_signature_method_call (fn, converted_args);
5400 else if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5401 {
5402 tree t, *p = &TREE_VALUE (converted_args);
5403 tree binfo = get_binfo
5404 (DECL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0);
5405 *p = convert_pointer_to_real (binfo, *p);
5406 if (TREE_SIDE_EFFECTS (*p))
5407 *p = save_expr (*p);
5408 t = build_pointer_type (TREE_TYPE (fn));
5409 fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn));
5410 TREE_TYPE (fn) = t;
5411 }
5412 else if (DECL_INLINE (fn))
5413 fn = inline_conversion (fn);
5414 else
5415 fn = build_addr_func (fn);
5416
5417 fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
5418 if (TREE_TYPE (fn) == void_type_node)
5419 return fn;
5420 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5421 fn = build_cplus_new (TREE_TYPE (fn), fn);
5422 return convert_from_reference (require_complete_type (fn));
5423 }
5424
5425 static tree
5426 build_new_method_call (instance, name, args, basetype_path, flags)
5427 tree instance, name, args, basetype_path;
5428 int flags;
5429 {
5430 struct z_candidate *candidates = 0, *cand;
5431 tree basetype, mem_args, fns, instance_ptr;
5432 tree pretty_name;
5433 tree user_args = args;
5434 tree templates = NULL_TREE;
5435
5436 /* If there is an extra argument for controlling virtual bases,
5437 remove it for error reporting. */
5438 if (flags & LOOKUP_HAS_IN_CHARGE)
5439 user_args = TREE_CHAIN (args);
5440
5441 args = resolve_args (args);
5442
5443 if (args == error_mark_node)
5444 return error_mark_node;
5445
5446 if (instance == NULL_TREE)
5447 basetype = BINFO_TYPE (basetype_path);
5448 else
5449 {
5450 if (TREE_CODE (instance) == OFFSET_REF)
5451 instance = resolve_offset_ref (instance);
5452 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5453 instance = convert_from_reference (instance);
5454 basetype = TREE_TYPE (instance);
5455
5456 /* XXX this should be handled before we get here. */
5457 if (! IS_AGGR_TYPE (basetype)
5458 && ! (TYPE_LANG_SPECIFIC (basetype)
5459 && (IS_SIGNATURE_POINTER (basetype)
5460 || IS_SIGNATURE_REFERENCE (basetype))))
5461 {
5462 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5463 cp_error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5464 name, instance, basetype);
5465
5466 return error_mark_node;
5467 }
5468
5469 /* If `instance' is a signature pointer/reference and `name' is
5470 not a constructor, we are calling a signature member function.
5471 In that case set the `basetype' to the signature type. */
5472 if ((IS_SIGNATURE_POINTER (basetype)
5473 || IS_SIGNATURE_REFERENCE (basetype))
5474 && TYPE_IDENTIFIER (basetype) != name)
5475 basetype = SIGNATURE_TYPE (basetype);
5476 }
5477
5478 if (basetype_path == NULL_TREE)
5479 basetype_path = TYPE_BINFO (basetype);
5480
5481 if (instance)
5482 {
5483 instance_ptr = build_this (instance);
5484
5485 /* XXX this should be handled before we get here. */
5486 fns = build_field_call (basetype_path, instance_ptr, name, args);
5487 if (fns)
5488 return fns;
5489 }
5490 else
5491 {
5492 instance_ptr = build_int_2 (0, 0);
5493 TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
5494 }
5495
5496 pretty_name
5497 = (name == ctor_identifier ? constructor_name_full (basetype) : name);
5498
5499 fns = lookup_fnfields (basetype_path, name, 1);
5500
5501 if (fns == error_mark_node)
5502 return error_mark_node;
5503 if (fns)
5504 {
5505 tree t = TREE_VALUE (fns);
5506 if (name == ctor_identifier && TYPE_USES_VIRTUAL_BASECLASSES (basetype)
5507 && ! (flags & LOOKUP_HAS_IN_CHARGE))
5508 {
5509 flags |= LOOKUP_HAS_IN_CHARGE;
5510 args = tree_cons (NULL_TREE, integer_one_node, args);
5511 }
5512 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5513 for (; t; t = DECL_CHAIN (t))
5514 {
5515 tree this_arglist;
5516
5517 /* We can end up here for copy-init of same or base class. */
5518 if (name == ctor_identifier
5519 && (flags & LOOKUP_ONLYCONVERTING)
5520 && DECL_NONCONVERTING_P (t))
5521 continue;
5522 if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
5523 this_arglist = mem_args;
5524 else
5525 this_arglist = args;
5526
5527 if (TREE_CODE (t) == TEMPLATE_DECL)
5528 {
5529 /* A member template. */
5530 templates = decl_tree_cons (NULL_TREE, t, templates);
5531 candidates =
5532 add_template_candidate (candidates, t,
5533 this_arglist,
5534 TREE_TYPE (name),
5535 LOOKUP_NORMAL);
5536 }
5537 else
5538 candidates = add_function_candidate (candidates, t,
5539 this_arglist, flags);
5540
5541 if (candidates)
5542 candidates->basetype_path = TREE_PURPOSE (fns);
5543 }
5544 }
5545
5546 if (! any_viable (candidates))
5547 {
5548 /* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
5549 if (flags & LOOKUP_SPECULATIVELY)
5550 return NULL_TREE;
5551 cp_error ("no matching function for call to `%T::%D (%A)%V'", basetype,
5552 pretty_name, user_args, TREE_TYPE (TREE_TYPE (instance_ptr)));
5553 print_z_candidates (candidates);
5554 return error_mark_node;
5555 }
5556 candidates = splice_viable (candidates);
5557 cand = tourney (candidates);
5558
5559 if (cand == 0)
5560 {
5561 cp_error ("call of overloaded `%D(%A)' is ambiguous", pretty_name,
5562 user_args);
5563 print_z_candidates (candidates);
5564 return error_mark_node;
5565 }
5566
5567 enforce_access (cand->basetype_path, cand->fn);
5568 if (DECL_ABSTRACT_VIRTUAL_P (cand->fn)
5569 && instance == current_class_ref
5570 && DECL_CONSTRUCTOR_P (current_function_decl)
5571 && ! (flags & LOOKUP_NONVIRTUAL)
5572 && value_member (cand->fn, get_abstract_virtuals (basetype)))
5573 cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
5574 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5575 && TREE_CODE (instance_ptr) == NOP_EXPR
5576 && TREE_OPERAND (instance_ptr, 0) == error_mark_node)
5577 cp_error ("cannot call member function `%D' without object", cand->fn);
5578
5579 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5580 && ((instance == current_class_ref && (dtor_label || ctor_label))
5581 || resolves_to_fixed_type_p (instance, 0)))
5582 flags |= LOOKUP_NONVIRTUAL;
5583
5584 /* Pedantically, normal function declarations are never considered
5585 to refer to template instantiations, but we won't implement that
5586 until we implement full template instantiation syntax. */
5587 if (templates && ! cand->template && ! DECL_INITIAL (cand->fn))
5588 add_maybe_template (cand->fn, templates);
5589
5590 return build_over_call
5591 (cand->fn, cand->convs,
5592 TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
5593 flags);
5594 }
5595
5596 /* Compare two implicit conversion sequences that differ only in their
5597 qualification conversion. Subroutine of compare_ics. */
5598
5599 static int
5600 compare_qual (ics1, ics2)
5601 tree ics1, ics2;
5602 {
5603 tree to1 = TREE_TYPE (ics1);
5604 tree to2 = TREE_TYPE (ics2);
5605
5606 to1 = TREE_TYPE (to1);
5607 to2 = TREE_TYPE (to2);
5608
5609 if (TREE_CODE (to1) == OFFSET_TYPE)
5610 {
5611 to1 = TREE_TYPE (to1);
5612 to2 = TREE_TYPE (to2);
5613 }
5614
5615 if (TYPE_READONLY (to1) >= TYPE_READONLY (to2)
5616 && TYPE_VOLATILE (to1) > TYPE_VOLATILE (to2))
5617 return -1;
5618 else if (TYPE_READONLY (to1) > TYPE_READONLY (to2)
5619 && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5620 return -1;
5621 else if (TYPE_READONLY (to1) <= TYPE_READONLY (to2)
5622 && TYPE_VOLATILE (to1) < TYPE_VOLATILE (to2))
5623 return 1;
5624 else if (TYPE_READONLY (to1) < TYPE_READONLY (to2)
5625 && TYPE_VOLATILE (to1) == TYPE_VOLATILE (to2))
5626 return 1;
5627 return 0;
5628 }
5629
5630 /* Determine whether standard conversion sequence ICS1 is a proper
5631 subsequence of ICS2. We assume that a conversion of the same code
5632 between the same types indicates a subsequence. */
5633
5634 static int
5635 is_subseq (ics1, ics2)
5636 tree ics1, ics2;
5637 {
5638 for (;; ics2 = TREE_OPERAND (ics2, 0))
5639 {
5640 if (TREE_CODE (ics2) == TREE_CODE (ics1)
5641 && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
5642 && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5643 TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
5644 return 1;
5645
5646 if (TREE_CODE (ics2) == USER_CONV
5647 || TREE_CODE (ics2) == AMBIG_CONV
5648 || TREE_CODE (ics2) == IDENTITY_CONV)
5649 return 0;
5650 }
5651 }
5652
5653 /* Compare two implicit conversion sequences according to the rules set out in
5654 [over.ics.rank]. Return values:
5655
5656 1: ics1 is better than ics2
5657 -1: ics2 is better than ics1
5658 0: ics1 and ics2 are indistinguishable */
5659
5660 static int
5661 compare_ics (ics1, ics2)
5662 tree ics1, ics2;
5663 {
5664 tree main1, main2;
5665
5666 if (TREE_CODE (ics1) == QUAL_CONV)
5667 main1 = TREE_OPERAND (ics1, 0);
5668 else
5669 main1 = ics1;
5670
5671 if (TREE_CODE (ics2) == QUAL_CONV)
5672 main2 = TREE_OPERAND (ics2, 0);
5673 else
5674 main2 = ics2;
5675
5676 /* Conversions for `this' are PTR_CONVs, but we compare them as though
5677 they were REF_BINDs. */
5678 if (ICS_THIS_FLAG (ics1))
5679 {
5680 tree t = main1;
5681 if (TREE_CODE (t) == PTR_CONV)
5682 t = TREE_OPERAND (t, 0);
5683 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5684 t = build_conv (REF_BIND, TREE_TYPE (ics1), t);
5685 ICS_STD_RANK (t) = ICS_STD_RANK (main1);
5686 main1 = ics1 = t;
5687 }
5688 if (ICS_THIS_FLAG (ics2))
5689 {
5690 tree t = main2;
5691 if (TREE_CODE (t) == PTR_CONV)
5692 t = TREE_OPERAND (t, 0);
5693 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5694 t = build_conv (REF_BIND, TREE_TYPE (ics2), t);
5695 ICS_STD_RANK (t) = ICS_STD_RANK (main2);
5696 main2 = ics2 = t;
5697 }
5698
5699 if (ICS_RANK (ics1) > ICS_RANK (ics2))
5700 return -1;
5701 else if (ICS_RANK (ics1) < ICS_RANK (ics2))
5702 return 1;
5703
5704 if (ICS_RANK (ics1) == BAD_RANK)
5705 {
5706 if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5707 || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5708 return -1;
5709 else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5710 || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5711 return 1;
5712
5713 /* else fall through */
5714 }
5715
5716 /* User-defined conversion sequence U1 is a better conversion sequence
5717 than another user-defined conversion sequence U2 if they contain the
5718 same user-defined conversion operator or constructor and if the sec-
5719 ond standard conversion sequence of U1 is better than the second
5720 standard conversion sequence of U2. */
5721
5722 if (ICS_USER_FLAG (ics1))
5723 {
5724 tree t1, t2;
5725
5726 for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5727 if (TREE_CODE (t1) == AMBIG_CONV)
5728 return 0;
5729 for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5730 if (TREE_CODE (t2) == AMBIG_CONV)
5731 return 0;
5732
5733 if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5734 return 0;
5735 else if (ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5736 return -1;
5737 else if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5738 return 1;
5739
5740 /* else fall through */
5741 }
5742
5743 #if 0 /* Handled by ranking */
5744 /* A conversion that is not a conversion of a pointer, or pointer to
5745 member, to bool is better than another conversion that is such a
5746 conversion. */
5747 #endif
5748
5749 if (TREE_CODE (main1) != TREE_CODE (main2))
5750 {
5751 /* ...if S1 is a proper subsequence of S2 */
5752 if (is_subseq (main1, main2))
5753 return 1;
5754 if (is_subseq (main2, main1))
5755 return -1;
5756 return 0;
5757 }
5758
5759 if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
5760 || TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
5761 {
5762 tree to1 = TREE_TYPE (main1);
5763 tree from1 = TREE_TYPE (TREE_OPERAND (main1, 0));
5764 tree to2 = TREE_TYPE (main2);
5765 tree from2 = TREE_TYPE (TREE_OPERAND (main2, 0));
5766 int distf, distt;
5767
5768 /* Standard conversion sequence S1 is a better conversion sequence than
5769 standard conversion sequence S2 if...
5770
5771 S1 and S2 differ only in their qualification conversion and they
5772 yield types identical except for cv-qualifiers and S2 adds all the
5773 qualifiers that S1 adds (and in the same places) and S2 adds yet
5774 more cv-qualifiers than S1, or the similar case with reference
5775 binding15). */
5776 if (TREE_CODE (main1) == REF_BIND)
5777 {
5778 if (TYPE_MAIN_VARIANT (TREE_TYPE (to1))
5779 == TYPE_MAIN_VARIANT (TREE_TYPE (to2)))
5780 return compare_qual (ics1, ics2);
5781 }
5782 else if (TREE_CODE (main1) != BASE_CONV && from1 == from2 && to1 == to2)
5783 return compare_qual (ics1, ics2);
5784
5785 if (TYPE_PTRMEMFUNC_P (to1))
5786 {
5787 to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
5788 from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
5789 }
5790 else if (TREE_CODE (main1) != BASE_CONV)
5791 {
5792 to1 = TREE_TYPE (to1);
5793 if (TREE_CODE (main1) != REF_BIND)
5794 from1 = TREE_TYPE (from1);
5795
5796 if (TREE_CODE (to1) == OFFSET_TYPE)
5797 {
5798 to1 = TYPE_OFFSET_BASETYPE (to1);
5799 from1 = TYPE_OFFSET_BASETYPE (from1);
5800 }
5801 }
5802
5803 if (TYPE_PTRMEMFUNC_P (to2))
5804 {
5805 to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
5806 from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
5807 }
5808 else if (TREE_CODE (main1) != BASE_CONV)
5809 {
5810 to2 = TREE_TYPE (to2);
5811 if (TREE_CODE (main1) != REF_BIND)
5812 from2 = TREE_TYPE (from2);
5813
5814 if (TREE_CODE (to2) == OFFSET_TYPE)
5815 {
5816 to2 = TYPE_OFFSET_BASETYPE (to2);
5817 from2 = TYPE_OFFSET_BASETYPE (from2);
5818 }
5819 }
5820
5821 if (! (IS_AGGR_TYPE (from1) && IS_AGGR_TYPE (from2)))
5822 return 0;
5823
5824 /* The sense of pmem conversions is reversed from that of the other
5825 conversions. */
5826 if (TREE_CODE (main1) == PMEM_CONV)
5827 {
5828 tree t = from1; from1 = from2; from2 = t;
5829 t = to1; to1 = to2; to2 = t;
5830 }
5831
5832 distf = get_base_distance (from1, from2, 0, 0);
5833 if (distf == -1)
5834 {
5835 distf = -get_base_distance (from2, from1, 0, 0);
5836 if (distf == 1)
5837 return 0;
5838 }
5839
5840 /* If class B is derived directly or indirectly from class A,
5841 conver- sion of B* to A* is better than conversion of B* to
5842 void*, and conversion of A* to void* is better than
5843 conversion of B* to void*. */
5844
5845 if (TREE_CODE (to1) == VOID_TYPE && TREE_CODE (to2) == VOID_TYPE)
5846 {
5847 if (distf > 0)
5848 return 1;
5849 else if (distf < 0)
5850 return -1;
5851 }
5852 else if (TREE_CODE (to2) == VOID_TYPE && IS_AGGR_TYPE (to1)
5853 && get_base_distance (to1, from1, 0, 0) != -1)
5854 return 1;
5855 else if (TREE_CODE (to1) == VOID_TYPE && IS_AGGR_TYPE (to2)
5856 && get_base_distance (to2, from2, 0, 0) != -1)
5857 return -1;
5858
5859 if (! (IS_AGGR_TYPE (to1) && IS_AGGR_TYPE (to2)))
5860 return 0;
5861
5862 /* If class B is derived directly or indirectly from class A and class
5863 C is derived directly or indirectly from B */
5864
5865 distt = get_base_distance (to1, to2, 0, 0);
5866 if (distt == -1)
5867 {
5868 distt = -get_base_distance (to2, to1, 0, 0);
5869 if (distt == 1)
5870 return 0;
5871 }
5872
5873 /* --conversion of C* to B* is better than conversion of C* to A*, */
5874 if (distf == 0)
5875 {
5876 if (distt > 0)
5877 return -1;
5878 else if (distt < 0)
5879 return 1;
5880 }
5881 /* --conversion of B* to A* is better than conversion of C* to A*, */
5882 else if (distt == 0)
5883 {
5884 if (distf > 0)
5885 return 1;
5886 else if (distf < 0)
5887 return -1;
5888 }
5889 }
5890 else if (TREE_CODE (TREE_TYPE (main1)) == POINTER_TYPE
5891 || TYPE_PTRMEMFUNC_P (TREE_TYPE (main1)))
5892 {
5893 if (TREE_TYPE (main1) == TREE_TYPE (main2))
5894 return compare_qual (ics1, ics2);
5895
5896 #if 0 /* This is now handled by making identity better than anything else. */
5897 /* existing practice, not WP-endorsed: const char * -> const char *
5898 is better than char * -> const char *. (jason 6/29/96) */
5899 if (TREE_TYPE (ics1) == TREE_TYPE (ics2))
5900 return -compare_qual (main1, main2);
5901 #endif
5902 }
5903
5904 return 0;
5905 }
5906
5907 /* The source type for this standard conversion sequence. */
5908
5909 static tree
5910 source_type (t)
5911 tree t;
5912 {
5913 for (;; t = TREE_OPERAND (t, 0))
5914 {
5915 if (TREE_CODE (t) == USER_CONV
5916 || TREE_CODE (t) == AMBIG_CONV
5917 || TREE_CODE (t) == IDENTITY_CONV)
5918 return TREE_TYPE (t);
5919 }
5920 my_friendly_abort (1823);
5921 }
5922
5923 /* Compare two candidates for overloading as described in
5924 [over.match.best]. Return values:
5925
5926 1: cand1 is better than cand2
5927 -1: cand2 is better than cand1
5928 0: cand1 and cand2 are indistinguishable */
5929
5930 static int
5931 joust (cand1, cand2)
5932 struct z_candidate *cand1, *cand2;
5933 {
5934 int winner = 0;
5935 int i, off1 = 0, off2 = 0, len;
5936
5937 /* Candidates that involve bad conversions are always worse than those
5938 that don't. */
5939 if (cand1->viable > cand2->viable)
5940 return 1;
5941 if (cand1->viable < cand2->viable)
5942 return -1;
5943
5944 /* a viable function F1
5945 is defined to be a better function than another viable function F2 if
5946 for all arguments i, ICSi(F1) is not a worse conversion sequence than
5947 ICSi(F2), and then */
5948
5949 /* for some argument j, ICSj(F1) is a better conversion sequence than
5950 ICSj(F2) */
5951
5952 /* For comparing static and non-static member functions, we ignore the
5953 implicit object parameter of the non-static function. The WP says to
5954 pretend that the static function has an object parm, but that won't
5955 work with operator overloading. */
5956 len = TREE_VEC_LENGTH (cand1->convs);
5957 if (len != TREE_VEC_LENGTH (cand2->convs))
5958 {
5959 if (DECL_STATIC_FUNCTION_P (cand1->fn)
5960 && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5961 off2 = 1;
5962 else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5963 && DECL_STATIC_FUNCTION_P (cand2->fn))
5964 {
5965 off1 = 1;
5966 --len;
5967 }
5968 else
5969 my_friendly_abort (42);
5970 }
5971
5972 for (i = 0; i < len; ++i)
5973 {
5974 tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
5975 tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
5976 int comp = compare_ics (t1, t2);
5977
5978 if (comp != 0)
5979 {
5980 #if 0 /* move this warning to tourney. */
5981 if (warn_sign_promo
5982 && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
5983 && TREE_CODE (t1) == STD_CONV
5984 && TREE_CODE (t2) == STD_CONV
5985 && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
5986 && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
5987 && (TYPE_PRECISION (TREE_TYPE (t1))
5988 == TYPE_PRECISION (TREE_TYPE (t2)))
5989 && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
5990 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
5991 == ENUMERAL_TYPE)))
5992 {
5993 tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
5994 tree type1, type2;
5995 if (comp > 0)
5996 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
5997 else
5998 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
5999
6000 cp_warning ("passing `%T' chooses `%T' over `%T'",
6001 type, type1, type2);
6002 cp_warning (" in call to `%D'", DECL_NAME (cand1->fn));
6003 }
6004 #endif
6005
6006 if (winner && comp != winner)
6007 {
6008 winner = 0;
6009 goto tweak;
6010 }
6011 winner = comp;
6012 }
6013 }
6014
6015 #if 0 /* move this warning to tourney. */
6016 /* warn about confusing overload resolution */
6017 if (winner && cand1->second_conv
6018 && ! DECL_CONSTRUCTOR_P (cand1->fn)
6019 && ! DECL_CONSTRUCTOR_P (cand2->fn))
6020 {
6021 int comp = compare_ics (cand1->second_conv, cand2->second_conv);
6022 if (comp && comp != winner)
6023 {
6024 struct z_candidate *w, *l;
6025 if (winner == 1)
6026 w = cand1, l = cand2;
6027 else
6028 w = cand2, l = cand1;
6029 cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
6030 cp_warning (" for conversion from `%T' to `%T'",
6031 TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
6032 TREE_TYPE (w->second_conv));
6033 cp_warning (" because conversion sequence for `this' argument is better");
6034 }
6035 }
6036 #endif
6037
6038 if (winner)
6039 return winner;
6040
6041 /* or, if not that,
6042 F1 is a non-template function and F2 is a template function */
6043
6044 if (! cand1->template && cand2->template)
6045 return 1;
6046 else if (cand1->template && ! cand2->template)
6047 return -1;
6048 else if (cand1->template && cand2->template)
6049 winner = more_specialized
6050 (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template));
6051
6052 /* or, if not that,
6053 the context is an initialization by user-defined conversion (see
6054 _dcl.init_ and _over.match.user_) and the standard conversion
6055 sequence from the return type of F1 to the destination type (i.e.,
6056 the type of the entity being initialized) is a better conversion
6057 sequence than the standard conversion sequence from the return type
6058 of F2 to the destination type. */
6059
6060 if (! winner && cand1->second_conv)
6061 winner = compare_ics (cand1->second_conv, cand2->second_conv);
6062
6063 /* If the built-in candidates are the same, arbitrarily pick one. */
6064 if (! winner && cand1->fn == cand2->fn
6065 && TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6066 {
6067 for (i = 0; i < len; ++i)
6068 if (! comptypes (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
6069 TREE_TYPE (TREE_VEC_ELT (cand2->convs, i)), 1))
6070 break;
6071 if (i == TREE_VEC_LENGTH (cand1->convs))
6072 return 1;
6073 #if 0
6074 /* Kludge around broken overloading rules whereby
6075 bool ? void *const & : void *const & is ambiguous. */
6076 /* Huh? Explain the problem better. */
6077 if (cand1->fn == ansi_opname[COND_EXPR])
6078 {
6079 tree c1 = TREE_VEC_ELT (cand1->convs, 1);
6080 tree c2 = TREE_VEC_ELT (cand2->convs, 1);
6081 tree t1 = strip_top_quals (non_reference (TREE_TYPE (c1)));
6082 tree t2 = strip_top_quals (non_reference (TREE_TYPE (c2)));
6083
6084 if (comptypes (t1, t2, 1))
6085 {
6086 if (TREE_CODE (c1) == REF_BIND && TREE_CODE (c2) != REF_BIND)
6087 return 1;
6088 if (TREE_CODE (c1) != REF_BIND && TREE_CODE (c2) == REF_BIND)
6089 return -1;
6090 }
6091 }
6092 #endif
6093 }
6094
6095 tweak:
6096
6097 /* Extension: If the worst conversion for one candidate is worse than the
6098 worst conversion for the other, take the first. */
6099 if (! winner && ! pedantic)
6100 {
6101 int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
6102
6103 for (i = 0; i < len; ++i)
6104 {
6105 if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
6106 rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
6107 if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
6108 rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
6109 }
6110
6111 if (rank1 < rank2)
6112 return 1;
6113 if (rank1 > rank2)
6114 return -1;
6115 }
6116
6117 return winner;
6118 }
6119
6120 /* Given a list of candidates for overloading, find the best one, if any.
6121 This algorithm has a worst case of O(2n) (winner is last), and a best
6122 case of O(n/2) (totally ambiguous); much better than a sorting
6123 algorithm. */
6124
6125 static struct z_candidate *
6126 tourney (candidates)
6127 struct z_candidate *candidates;
6128 {
6129 struct z_candidate *champ = candidates, *challenger;
6130 int fate;
6131
6132 /* Walk through the list once, comparing each current champ to the next
6133 candidate, knocking out a candidate or two with each comparison. */
6134
6135 for (challenger = champ->next; challenger; )
6136 {
6137 fate = joust (champ, challenger);
6138 if (fate == 1)
6139 challenger = challenger->next;
6140 else
6141 {
6142 if (fate == 0)
6143 {
6144 champ = challenger->next;
6145 if (champ == 0)
6146 return 0;
6147 }
6148 else
6149 champ = challenger;
6150
6151 challenger = champ->next;
6152 }
6153 }
6154
6155 /* Make sure the champ is better than all the candidates it hasn't yet
6156 been compared to. This may do one more comparison than necessary. Oh
6157 well. */
6158
6159 for (challenger = candidates; challenger != champ;
6160 challenger = challenger->next)
6161 {
6162 fate = joust (champ, challenger);
6163 if (fate != 1)
6164 return 0;
6165 }
6166
6167 return champ;
6168 }
6169
6170 int
6171 can_convert (to, from)
6172 tree to, from;
6173 {
6174 if (flag_ansi_overloading)
6175 {
6176 tree t = implicit_conversion (to, from, NULL_TREE, LOOKUP_NORMAL);
6177 return (t && ! ICS_BAD_FLAG (t));
6178 }
6179 else
6180 {
6181 struct harshness_code h;
6182 h = convert_harshness (to, from, NULL_TREE);
6183 return (h.code < USER_CODE) && (h.distance >= 0);
6184 }
6185 }
6186
6187 int
6188 can_convert_arg (to, from, arg)
6189 tree to, from, arg;
6190 {
6191 if (flag_ansi_overloading)
6192 {
6193 tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6194 return (t && ! ICS_BAD_FLAG (t));
6195 }
6196 else
6197 {
6198 struct harshness_code h;
6199 h = convert_harshness (to, from, arg);
6200 return (h.code < USER_CODE) && (h.distance >= 0);
6201 }
6202 }