From aabd7048259b5e8cb8980cca95fb2d14096c2621 Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Sat, 16 Jan 1999 02:00:29 -0800 Subject: 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 --- gcc/java/expr.c | 4 ++-- gcc/java/parse.c | 9 +++++++-- gcc/java/parse.y | 9 +++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) (limited to 'gcc/java') 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); } } -- cgit v1.1