Java: fixes for the PRs gcj/{271,272,275}.
authorAlexandre Petit-Bianco <apbianco@cygnus.com>
Fri, 7 Jul 2000 00:49:36 +0000 (00:49 +0000)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Fri, 7 Jul 2000 00:49:36 +0000 (17:49 -0700)
2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>

* parse.y (parser_qualified_classname): Removed parameter
`is_static'.
(create_interface): Removed first passed parameter to
parser_qualified_classname.
(create_class): Likewise. Don't install alias on static
innerclasses. Fixes gcj/275.

2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>

* parse.y (maybe_generate_pre_expand_clinit): Don't build a
debugable statement with empty_stmt_node. Fixes gcj/272

2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>

* expr.c (build_instanceof): Layout type after it's loaded. Fixes
gcj/271.

(Fix to the PR gcj/271, gcj/272 and gcj/275:
 http://sourceware.cygnus.com/ml/java-prs/2000-q3/msg00000.html
 http://sourceware.cygnus.com/ml/java-prs/2000-q3/msg00002.html
 http://sourceware.cygnus.com/ml/java-prs/2000-q3/msg00001.html )

From-SVN: r34894

gcc/java/ChangeLog
gcc/java/expr.c
gcc/java/parse.c
gcc/java/parse.y

index 7c7c5d90a93839d53fc9c55bd7c2292d2800c557..e6deecd4c0e3a96c20eca2451d491accf8f1859e 100644 (file)
         argument on the first pass for CNI as well as JNI.
         (print_method_info): Set up method name on the first pass only.
        
+2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * parse.y (parser_qualified_classname): Removed parameter
+       `is_static'.
+       (create_interface): Removed first passed parameter to
+       parser_qualified_classname.
+       (create_class): Likewise. Don't install alias on static
+       innerclasses. Fixes gcj/275.
+
+2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * parse.y (maybe_generate_pre_expand_clinit): Don't build a
+       debugable statement with empty_stmt_node. Fixes gcj/272
+
+2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * expr.c (build_instanceof): Layout type after it's loaded. Fixes
+       gcj/271.
+
 2000-06-29  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
        * jcf-write.c (push_long_const): Appropriately cast short negative
index 5b9b72947997eb3810f7646989557244bb435a3c..f01940f6490992b5398d9db2f98074ceff2b5095 100644 (file)
@@ -1073,6 +1073,7 @@ build_instanceof (value, type)
   if (CLASS_P (type) && ! CLASS_LOADED_P (type))
     {
       load_class (type, 1);
+      safe_layout_class (type);
       if (! TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) == ERROR_MARK)
        return error_mark_node;
     }
index 6d6715e04457ca71cd3d6393efdba2a933f818c0..2910e447d84047f069f36332208e95d0f9fbb54a 100644 (file)
@@ -156,7 +156,7 @@ static tree  find_field PARAMS ((tree, tree));
 static tree lookup_field_wrapper PARAMS ((tree, tree));
 static int   duplicate_declaration_error_p PARAMS ((tree, tree, tree));
 static void  register_fields PARAMS ((int, tree, tree));
-static tree parser_qualified_classname PARAMS ((int, tree));
+static tree parser_qualified_classname PARAMS ((tree));
 static int  parser_check_super PARAMS ((tree, tree, tree));
 static int  parser_check_super_interface PARAMS ((tree, tree, tree));
 static void check_modifiers_consistency PARAMS ((int));
