re PR java/2605 (gcj crashes on .java file containing byte.class.getClass())
authorAlexandre Petit-Bianco <apbianco@redhat.com>
Sat, 2 Jun 2001 16:44:11 +0000 (09:44 -0700)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Sat, 2 Jun 2001 16:44:11 +0000 (09:44 -0700)
2001-06-01  Alexandre Petit-Bianco  <apbianco@redhat.com>

        * parse.y (type_literals:): Use `build_incomplete_class_ref' with
        builtin type.
        (patch_incomplete_class_ref): Build the class ref, build the class
        init if necessary, complete the tree.
        Fixes PR java/2605

(http://gcc.gnu.org/ml/gcc-patches/2001-06/msg00044.html )

From-SVN: r42807

gcc/java/ChangeLog
gcc/java/parse.y

index f13bfbe6f2e80ae2c3c629d1622e9fd9878da7bc..5fc8f8f61e8cffbc4fc6b8aa8e871ba4e46f8234 100644 (file)
@@ -1,3 +1,11 @@
+2001-06-01  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.y (type_literals:): Use `build_incomplete_class_ref' with
+       builtin type.
+       (patch_incomplete_class_ref): Build the class ref, build the class
+       init if necessary, complete the tree.
+       Fixes PR java/2605
+
 2001-05-31  Alexandre Petit-Bianco  <apbianco@redhat.com>
 
        * parse.y (lookup_field_wrapper): Test `name' code.
index 4ae8812e668e220a1ec421612e07c511cc0a54c5..e766479ba3eb52ed4b30bfa326e97bcb94379d51 100644 (file)
@@ -1954,9 +1954,12 @@ type_literals:
 |      array_type DOT_TK CLASS_TK
                { $$ = build_incomplete_class_ref ($2.location, $1); }
 |      primitive_type DOT_TK CLASS_TK
-               { $$ = build_class_ref ($1); }
+                { $$ = build_incomplete_class_ref ($2.location, $1); }
 |      VOID_TK DOT_TK CLASS_TK
-               { $$ = build_class_ref (void_type_node); }
+                { 
+                   $$ = build_incomplete_class_ref ($2.location,
+                                                   void_type_node);
+                }
 ;
 
 class_instance_creation_expression:
@@ -13773,8 +13776,11 @@ patch_incomplete_class_ref (node)
 
   if (!flag_emit_class_files || JPRIMITIVE_TYPE_P (ref_type))
     {
+      tree dot = build_class_ref (ref_type);
       /* A class referenced by `foo.class' is initialized.  */
-      return build_class_init (ref_type, build_class_ref (ref_type));
+      if (!flag_emit_class_files)
+       dot = build_class_init (ref_type, dot);
+      return java_complete_tree (dot);
     }
 
   /* If we're emitting class files and we have to deal with non