decl.c (pushdecl_class_level): Add warning here.

P
1998-09-03  Benjamin Kosnik  <bkoz@rhino.cygnus.com>
        * decl.c (pushdecl_class_level): Add warning here.
        (pushdecl): Tweak.

From-SVN: r22210
This commit is contained in:
Benjamin Kosnik 1998-09-03 14:07:51 +00:00
parent 343a4a0e15
commit a0d9f32252

View File

@ -3671,12 +3671,12 @@ pushdecl (x)
warning (warnstring, IDENTIFIER_POINTER (name));
}
/* Check to see if decl redeclares a template parameter. */
if (oldlocal && (current_class_type || current_function_decl )
if (oldlocal && (current_class_type || current_function_decl)
&& current_template_parms)
{
if (decl_template_parm_p (oldlocal))
{
cp_error ("redeclaration of template parameter `%T'", name);
cp_error ("re-using name of template parameter `%T' in this scope", name);
cp_error_at (" previously declared here `%#D'", oldlocal);
}
}
@ -3812,10 +3812,10 @@ pushdecl_class_level (x)
{
/* A name N used in a class S shall refer to the same declaration
in its context and when re-evaluated in the completed scope of S.
Types, enums, and static vars are checked here; other
members are checked in finish_struct. */
tree icv = IDENTIFIER_CLASS_VALUE (name);
tree ilv = IDENTIFIER_LOCAL_VALUE (name);
if (icv && icv != x
&& flag_optional_diags
@ -3829,6 +3829,18 @@ pushdecl_class_level (x)
cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
icv);
}
/* Check to see if decl redeclares a template parameter. */
if (ilv && ! decls_match (ilv, x)
&& (current_class_type || current_function_decl)
&& current_template_parms)
{
if (decl_template_parm_p (ilv))
{
cp_error ("re-using name of template parameter `%T' in this scope", name);
cp_error_at (" previously declared here `%#D'", ilv);
}
}
}
push_class_level_binding (name, x);