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