1 /* Variables and structures for overloading rules. 2 Copyright (C) 1993 Free Software Foundation, Inc. 3 4 This file is part of GNU CC. 5 6 GNU CC is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GNU CC is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU CC; see the file COPYING. If not, write to 18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ 19 20 /* The following structure is used when comparing various alternatives 21 for overloading. The unsigned quantity `strikes.i' is used 22 for fast comparison of two possibilities. This number is an 23 aggregate of four constituents: 24 25 EVIL: if this is non-zero, then the candidate should not be considered 26 ELLIPSIS: if this is non-zero, then some actual argument has been matched 27 against an ellipsis 28 USER: if this is non-zero, then a user-defined type conversion is needed 29 B_OR_D: if this is non-zero, then use a base pointer instead of the 30 type of the pointer we started with. 31 EASY: if this is non-zero, then we have a builtin conversion 32 (such as int to long, int to float, etc) to do. 33 34 If two candidates require user-defined type conversions, and the 35 type conversions are not identical, then an ambiguity error 36 is reported. 37 38 If two candidates agree on user-defined type conversions, 39 and one uses pointers of strictly higher type (derived where 40 another uses base), then that alternative is silently chosen. 41 42 If two candidates have a non-monotonic derived/base pointer 43 relationship, and/or a non-monotonic easy conversion relationship, 44 then a warning is emitted to show which paths are possible, and 45 which one is being chosen. 46 47 For example: 48 49 int i; 50 double x; 51 52 overload f; 53 int f (int, int); 54 double f (double, double); 55 56 f (i, x); // draws a warning 57 58 struct B 59 { 60 f (int); 61 } *bb; 62 struct D : B 63 { 64 f (double); 65 } *dd; 66 67 dd->f (x); // exact match 68 dd->f (i); // draws warning 69 70 Note that this technique really only works for 255 arguments. Perhaps 71 this is not enough. */ 72 73 struct candidate 74 { 75 tree function; /* A FUNCTION_DECL */ 76 77 unsigned char evil; /* !0 if this will never convert. */ 78 unsigned char ellipsis; /* !0 if a match against an ellipsis occurred */ 79 unsigned char user; /* !0 if at least one user-defined type conv. */ 80 unsigned short b_or_d; /* count number of derived->base or 81 base->derived conv. */ 82 unsigned short easy; /* count number of builtin type conv. */ 83 tree arg; /* first parm to function. */ 84 unsigned short *harshness; /* Indexed by argument number, encodes 85 evil, user, d_to_b, and easy strikes for 86 that argument. 87 At end of array, we store the index+1 88 of where we started using default 89 parameters, or 0 if there are none. */ 90 union 91 { 92 tree field; /* If no evil strikes, the FUNCTION_DECL of 93 the function (if a member function). */ 94 int bad_arg; /* the index of the first bad argument: 95 0 if no bad arguments 96 > 0 is first bad argument 97 -1 if extra actual arguments 98 -2 if too few actual arguments. 99 -3 if const/non const method mismatch. 100 -4 if type unification failed. 101 -5 if contravariance violation. */ 102 } u; 103 }; 104 int rank_for_overload (); 105 106 /* Variables shared between cp-class.c and cp-call.c. */ 107 108 extern int n_vtables; 109 extern int n_vtable_entries; 110 extern int n_vtable_searches; 111 extern int n_vtable_elems; 112 extern int n_convert_harshness; 113 extern int n_compute_conversion_costs; 114 extern int n_build_method_call; 115 extern int n_inner_fields_searched; 116