diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7342161b75b..d1154ef7762 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +1999-01-28 Jason Merrill + + * cp-tree.h (struct tree_binding): Replace scope field with a union. + (BINDING_SCOPE): Adjust. + * decl.c (BINDING_LEVEL): Adjust. + 1999-01-26 Jason Merrill * pt.c (instantiate_class_template): Set up the DECL_INITIAL of diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 534fadc0608..0471be4f807 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -138,7 +138,7 @@ typedef struct ptrmem_cst _TYPE node, or a NAMESPACE_DECL.) This macro should be used only for namespace-level bindings; on the IDENTIFIER_BINDING list BINDING_LEVEL is used instead. */ -#define BINDING_SCOPE(NODE) ((tree) ((struct tree_binding*)NODE)->scope) +#define BINDING_SCOPE(NODE) (((struct tree_binding*)NODE)->scope.scope) /* This is the declaration bound to the name. Possible values: variable, overloaded function, namespace, template, enumerator. */ @@ -159,7 +159,10 @@ typedef struct ptrmem_cst struct tree_binding { char common[sizeof (struct tree_common)]; - void* scope; + union { + tree scope; + struct binding_level *level; + } scope; tree value; }; diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 40115819287..95b16d29abe 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1039,7 +1039,7 @@ pushlevel_temporary (tag_transparent) /* For a binding between a name and an entity at a block scope, this is the `struct binding_level' for the block. */ #define BINDING_LEVEL(NODE) \ - ((struct binding_level*) ((struct tree_binding*)NODE)->scope) + (((struct tree_binding*)NODE)->scope.level) /* These are currently unused, but permanent, CPLUS_BINDING nodes. They are kept here because they are allocated from the permanent