You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/02/20 15:38:15 UTC
svn commit: r509582 - in /harmony/enhanced/drlvm/trunk:
src/test/regression/H2103/ vm/vmcore/src/verifier/
Author: gshimansky
Date: Tue Feb 20 06:38:14 2007
New Revision: 509582
URL: http://svn.apache.org/viewvc?view=rev&rev=509582
Log:
Applied HARMONY-3208 [drlvm][verifier] Adding a regression test and a bugfix of H-2103
Tests passed on Ubuntu6 x86, Windows 2003 server x86 and SuSE9 x86_64
Added:
harmony/enhanced/drlvm/trunk/src/test/regression/H2103/
harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SubClass.j (with props)
harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SupClass.j (with props)
harmony/enhanced/drlvm/trunk/src/test/regression/H2103/Test.java (with props)
Modified:
harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_real.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SubClass.j
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SubClass.j?view=auto&rev=509582
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SubClass.j (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SubClass.j Tue Feb 20 06:38:14 2007
@@ -0,0 +1,17 @@
+.class public org/apache/harmony/drlvm/tests/regression/h2103/SubClass
+.super org/apache/harmony/drlvm/tests/regression/h2103/SupClass
+
+.method public <init>()V
+ aload_0
+ invokespecial org/apache/harmony/drlvm/tests/regression/h2103/SupClass/<init>()V
+ return
+.end method
+
+.method public test()I
+ .limit locals 2
+ .limit stack 2
+ sipush 105
+ ireturn
+.end method
+
+
Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SubClass.j
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SupClass.j
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SupClass.j?view=auto&rev=509582
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SupClass.j (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SupClass.j Tue Feb 20 06:38:14 2007
@@ -0,0 +1,19 @@
+.class public org/apache/harmony/drlvm/tests/regression/h2103/SupClass
+.super java/lang/Object
+
+.method public <init>()V
+ aload_0
+ invokespecial java/lang/Object/<init>()V
+ return
+.end method
+
+.method public static test()I
+ .limit locals 3
+ .limit stack 3
+ new org/apache/harmony/drlvm/tests/regression/h2103/SubClass
+ dup
+ invokespecial org/apache/harmony/drlvm/tests/regression/h2103/SubClass/<init>()V
+ invokespecial org/apache/harmony/drlvm/tests/regression/h2103/SubClass/mth()I
+ ireturn
+.end method
+
Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H2103/SupClass.j
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H2103/Test.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H2103/Test.java?view=auto&rev=509582
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H2103/Test.java (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H2103/Test.java Tue Feb 20 06:38:14 2007
@@ -0,0 +1,29 @@
+package org.apache.harmony.drlvm.tests.regression.h2103;
+
+import junit.framework.TestCase;
+
+/**
+ * Loads class and tries to invoke a method which should fail
+ * verification.
+ *
+ * SubClass contains an incorrect invokespecial instruction which invokes
+ * a method from a subclass of the current class, while only superclass
+ * constructors can be called using this instruction.
+ */
+public class Test extends TestCase {
+ public static void main(String args[]) {
+ (new Test()).test();
+ }
+
+ public void test() {
+ try {
+ SupClass.test();
+ } catch (VerifyError ve) {
+ return;
+ } catch (Exception e) {
+ }
+ fail("A method of SupClass class should throw VerifyError");
+ }
+}
+
+
Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H2103/Test.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_real.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_real.h?view=diff&rev=509582&r1=509581&r2=509582
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_real.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_real.h Tue Feb 20 06:38:14 2007
@@ -71,12 +71,14 @@
stream << error_message; \
vf_set_error_message( stream, (context) ); \
}
-#define VERIFY_REPORT_METHOD(context, error_message ) \
+#define VERIFY_REPORT_CLASS(context, method, error_message ) \
VERIFY_REPORT(context, \
"(class: " << class_get_name( (context)->m_class ) \
- << ", method: " << method_get_name( (context)->m_method ) \
- << method_get_descriptor( (context)->m_method ) \
+ << ", method: " << method_get_name( method ) \
+ << method_get_descriptor( method ) \
<< ") " << error_message )
+#define VERIFY_REPORT_METHOD(context, error_message ) \
+ VERIFY_REPORT_CLASS(context, (context)->m_method, error_message )
/**
* Define source code line and source file name parameters and arguments.
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp?view=diff&rev=509582&r1=509581&r2=509582
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp Tue Feb 20 06:38:14 2007
@@ -1007,12 +1007,8 @@
case VF_CHECK_INVOKESPECIAL: // check object for invokespecial instruction
return vf_is_super_class( source, current )
&& vf_is_super_class( current, target );
- default:
- LDIE(40, "Verifier: vf_is_valid: invalid check type" );
- return false;
}
- // unreachable code
- assert(0);
+ LDIE(40, "Verifier: vf_is_valid: invalid check type" );
} // vf_is_valid
/**
@@ -1026,42 +1022,39 @@
switch( check )
{
case VF_CHECK_PARAM:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Incompatible argument for function" );
- break;
+ return;
case VF_CHECK_ASSIGN:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Incompatible types for field assignment" );
- break;
+ return;
case VF_CHECK_ASSIGN_WEAK:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Incompatible types for array assignment" );
- break;
+ return;
case VF_CHECK_SUPER:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Exception class not a subclass of Throwable" );
- break;
+ return;
case VF_CHECK_ACCESS_FIELD:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Bad access to protected field" );
- break;
+ return;
case VF_CHECK_ACCESS_METHOD:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Bad access to protected method" );
- break;
+ return;
case VF_CHECK_DIRECT_SUPER:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Call to wrong initialization method" );
- break;
+ return;
case VF_CHECK_INVOKESPECIAL:
- VERIFY_REPORT_METHOD( ctex,
+ VERIFY_REPORT_CLASS( ctex, method,
"Incompatible object argument for invokespecial" );
- break;
- default:
- LDIE(41, "Verifier: vf_set_error: unknown check type" );
- break;
+ return;
}
- return;
+ LDIE(41, "Verifier: vf_set_error: unknown check type" );
} // vf_set_error
/**