diff options
author | Tom Tromey <tromey@redhat.com> | 2003-04-11 01:57:05 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2003-04-11 01:57:05 +0000 |
commit | bc9150d3354d869a668b18fa6e29ae575aaac5e8 (patch) | |
tree | db48dc2c7d649aaa27bf51aacd0d1e699cf33b3d /libjava | |
parent | 06790e5fd57528a3ee2822d392ff918c1c49abb7 (diff) | |
download | gcc-bc9150d3354d869a668b18fa6e29ae575aaac5e8.zip gcc-bc9150d3354d869a668b18fa6e29ae575aaac5e8.tar.gz gcc-bc9150d3354d869a668b18fa6e29ae575aaac5e8.tar.bz2 |
verify.cc (pop64): Removed.
* verify.cc (pop64): Removed.
(verify_instructions_0) <op_pop2>: Inline code. Don't throw
exception if top-of-stack is narrow.
(initialize_stack): Check to ensure that <init> is not static and
<clinit> is.
From-SVN: r65453
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 8 | ||||
-rw-r--r-- | libjava/verify.cc | 28 |
2 files changed, 25 insertions, 11 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 7ae2dd7..d4403ef 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,11 @@ +2003-04-10 Tom Tromey <tromey@redhat.com> + + * verify.cc (pop64): Removed. + (verify_instructions_0) <op_pop2>: Inline code. Don't throw + exception if top-of-stack is narrow. + (initialize_stack): Check to ensure that <init> is not static and + <clinit> is. + 2003-04-07 Aaron M. Renn (arenn@urbanophile.com) * java/io/ObjectStreamException diff --git a/libjava/verify.cc b/libjava/verify.cc index 8f8c1df..4a6ca45 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -1202,14 +1202,6 @@ private: return r; } - type pop64 () - { - type r = pop_raw (); - if (! r.iswide ()) - verify_fail ("wide pop of narrow type"); - return r; - } - type pop_type (type match) { match.promote (); @@ -2160,21 +2152,31 @@ private: bool initialize_stack () { int var = 0; - bool is_init = false; + bool is_init = _Jv_equalUtf8Consts (current_method->self->name, + gcj::init_name); + bool is_clinit = _Jv_equalUtf8Consts (current_method->self->name, + gcj::clinit_name); using namespace java::lang::reflect; if (! Modifier::isStatic (current_method->self->accflags)) { type kurr (current_class); - if (_Jv_equalUtf8Consts (current_method->self->name, gcj::init_name)) + if (is_init) { kurr.set_uninitialized (type::SELF, this); is_init = true; } + else if (is_clinit) + verify_fail ("<clinit> method must be static"); set_variable (0, kurr); current_state->set_this_type (kurr); ++var; } + else + { + if (is_init) + verify_fail ("<init> method must be non-static"); + } // We have to handle wide arguments specially here. int arg_count = _Jv_count_arguments (current_method->self->signature); @@ -2525,7 +2527,11 @@ private: pop32 (); break; case op_pop2: - pop64 (); + { + type t = pop_raw (); + if (! t.iswide ()) + pop32 (); + } break; case op_dup: { |