From: Per Bothner Date: Tue, 6 Mar 2001 07:29:31 +0000 (-0800) Subject: Fix a problem where rest_of_decl_compilation applied to class_dtable_decl causes... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d37cf2f0c96a148f9d7ae640ebaab945cea0979;p=gcc.git 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 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 48ce7154756..7a436e5de9d 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,13 @@ +2001-03-05 Per Bothner + + 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. + 2001-03-01 Zack Weinberg * java/class.c, java/decl.c, java/java-tree.h: Replace all diff --git a/gcc/java/class.c b/gcc/java/class.c index be2e5a4c23e..698ca04bb4f 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); diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 739ddee285d..32e6976ab72 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -636,12 +636,6 @@ init_decl_processing () FIELD_PRIVATE (t) = 1; FINISH_RECORD (object_type_node); - 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); - field_type_node = make_node (RECORD_TYPE); field_ptr_type_node = build_pointer_type (field_type_node); method_type_node = make_node (RECORD_TYPE); diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 9273ca4ec6f..f804a37cc4d 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -335,8 +335,6 @@ enum java_tree_index JTI_ACCESS_FLAGS_TYPE_NODE, - JTI_CLASS_DTABLE_DECL, - JTI_NATIVECODE_PTR_ARRAY_TYPE_NODE, JTI_WFL_OPERATOR, @@ -584,9 +582,6 @@ extern tree throw_node[]; #define access_flags_type_node \ java_global_trees[JTI_ACCESS_FLAGS_TYPE_NODE] -#define class_dtable_decl \ - java_global_trees[JTI_CLASS_DTABLE_DECL] - #define nativecode_ptr_array_type_node \ java_global_trees[JTI_NATIVECODE_PTR_ARRAY_TYPE_NODE]