pt.c (get_bindings_real): Rename from get_bindings.
* pt.c (get_bindings_real): Rename from get_bindings. Add check_rettype parm. (get_bindings): Pass 1. (get_bindings_overload): Pass 0. From-SVN: r18708
This commit is contained in:
parent
838b0e4efa
commit
76b9a14d4d
|
@ -1,3 +1,10 @@
|
|||
Thu Mar 19 11:51:58 1998 Jason Merrill <jason@yorick.cygnus.com>
|
||||
|
||||
* pt.c (get_bindings_real): Rename from get_bindings. Add
|
||||
check_rettype parm.
|
||||
(get_bindings): Pass 1.
|
||||
(get_bindings_overload): Pass 0.
|
||||
|
||||
Wed Mar 19 09:08:12 1998 Mark Mitchell <mmitchell@usa.net>
|
||||
|
||||
* pt.c (check_explicit_specialization): When reverting a static
|
||||
|
|
40
gcc/cp/pt.c
40
gcc/cp/pt.c
|
@ -86,6 +86,7 @@ static int type_unification_real PROTO((tree, tree *, tree, tree,
|
|||
static void note_template_header PROTO((int));
|
||||
static tree maybe_fold_nontype_arg PROTO((tree));
|
||||
static tree convert_nontype_argument PROTO((tree, tree));
|
||||
static tree get_bindings_overload PROTO((tree, tree, tree));
|
||||
|
||||
/* Do any processing required when DECL (a member template declaration
|
||||
using TEMPLATE_PARAMETERS as its innermost parameter list) is
|
||||
|
@ -5608,13 +5609,13 @@ more_specialized (pat1, pat2, explicit_args)
|
|||
tree targs;
|
||||
int winner = 0;
|
||||
|
||||
targs = get_bindings (pat1, pat2, explicit_args);
|
||||
targs = get_bindings_overload (pat1, pat2, explicit_args);
|
||||
if (targs)
|
||||
{
|
||||
--winner;
|
||||
}
|
||||
|
||||
targs = get_bindings (pat2, pat1, explicit_args);
|
||||
targs = get_bindings_overload (pat2, pat1, explicit_args);
|
||||
if (targs)
|
||||
{
|
||||
++winner;
|
||||
|
@ -5653,11 +5654,13 @@ more_specialized_class (pat1, pat2)
|
|||
|
||||
/* Return the template arguments that will produce the function signature
|
||||
DECL from the function template FN, with the explicit template
|
||||
arguments EXPLICIT_ARGS. */
|
||||
arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
|
||||
also match. */
|
||||
|
||||
tree
|
||||
get_bindings (fn, decl, explicit_args)
|
||||
static tree
|
||||
get_bindings_real (fn, decl, explicit_args, check_rettype)
|
||||
tree fn, decl, explicit_args;
|
||||
int check_rettype;
|
||||
{
|
||||
int ntparms = DECL_NTPARMS (fn);
|
||||
tree targs = make_scratch_vec (ntparms);
|
||||
|
@ -5691,18 +5694,37 @@ get_bindings (fn, decl, explicit_args)
|
|||
1,
|
||||
extra_fn_arg);
|
||||
|
||||
if (i == 0)
|
||||
if (i != 0)
|
||||
return NULL_TREE;
|
||||
|
||||
if (check_rettype)
|
||||
{
|
||||
/* Check to see that the resulting return type is also OK. */
|
||||
tree t = tsubst (TREE_TYPE (TREE_TYPE (fn)), targs, NULL_TREE);
|
||||
|
||||
if (!comptypes (t, TREE_TYPE (TREE_TYPE (decl)), 1))
|
||||
return NULL_TREE;
|
||||
|
||||
return targs;
|
||||
}
|
||||
|
||||
return NULL_TREE;
|
||||
return targs;
|
||||
}
|
||||
|
||||
/* For most uses, we want to check the return type. */
|
||||
|
||||
tree
|
||||
get_bindings (fn, decl, explicit_args)
|
||||
tree fn, decl, explicit_args;
|
||||
{
|
||||
return get_bindings_real (fn, decl, explicit_args, 1);
|
||||
}
|
||||
|
||||
/* But for more_specialized, we only care about the parameter types. */
|
||||
|
||||
static tree
|
||||
get_bindings_overload (fn, decl, explicit_args)
|
||||
tree fn, decl, explicit_args;
|
||||
{
|
||||
return get_bindings_real (fn, decl, explicit_args, 0);
|
||||
}
|
||||
|
||||
static tree
|
||||
|
|
Loading…
Reference in New Issue