This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
patch to avoid jc1 crash when reading .class files
- To: gcc-patches at gcc dot gnu dot org, java-patches at gcc dot gnu dot org
- Subject: patch to avoid jc1 crash when reading .class files
- From: Per Bothner <per at bothner dot com>
- Date: 21 May 2001 15:13:04 -0700
This patches fixes a problem Hans Boehm reported when compiling
multiple .class files at once. I've checked it into both the
branch and the trunk.
2001-05-21 Per Bothner <per@bothner.com>
* jcf-parse.c (read_class): If class is from .class or .zip file
and it's already been read, don't push/pop parser context.
Index: jcf-parse.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jcf-parse.c,v
retrieving revision 1.84
diff -u -p -r1.84 jcf-parse.c
--- jcf-parse.c 2001/04/21 00:01:11 1.84
+++ jcf-parse.c 2001/05/21 20:18:59
@@ -558,7 +558,6 @@ read_class (name)
tree save_current_class = current_class;
const char *save_input_filename = input_filename;
JCF *save_current_jcf = current_jcf;
- int generate;
if ((icv = IDENTIFIER_CLASS_VALUE (name)) != NULL_TREE)
{
@@ -579,14 +578,15 @@ read_class (name)
current_jcf = jcf;
- java_parser_context_save_global ();
- java_push_parser_context ();
if (current_jcf->java_source)
{
const char *filename = current_jcf->filename;
tree file;
FILE *finput;
+ int generate;
+ java_parser_context_save_global ();
+ java_push_parser_context ();
BUILD_FILENAME_IDENTIFIER_NODE (file, filename);
generate = IS_A_COMMAND_LINE_FILENAME_P (file);
if (wfl_operator == NULL_TREE)
@@ -605,24 +605,28 @@ read_class (name)
fatal_io_error ("can't close %s", input_filename);
}
JCF_FINISH (current_jcf);
+ java_pop_parser_context (generate);
+ java_parser_context_restore_global ();
}
else
{
- input_filename = current_jcf->filename;
- current_class = class;
if (class == NULL_TREE || ! CLASS_PARSED_P (class))
{
+ java_parser_context_save_global ();
+ java_push_parser_context ();
+ current_class = class;
+ input_filename = current_jcf->filename;
if (JCF_SEEN_IN_ZIP (current_jcf))
read_zip_member(current_jcf,
current_jcf->zipd, current_jcf->zipd->zipf);
jcf_parse (current_jcf);
+ class = current_class;
+ java_pop_parser_context (0);
+ java_parser_context_restore_global ();
}
- layout_class (current_class);
- load_inner_classes (current_class);
- generate = 0;
+ layout_class (class);
+ load_inner_classes (class);
}
- java_pop_parser_context (generate);
- java_parser_context_restore_global ();
current_class = save_current_class;
input_filename = save_input_filename;
--
--Per Bothner
per@bothner.com http://www.bothner.com/per/