OSDN Git Service

2004-09-28 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Sep 2004 13:57:05 +0000 (13:57 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Sep 2004 13:57:05 +0000 (13:57 +0000)
PR java/17586
* jcf-parse.c (load_class): Don't try to read a class that we've
already read.
Check that we really did read the right class.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88233 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/jcf-parse.c

index 4b579bc..1ecd33f 100644 (file)
@@ -1,3 +1,10 @@
+2004-09-28  Andrew Haley  <aph@redhat.com>
+
+       PR java/17586
+       * jcf-parse.c (load_class): Don't try to read a class that we've
+       already read.
+       Check that we really did read the right class.
+
 2004-09-25  Tom Tromey  <tromey@redhat.com>
 
        PR java/17500:
index bc733e8..f36cc95 100644 (file)
@@ -566,7 +566,7 @@ void
 load_class (tree class_or_name, int verbose)
 {
   tree name, saved;
-  int class_loaded;
+  int class_loaded = 0;
 
   /* class_or_name can be the name of the class we want to load */
   if (TREE_CODE (class_or_name) == IDENTIFIER_NODE)
@@ -585,11 +585,20 @@ load_class (tree class_or_name, int verbose)
     }
 
   saved = name;
+
   while (1)
     {
       char *separator;
 
-      if ((class_loaded = read_class (name)))
+      /* We've already loaded it.  */
+      if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE)
+       {
+         tree tmp_decl = IDENTIFIER_CLASS_VALUE (name);
+         if (CLASS_PARSED_P (TREE_TYPE (tmp_decl)))
+           break;
+       }
+       
+      if (read_class (name))
        break;
 
       /* We failed loading name. Now consider that we might be looking
@@ -607,6 +616,13 @@ load_class (tree class_or_name, int verbose)
        break;
     }
 
+  {
+    /* have we found the class we're looking for?  */
+    tree type_decl = IDENTIFIER_CLASS_VALUE (saved);
+    tree type = type_decl ? TREE_TYPE (type_decl) : NULL;
+    class_loaded = type && CLASS_PARSED_P (type);
+  }          
+
   if (!class_loaded && verbose)
     error ("cannot find file for class %s", IDENTIFIER_POINTER (saved));
 }