aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@redhat.com>2001-07-31 15:20:05 -0700
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-07-31 15:20:05 -0700
commit9d7d836262a3137e04bf23c6073717be26bcc667 (patch)
treec1431312dd508cf15c33d179d6327cc406656347
parent6d0f55e6bc86ecc0a8f227ade76ec0d224e6e1ef (diff)
downloadgcc-9d7d836262a3137e04bf23c6073717be26bcc667.zip
gcc-9d7d836262a3137e04bf23c6073717be26bcc667.tar.gz
gcc-9d7d836262a3137e04bf23c6073717be26bcc667.tar.bz2
[multiple changes]
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
-rw-r--r--gcc/java/ChangeLog28
-rw-r--r--gcc/java/class.c4
-rw-r--r--gcc/java/parse.h2
-rw-r--r--gcc/java/parse.y35
4 files changed, 64 insertions, 5 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index b3e9a2a..a694743 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -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:
@@ -7,10 +13,32 @@
* 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
diff --git a/gcc/java/class.c b/gcc/java/class.c
index 45bb6df..3b56f53 100644
--- a/gcc/java/class.c
+++ b/gcc/java/class.c
@@ -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", '.', '/', ";");
diff --git a/gcc/java/parse.h b/gcc/java/parse.h
index 798d139..a47e017 100644
--- a/gcc/java/parse.h
+++ b/gcc/java/parse.h
@@ -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
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 03a540c..1fb08bc 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -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