Commit 908c4e83 by Mark Mitchell Committed by Mark Mitchell

class.c (maybe_fixup_vptrs): Remove declaration.

	* class.c (maybe_fixup_vptrs): Remove declaration.
	(build_class_init_list): Likewise.
	* decl.c (pushdecl_class_level): Call check_template_shadow here
	...
	(push_class_level_binding): ... not here.
	* search.c (dfs_push_type_decls): Only avoid
	template-self-reference TYPE_DECLs if they are from base classes.

From-SVN: r26202
parent d4370213
1999-04-05 Mark Mitchell <mark@codesourcery.com>
* class.c (maybe_fixup_vptrs): Remove declaration.
(build_class_init_list): Likewise.
* decl.c (pushdecl_class_level): Call check_template_shadow here
...
(push_class_level_binding): ... not here.
* search.c (dfs_push_type_decls): Only avoid
template-self-reference TYPE_DECLs if they are from base classes.
1999-04-04 Mark Mitchell <mark@codesourcery.com>
* pt.c (check_template_shadow): Don't treat OVERLOADs as _DECL
......
......@@ -121,7 +121,6 @@ static void merge_overrides PROTO((tree, tree, int, tree));
static void override_one_vtable PROTO((tree, tree, tree));
static void mark_overriders PROTO((tree, tree));
static void check_for_override PROTO((tree, tree));
static tree maybe_fixup_vptrs PROTO((tree, tree, tree));
static tree get_class_offset_1 PROTO((tree, tree, tree, tree, tree));
static tree get_class_offset PROTO((tree, tree, tree, tree));
static void modify_one_vtable PROTO((tree, tree, tree, tree));
......@@ -130,7 +129,6 @@ static void modify_all_direct_vtables PROTO((tree, int, tree, tree,
tree));
static void modify_all_indirect_vtables PROTO((tree, int, int, tree,
tree, tree));
static void build_class_init_list PROTO((tree));
static int finish_base_struct PROTO((tree, struct base_info *));
static void finish_struct_methods PROTO((tree));
static void maybe_warn_about_overly_private_class PROTO ((tree));
......
......@@ -4159,9 +4159,6 @@ pushdecl_class_level (x)
if (name)
{
if (TYPE_BEING_DEFINED (current_class_type))
check_template_shadow (x);
push_class_level_binding (name, x);
if (TREE_CODE (x) == TYPE_DECL)
set_identifier_type_value (name, TREE_TYPE (x));
......@@ -4214,6 +4211,11 @@ push_class_level_binding (name, x)
if (!class_binding_level)
return;
/* Make sure that this new member does not have the same name
as a template parameter. */
if (TYPE_BEING_DEFINED (current_class_type))
check_template_shadow (x);
/* If this declaration shadows a declaration from an enclosing
class, then we will need to restore IDENTIFIER_CLASS_VALUE when
we leave this class. Record the shadowed declaration here. */
......
......@@ -2943,7 +2943,8 @@ dfs_push_type_decls (binfo, data)
type = BINFO_TYPE (binfo);
for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
if (DECL_NAME (fields) && TREE_CODE (fields) == TYPE_DECL
&& !template_self_reference_p (type, fields))
&& !(!same_type_p (type, current_class_type)
&& template_self_reference_p (type, fields)))
setup_class_bindings (DECL_NAME (fields), /*type_binding_p=*/1);
/* We can't just use BINFO_MARKED because envelope_add_decl uses
......
// Build don't link:
// Origin: Jason Merrill <jason@cygnus.com>
template <class T> struct A {
A (const A&) { }
};
template A<int>::A (const A&);
// Build don't link:
// Origin: Jason Merrill <jason@cygnus.com>
template <class T> struct A { // ERROR - shadowed parameter
struct B {
void T(); // ERROR - shadows template parameter
};
};
A<int> a;
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