diff options
author | Per Bothner <per@bothner.com> | 2001-03-05 23:29:31 -0800 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 2001-03-05 23:29:31 -0800 |
commit | 6d37cf2f0c96a148f9d7ae640ebaab945cea0979 (patch) | |
tree | 70814460fc637778012dfbf042802ae3f210f4c7 /gcc/java/class.c | |
parent | 21aaf8bffcf05aec09db0213f8210cc205175141 (diff) | |
download | gcc-6d37cf2f0c96a148f9d7ae640ebaab945cea0979.zip gcc-6d37cf2f0c96a148f9d7ae640ebaab945cea0979.tar.gz gcc-6d37cf2f0c96a148f9d7ae640ebaab945cea0979.tar.bz2 |
Fix a problem where rest_of_decl_compilation applied to class_dtable_decl causes problems because it was done too early...
Fix a problem where rest_of_decl_compilation applied to
class_dtable_decl causes problems because it was done too early,
before output file was opened.
* decl.c (init_decl_processing): Remove init of class_dtable_decl.
* class.c (class_dtable_decl): Add macro - element of class_roots.
(make_class_data): Define class_dtable_decl.
* java-tree.h (JTI_CLASS_DTABLE_DECL, class_dtable_decl): Removed.
From-SVN: r40256
Diffstat (limited to 'gcc/java/class.c')
-rw-r--r-- | gcc/java/class.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/java/class.c b/gcc/java/class.c index be2e5a4..698ca04 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -84,11 +84,13 @@ static assume_compiled_node *find_assume_compiled_node static assume_compiled_node *assume_compiled_tree; -static tree class_roots[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE }; +static tree class_roots[5] += { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE }; #define registered_class class_roots[0] #define fields_ident class_roots[1] /* get_identifier ("fields") */ #define info_ident class_roots[2] /* get_identifier ("info") */ #define class_list class_roots[3] +#define class_dtable_decl class_roots[4] /* Return the node that most closely represents the class whose name is IDENT. Start the search from NODE. Return NULL if an @@ -1347,6 +1349,17 @@ make_class_data (type) DECL_IGNORED_P (dtable_decl) = 1; TREE_PUBLIC (dtable_decl) = 1; rest_of_decl_compilation (dtable_decl, (char*) 0, 1, 0); + if (type == class_type_node) + class_dtable_decl = dtable_decl; + } + + if (class_dtable_decl == NULL_TREE) + { + class_dtable_decl = build_dtable_decl (class_type_node); + TREE_STATIC (class_dtable_decl) = 1; + DECL_ARTIFICIAL (class_dtable_decl) = 1; + DECL_IGNORED_P (class_dtable_decl) = 1; + rest_of_decl_compilation (class_dtable_decl, (char*) 0, 1, 0); } super = CLASSTYPE_SUPER (type); |