[multiple changes]
authorAlexandre Petit-Bianco <apbianco@redhat.com>
Tue, 31 Jul 2001 22:20:05 +0000 (15:20 -0700)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Tue, 31 Jul 2001 22:20:05 +0000 (15:20 -0700)
2001-07-18  Alexandre Petit-Bianco  <apbianco@redhat.com>

* parse.y (create_interface): Avoid cyclic inheritance report when
syntax error encountered during class definition.
Fixes PR java/2956

2001-07-17  Alexandre Petit-Bianco  <apbianco@redhat.com>

* parse.h (INTERFACE_INNER_MODIFIERS): Disallow `private.'
* parse.y (check_class_interface_creation): Allow `private' if the
enclosing is not an interface.
(create_interface): Interface tagged public if the enclosing
context is an interface.
(create_class): Class tagged public if the enclosing context
is an interface.
Fixes PR java/2959

2001-07-17  Alexandre Petit-Bianco  <apbianco@redhat.com>

* class.c (push_class): Set DECL_SIZE to `integer_zero_node.'
Fixes PR java/2665

2001-07-13  Alexandre Petit-Bianco  <apbianco@redhat.com>

* parse.y (java_complete_lsh): Set CAN_COMPLETE_NORMALLY and unset
TREE_CONSTANT_OVERFLOW of CASE_EXPR value.
Fixes PR java/3602

(http://gcc.gnu.org/ml/gcc-patches/2001-07/msg02297.html )

From-SVN: r44524

gcc/java/ChangeLog
gcc/java/class.c
gcc/java/parse.h
gcc/java/parse.y

index b3e9a2ad3757c809f07278bd93fd9fdda78d9607..a694743e6ce67fb7aac14b4d2303abd2d2c1cd80 100644 (file)
@@ -1,3 +1,9 @@
+2001-07-18  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.y (create_interface): Avoid cyclic inheritance report when
+       syntax error encountered during class definition.
+       Fixes PR java/2956
+
 2001-07-18  Tom Tromey  <tromey@redhat.com>
 
        For PR java/2812:
        * Make-lang.in (jc1$(exeext)): Link against LIBICONV.
        (jv-scan$(exeext)): Likewise.
 
+2001-07-17  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.h (INTERFACE_INNER_MODIFIERS): Disallow `private.'
+       * parse.y (check_class_interface_creation): Allow `private' if the
+       enclosing is not an interface.
+       (create_interface): Interface tagged public if the enclosing
+       context is an interface.
+       (create_class): Class tagged public if the enclosing context
+       is an interface.
+       Fixes PR java/2959
+
+2001-07-17  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * class.c (push_class): Set DECL_SIZE to `integer_zero_node.'
+       Fixes PR java/2665
+
 2001-07-14  Tim Josling  <tej@melbpc.org.au>
 
        * check-init.c (check_init): Remove references to EXPON_EXPR.
 
+2001-07-13  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.y (java_complete_lsh): Set CAN_COMPLETE_NORMALLY and unset
+       TREE_CONSTANT_OVERFLOW of CASE_EXPR value.
+       Fixes PR java/3602
+
 2001-07-13  Tom Tromey  <tromey@redhat.com>
 
        * jvspec.c (jvgenmain_spec): Remove -ffilelist-file from cc1
index 45bb6df2cf753217281116a17dbca4de922ddaaa..3b56f53ff51f4202722347b7b531eccc0bcc80cc 100644 (file)
@@ -331,6 +331,10 @@ push_class (class_type, class_name)
   input_filename = IDENTIFIER_POINTER (source_name);
   lineno = 0;
   decl = build_decl (TYPE_DECL, class_name, class_type);
+
+  /* dbxout needs a DECL_SIZE if in gstabs mode */
+  DECL_SIZE (decl) = integer_zero_node;
+
   input_filename = save_input_filename;
   lineno = save_lineno;
   signature = identifier_subst (class_name, "L", '.', '/', ";");
