From 19f8e04bff25d9c494c95f994b3ec2b4cc7b7f77 Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Thu, 15 Mar 2001 20:16:54 -0800 Subject: [PATCH] verify.c (verify_jvm_instructions): Better error msgs for dup. * verify.c (verify_jvm_instructions): Better error msgs for dup. (type_stack_dup): Remove no-longer neded error check. From-SVN: r40529 --- gcc/java/ChangeLog | 5 +++++ gcc/java/verify.c | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 848e17559d7..80e2102d083 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2001-03-13 Per Bothner + + * verify.c (verify_jvm_instructions): Better error msgs for dup. + (type_stack_dup): Remove no-longer neded error check. + 2001-03-15 Bryce McKinlay * mangle.c (mangle_record_type): Rename 'from_pointer' argument diff --git a/gcc/java/verify.c b/gcc/java/verify.c index 5ac1d057e5c..bb10b447c95 100644 --- a/gcc/java/verify.c +++ b/gcc/java/verify.c @@ -294,8 +294,6 @@ type_stack_dup (size, offset) { tree type[4]; int index; - if (size + offset > stack_pointer) - error ("stack underflow - dup* operation"); for (index = 0; index < size + offset; index++) { type[index] = stack_type_map[stack_pointer - 1]; @@ -923,12 +921,18 @@ verify_jvm_instructions (jcf, byte_ops, length) case OPCODE_new: PUSH_TYPE (get_class_constant (jcf, IMMEDIATE_u2)); break; - case OPCODE_dup: type_stack_dup (1, 0); break; - case OPCODE_dup_x1: type_stack_dup (1, 1); break; - case OPCODE_dup_x2: type_stack_dup (1, 2); break; - case OPCODE_dup2: type_stack_dup (2, 0); break; - case OPCODE_dup2_x1: type_stack_dup (2, 1); break; - case OPCODE_dup2_x2: type_stack_dup (2, 2); break; + case OPCODE_dup: wide = 1; index = 0; goto dup; + case OPCODE_dup_x1: wide = 1; index = 1; goto dup; + case OPCODE_dup_x2: wide = 1; index = 2; goto dup; + case OPCODE_dup2: wide = 2; index = 0; goto dup; + case OPCODE_dup2_x1: wide = 2; index = 1; goto dup; + case OPCODE_dup2_x2: wide = 2; index = 2; goto dup; + dup: + if (wide + index > stack_pointer) + VERIFICATION_ERROR ("stack underflow - dup* operation"); + type_stack_dup (wide, index); + wide = 0; + break; case OPCODE_pop: index = 1; goto pop; case OPCODE_pop2: index = 2; goto pop; pop: