Commit a4832853 by Jason Merrill Committed by Jason Merrill

class.c (mark_overriders): Fix order of args to overrides.

	* class.c (mark_overriders): Fix order of args to overrides.
	(warn_hidden): Likewise.  Fix for having virtual and non-virtual
	functions with the same name.

From-SVN: r28415
parent 1cb36a98
1999-08-02 Jason Merrill <jason@yorick.cygnus.com>
* class.c (mark_overriders): Fix order of args to overrides.
(warn_hidden): Likewise. Fix for having virtual and non-virtual
functions with the same name.
1999-08-02 Richard Henderson <rth@cygnus.com> 1999-08-02 Richard Henderson <rth@cygnus.com>
* cp-tree.h (TYPE_PTRMEMFUNC_P): Check TYPE_LANG_SPECIFIC non-null. * cp-tree.h (TYPE_PTRMEMFUNC_P): Check TYPE_LANG_SPECIFIC non-null.
......
...@@ -2923,18 +2923,18 @@ get_basefndecls (fndecl, t) ...@@ -2923,18 +2923,18 @@ get_basefndecls (fndecl, t)
/* Mark the functions that have been hidden with their overriders. /* Mark the functions that have been hidden with their overriders.
Since we start out with all functions already marked with a hider, Since we start out with all functions already marked with a hider,
no need to mark functions that are just hidden. */ no need to mark functions that are just hidden.
Subroutine of warn_hidden. */
static void static void
mark_overriders (fndecl, base_fndecls) mark_overriders (fndecl, base_fndecls)
tree fndecl, base_fndecls; tree fndecl, base_fndecls;
{ {
while (base_fndecls) for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
{ {
if (overrides (TREE_VALUE (base_fndecls), fndecl)) if (overrides (fndecl, TREE_VALUE (base_fndecls)))
TREE_PURPOSE (base_fndecls) = fndecl; TREE_PURPOSE (base_fndecls) = fndecl;
base_fndecls = TREE_CHAIN (base_fndecls);
} }
} }
...@@ -3022,8 +3022,15 @@ warn_hidden (t) ...@@ -3022,8 +3022,15 @@ warn_hidden (t)
tree binfos = BINFO_BASETYPES (TYPE_BINFO (t)); tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0; int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
fndecl = OVL_CURRENT (fns); /* First see if we have any virtual functions in this batch. */
if (DECL_VINDEX (fndecl) == NULL_TREE) for (; fns; fns = OVL_NEXT (fns))
{
fndecl = OVL_CURRENT (fns);
if (DECL_VINDEX (fndecl))
break;
}
if (fns == NULL_TREE)
continue; continue;
/* First we get a list of all possible functions that might be /* First we get a list of all possible functions that might be
...@@ -3038,38 +3045,28 @@ warn_hidden (t) ...@@ -3038,38 +3045,28 @@ warn_hidden (t)
} }
fns = OVL_NEXT (fns); fns = OVL_NEXT (fns);
if (fns)
fndecl = OVL_CURRENT (fns);
else
fndecl = NULL_TREE;
/* ...then mark up all the base functions with overriders, preferring /* ...then mark up all the base functions with overriders, preferring
overriders to hiders. */ overriders to hiders. */
if (base_fndecls) if (base_fndecls)
while (fndecl) for (; fns; fns = OVL_NEXT (fns))
{ {
mark_overriders (fndecl, base_fndecls); fndecl = OVL_CURRENT (fns);
if (DECL_VINDEX (fndecl))
fns = OVL_NEXT (fns); mark_overriders (fndecl, base_fndecls);
if (fns)
fndecl = OVL_CURRENT (fns);
else
fndecl = NULL_TREE;
} }
/* Now give a warning for all base functions without overriders, /* Now give a warning for all base functions without overriders,
as they are hidden. */ as they are hidden. */
while (base_fndecls) for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
{ {
if (! overrides (TREE_VALUE (base_fndecls), if (! overrides (TREE_PURPOSE (base_fndecls),
TREE_PURPOSE (base_fndecls))) TREE_VALUE (base_fndecls)))
{ {
/* Here we know it is a hider, and no overrider exists. */ /* Here we know it is a hider, and no overrider exists. */
cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls)); cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls));
cp_warning_at (" by `%D'", TREE_PURPOSE (base_fndecls)); cp_warning_at (" by `%D'", TREE_PURPOSE (base_fndecls));
} }
base_fndecls = TREE_CHAIN (base_fndecls);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment