aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2003-04-11 01:57:05 +0000
committerTom Tromey <tromey@gcc.gnu.org>2003-04-11 01:57:05 +0000
commitbc9150d3354d869a668b18fa6e29ae575aaac5e8 (patch)
treedb48dc2c7d649aaa27bf51aacd0d1e699cf33b3d /libjava
parent06790e5fd57528a3ee2822d392ff918c1c49abb7 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--libjava/verify.cc28
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:
{