Commit 76191fdd by Nathan Sidwell Committed by Nathan Sidwell

decl.c (struct binding_level): Adjust class_shadowed comments to reflect reality.

cp:
	* decl.c (struct binding_level): Adjust class_shadowed comments
	to reflect reality.
	(push_class_level_binding): Ajust comments to reflect reality.
	Set IDENTIFIER_CLASS_VALUE when replacing an existing binding.
	Don't set TREE_VALUE on the class_shadowed list.
testsuite:
	* g++.old-deja/g++.other/lookup16.C: Remove XFAIL.

From-SVN: r38796
parent 02fbf2d2
2001-01-08 Nathan Sidwell <nathan@acm.org>
* decl.c (struct binding_level): Adjust class_shadowed comments
to reflect reality.
(push_class_level_binding): Ajust comments to reflect reality.
Set IDENTIFIER_CLASS_VALUE when replacing an existing binding.
Don't set TREE_VALUE on the class_shadowed list.
2001-01-07 Mark Mitchell <mark@codesourcery.com> 2001-01-07 Mark Mitchell <mark@codesourcery.com>
* decl2.c (grokfield): Don't accept `asm' specifiers for * decl2.c (grokfield): Don't accept `asm' specifiers for
......
...@@ -391,15 +391,13 @@ struct binding_level ...@@ -391,15 +391,13 @@ struct binding_level
/* If this binding level is the binding level for a class, then /* If this binding level is the binding level for a class, then
class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
is the name of an entity bound in the class; the TREE_VALUE is is the name of an entity bound in the class. The TREE_TYPE is
the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
when leaving class scope, we can restore the
IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
the DECL bound by this name in the class. */ the DECL bound by this name in the class. */
tree class_shadowed; tree class_shadowed;
/* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
is used for all binding levels. */ is used for all binding levels. In addition the TREE_VALUE is the
IDENTIFIER_TYPE_VALUE before we entered the class. */
tree type_shadowed; tree type_shadowed;
/* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
...@@ -4408,9 +4406,8 @@ push_class_level_binding (name, x) ...@@ -4408,9 +4406,8 @@ push_class_level_binding (name, x)
else else
old_decl = BINDING_VALUE (binding); old_decl = BINDING_VALUE (binding);
/* There was already a binding for X containing fewer /* Find the previous binding of name on the class-shadowed
functions than are named in X. Find the previous list, and update it. */
declaration of X on the class-shadowed list, and update it. */
for (shadow = class_binding_level->class_shadowed; for (shadow = class_binding_level->class_shadowed;
shadow; shadow;
shadow = TREE_CHAIN (shadow)) shadow = TREE_CHAIN (shadow))
...@@ -4420,17 +4417,17 @@ push_class_level_binding (name, x) ...@@ -4420,17 +4417,17 @@ push_class_level_binding (name, x)
BINDING_VALUE (binding) = x; BINDING_VALUE (binding) = x;
INHERITED_VALUE_BINDING_P (binding) = 0; INHERITED_VALUE_BINDING_P (binding) = 0;
TREE_TYPE (shadow) = x; TREE_TYPE (shadow) = x;
IDENTIFIER_CLASS_VALUE (name) = x;
return; return;
} }
} }
/* If we didn't replace an existing binding, put the binding on the /* If we didn't replace an existing binding, put the binding on the
stack of bindings for the identifier, and update stack of bindings for the identifier, and update the shadowed list. */
IDENTIFIER_CLASS_VALUE. */
if (push_class_binding (name, x)) if (push_class_binding (name, x))
{ {
class_binding_level->class_shadowed class_binding_level->class_shadowed
= tree_cons (name, IDENTIFIER_CLASS_VALUE (name), = tree_cons (name, NULL,
class_binding_level->class_shadowed); class_binding_level->class_shadowed);
/* Record the value we are binding NAME to so that we can know /* Record the value we are binding NAME to so that we can know
what to pop later. */ what to pop later. */
......
2001-01-08 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/lookup16.C: Remove XFAIL.
2001-01-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2001-01-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.c-torture/execute/stdio-opt-3.c: New test. * gcc.c-torture/execute/stdio-opt-3.c: New test.
......
...@@ -2,11 +2,10 @@ ...@@ -2,11 +2,10 @@
// Copyright (C) 1999 Free Software Foundation, Inc. // Copyright (C) 1999 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 25 Aug 1999 <nathan@acm.org> // Contributed by Nathan Sidwell 25 Aug 1999 <nathan@acm.org>
// Bug 3
// typenames are not injected early enough, [basic.scope.pdecl]3.3.1/4 // typenames are not injected early enough, [basic.scope.pdecl]3.3.1/4
// indicates this should compile. // indicates this should compile.
// excess errors test - XFAIL
struct A { struct 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