index 798d139177066c7cd85546efae1b357e50e0430c..a47e017ed4efcf43961d179aa22167332ce462f3 100644 (file)
@@ -79,7 +79,7 @@ extern tree stabilize_reference PARAMS ((tree));
 #define METHOD_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_ABSTRACT| \
                         ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE
 #define INTERFACE_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT
-#define INTERFACE_INNER_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_ABSTRACT|ACC_STATIC
+#define INTERFACE_INNER_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_ABSTRACT|ACC_STATIC
 #define INTERFACE_METHOD_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT
 #define INTERFACE_FIELD_MODIFIERS ACC_PUBLIC|ACC_STATIC|ACC_FINAL
 
index 03a540c06e0bc324f7b01da6d7e3982225f09398..1fb08bcd343e04d34dd034cea13d9a19f4e5ac3c 100644 (file)
@@ -3450,7 +3450,9 @@ check_class_interface_creation (is_interface, flags, raw_name, qualified_name, d
       else
        {
          check_modifiers_consistency (flags);
-         icaf = ACC_PRIVATE|ACC_PROTECTED;
+         icaf = ACC_PROTECTED;
+         if (! CLASS_INTERFACE (GET_CPC ()))
+           icaf |= ACC_PRIVATE;
        }
     }
 
@@ -3738,6 +3740,11 @@ create_interface (flags, id, super)
   tree q_name = parser_qualified_classname (raw_name);
   tree decl = IDENTIFIER_CLASS_VALUE (q_name);
 
+  /* Certain syntax errors are making SUPER be like ID. Avoid this
+     case. */
+  if (ctxp->class_err && id == super)
+    super = NULL;
+
   EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */
 
   /* Basic checks: scope, redefinition, modifiers */ 
@@ -3750,7 +3757,12 @@ create_interface (flags, id, super)
   /* Suspend the current parsing context if we're parsing an inner
      interface */
   if (CPC_INNER_P ())
-    java_parser_context_suspend ();
+    {
+      java_parser_context_suspend ();
+      /* Interface members are public. */
+      if (CLASS_INTERFACE (GET_CPC ()))
+       flags |= ACC_PUBLIC;
+    }
 
   /* Push a new context for (static) initialized upon declaration fields */
   java_parser_context_push_initialized_field ();
@@ -3870,6 +3882,11 @@ create_class (flags, id, super, interfaces)
   tree class_id, decl;
   tree super_decl_type;
 
+  /* Certain syntax errors are making SUPER be like ID. Avoid this
+     case. */
+  if (ctxp->class_err && id == super)
+    super = NULL;
+
   class_id = parser_qualified_classname (raw_name);
   decl = IDENTIFIER_CLASS_VALUE (class_id);
   EXPR_WFL_NODE (id) = class_id;
@@ -3884,7 +3901,13 @@ create_class (flags, id, super, interfaces)
   /* Suspend the current parsing context if we're parsing an inner
      class or an anonymous class. */
   if (CPC_INNER_P ())
-    java_parser_context_suspend ();
+    {
+      java_parser_context_suspend ();
+      /* Interface members are public. */
+      if (CLASS_INTERFACE (GET_CPC ()))
+       flags |= ACC_PUBLIC;
+    }
+    
   /* Push a new context for (static) initialized upon declaration fields */
   java_parser_context_push_initialized_field ();
 
@@ -7336,7 +7359,9 @@ java_reorder_fields ()
          }
       }
     }
-  stop_reordering = TREE_TYPE (TREE_VALUE (gclass_list));
+  /* There are cases were gclass_list will be empty. */
+  if (gclass_list)
+    stop_reordering = TREE_TYPE (TREE_VALUE (gclass_list));
 }
 
 /* Layout the methods of all classes loaded in one way or another.
@@ -11367,6 +11392,8 @@ java_complete_lhs (node)
        }
 
       cn = fold (convert (int_type_node, cn));
+      TREE_CONSTANT_OVERFLOW (cn) = 0;
+      CAN_COMPLETE_NORMALLY (cn) = 1;
 
       /* Multiple instance of a case label bearing the same
         value is checked during code generation. The case