@@ -6347,7 +6347,7 @@ create_interface (flags, id, super)
      tree id, super;
 {
   tree raw_name = EXPR_WFL_NODE (id);
-  tree q_name = parser_qualified_classname (flags & ACC_STATIC, raw_name);
+  tree q_name = parser_qualified_classname (raw_name);
   tree decl = IDENTIFIER_CLASS_VALUE (q_name);
 
   EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */
@@ -6482,7 +6482,7 @@ create_class (flags, id, super, interfaces)
   tree class_id, decl;
   tree super_decl_type;
 
-  class_id = parser_qualified_classname (0, raw_name);
+  class_id = parser_qualified_classname (raw_name);
   decl = IDENTIFIER_CLASS_VALUE (class_id);
   EXPR_WFL_NODE (id) = class_id;
 
@@ -6538,13 +6538,6 @@ create_class (flags, id, super, interfaces)
   CLASS_COMPLETE_P (decl) = 1;
   add_superinterfaces (decl, interfaces);
 
-  /* If the class is a top level inner class, install an alias. */
-  if (INNER_CLASS_DECL_P (decl) && CLASS_STATIC (decl))
-    {
-      tree alias = parser_qualified_classname (1, raw_name);
-      IDENTIFIER_GLOBAL_VALUE (alias) = decl;
-    }
-
   /* Add the private this$<n> field, Replicate final locals still in
      scope as private final fields mangled like val$<local_name>.
      This doesn't not occur for top level (static) inner classes. */
@@ -7484,14 +7477,12 @@ unresolved_type_p (wfl, returned)
    qualification from the current package definition. */
 
 static tree
-parser_qualified_classname (is_static, name)
-     int is_static;
+parser_qualified_classname (name)
      tree name;
 {
   tree nested_class_name;
 
-  if (!is_static 
-      && (nested_class_name = maybe_make_nested_class_name (name)))
+  if ((nested_class_name = maybe_make_nested_class_name (name)))
     return nested_class_name;
 
   if (ctxp->package)
@@ -10159,7 +10150,7 @@ maybe_generate_pre_expand_clinit (class_type)
       /* We build the assignment expression that will initialize the
         field to its value. There are strict rules on static
         initializers (8.5). FIXME */
-      if (TREE_CODE (stmt) != BLOCK)
+      if (TREE_CODE (stmt) != BLOCK && stmt != empty_stmt_node)
        stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
       java_method_add_stmt (mdecl, stmt);
     }
index da0a21983b4a8e3eb403d9331893a301974f142f..42274e63b62a62391512387fa4a4fb640240618b 100644 (file)
@@ -81,7 +81,7 @@ static tree  find_field PARAMS ((tree, tree));
 static tree lookup_field_wrapper PARAMS ((tree, tree));
 static int   duplicate_declaration_error_p PARAMS ((tree, tree, tree));
 static void  register_fields PARAMS ((int, tree, tree));
-static tree parser_qualified_classname PARAMS ((int, tree));
+static tree parser_qualified_classname PARAMS ((tree));
 static int  parser_check_super PARAMS ((tree, tree, tree));
 static int  parser_check_super_interface PARAMS ((tree, tree, tree));
 static void check_modifiers_consistency PARAMS ((int));
@@ -3649,7 +3649,7 @@ create_interface (flags, id, super)
      tree id, super;
 {
   tree raw_name = EXPR_WFL_NODE (id);
-  tree q_name = parser_qualified_classname (flags & ACC_STATIC, raw_name);
+  tree q_name = parser_qualified_classname (raw_name);
   tree decl = IDENTIFIER_CLASS_VALUE (q_name);
 
   EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */
@@ -3784,7 +3784,7 @@ create_class (flags, id, super, interfaces)
   tree class_id, decl;
   tree super_decl_type;
 
-  class_id = parser_qualified_classname (0, raw_name);
+  class_id = parser_qualified_classname (raw_name);
   decl = IDENTIFIER_CLASS_VALUE (class_id);
   EXPR_WFL_NODE (id) = class_id;
 
@@ -3840,13 +3840,6 @@ create_class (flags, id, super, interfaces)
   CLASS_COMPLETE_P (decl) = 1;
   add_superinterfaces (decl, interfaces);
 
-  /* If the class is a top level inner class, install an alias. */
-  if (INNER_CLASS_DECL_P (decl) && CLASS_STATIC (decl))
-    {
-      tree alias = parser_qualified_classname (1, raw_name);
-      IDENTIFIER_GLOBAL_VALUE (alias) = decl;
-    }
-
   /* Add the private this$<n> field, Replicate final locals still in
      scope as private final fields mangled like val$<local_name>.
      This doesn't not occur for top level (static) inner classes. */
@@ -4786,14 +4779,12 @@ unresolved_type_p (wfl, returned)
    qualification from the current package definition. */
 
 static tree
-parser_qualified_classname (is_static, name)
-     int is_static;
+parser_qualified_classname (name)
      tree name;
 {
   tree nested_class_name;
 
-  if (!is_static 
-      && (nested_class_name = maybe_make_nested_class_name (name)))
+  if ((nested_class_name = maybe_make_nested_class_name (name)))
     return nested_class_name;
 
   if (ctxp->package)
@@ -7461,7 +7452,7 @@ maybe_generate_pre_expand_clinit (class_type)
       /* We build the assignment expression that will initialize the
         field to its value. There are strict rules on static
         initializers (8.5). FIXME */
-      if (TREE_CODE (stmt) != BLOCK)
+      if (TREE_CODE (stmt) != BLOCK && stmt != empty_stmt_node)
        stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
       java_method_add_stmt (mdecl, stmt);
     }