aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPer Bothner <bothner@gcc.gnu.org>1999-01-16 02:00:29 -0800
committerPer Bothner <bothner@gcc.gnu.org>1999-01-16 02:00:29 -0800
commitaabd7048259b5e8cb8980cca95fb2d14096c2621 (patch)
treed5099cf85a030d4f4dc3b6272d86ab60fa028821
parent2dc219a11db3efc10d1564bf31db97aa7918e61b (diff)
downloadgcc-aabd7048259b5e8cb8980cca95fb2d14096c2621.zip
gcc-aabd7048259b5e8cb8980cca95fb2d14096c2621.tar.gz
gcc-aabd7048259b5e8cb8980cca95fb2d14096c2621.tar.bz2
expr.c (process_jvm_instruction): Coerce to correct Throwable sub-type the result of the call that gets the...
d * expr.c (process_jvm_instruction): Coerce to correct Throwable sub-type the result of the call that gets the exception value. * parse.y (java_complete_expand_methods): If flags_syntax_only, don't call finish_class. * parse.y (java_check_regular_methods): If METHOD_PRIVATE, clear found before continuing. * verify.c (verify_jvm_instructions): On an array load, allow and handle top of stack to be TYPE_NULL. From-SVN: r24697
-rw-r--r--gcc/java/expr.c4
-rw-r--r--gcc/java/parse.c9
-rw-r--r--gcc/java/parse.y9
3 files changed, 16 insertions, 6 deletions
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 623eb90..ab3d2f3 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -2197,8 +2197,8 @@ process_jvm_instruction (PC, byte_ops, length)
replace the top of the stack with the thrown object reference */
if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET)
{
- pop_value (ptr_type_node);
- push_value (soft_exceptioninfo_call_node);
+ tree type = pop_type (ptr_type_node);
+ push_value (build1 (NOP_EXPR, type, soft_exceptioninfo_call_node));
}
switch (byte_ops[PC++])
diff --git a/gcc/java/parse.c b/gcc/java/parse.c
index c34aa13..8d7da90 100644
--- a/gcc/java/parse.c
+++ b/gcc/java/parse.c
@@ -7161,8 +7161,13 @@ java_check_regular_methods (class_decl)
found = lookup_argument_method (super_class, DECL_NAME (method), sig);
/* Nothing overrides or it's a private method. */
- if (!found || (found && METHOD_PRIVATE (found)))
+ if (!found)
continue;
+ if (METHOD_PRIVATE (found))
+ {
+ found = NULL_TREE;
+ continue;
+ }
/* If found wasn't verified, it's DECL_NAME won't be set properly.
We set it temporarily for the sake of the error report. */
@@ -8310,7 +8315,7 @@ java_complete_expand_methods ()
{
if (flag_emit_class_files)
write_classfile (current_class);
- else
+ else if (! flag_syntax_only)
finish_class (current_class);
}
}
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 0384004..c6805c2 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -4523,8 +4523,13 @@ java_check_regular_methods (class_decl)
found = lookup_argument_method (super_class, DECL_NAME (method), sig);
/* Nothing overrides or it's a private method. */
- if (!found || (found && METHOD_PRIVATE (found)))
+ if (!found)
continue;
+ if (METHOD_PRIVATE (found))
+ {
+ found = NULL_TREE;
+ continue;
+ }
/* If found wasn't verified, it's DECL_NAME won't be set properly.
We set it temporarily for the sake of the error report. */
@@ -5672,7 +5677,7 @@ java_complete_expand_methods ()
{
if (flag_emit_class_files)
write_classfile (current_class);
- else
+ else if (! flag_syntax_only)
finish_class (current_class);
}
}