You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ge...@apache.org on 2006/10/14 13:07:24 UTC

svn commit: r463912 - in /incubator/harmony/enhanced/drlvm/trunk/vm: interpreter/src/interpreter.cpp vmcore/include/version_svn_tag.h

Author: geirm
Date: Sat Oct 14 04:07:22 2006
New Revision: 463912

URL: http://svn.apache.org/viewvc?view=rev&rev=463912
Log:
HARMONY-1561

Interpreter throws IllegalAccessError on putfield opcode for all methods except <init>.
It should not throw the error if the <init> method for this object is in the calling stack.
Reproducible on activemq-4.0.2.

Had to -R putfield.patch before applying H-1561.diff

TestPutFinal.j passes , as do smoke, c-unit, kernel on Ubuntu 6



Modified:
    incubator/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp
    incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h

Modified: incubator/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp?view=diff&rev=463912&r1=463911&r2=463912
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp Sat Oct 14 04:07:22 2006
@@ -1780,21 +1780,9 @@
         M2N_FREE_MACRO;
     }
 
-    if (field->is_final()) {
-        if (!frame.method->is_init()) {
-
-            // searching for the constructor for this class in stack.
-            for (StackFrame *f = frame.prev; true; f = f->prev) {
-                if (f == NULL) {
-                    throwIAE(field_get_name(field));
-                    return;
-                }
-
-                if (f->This == frame.This && f->method->is_init()) {
-                    break;
-                }
-            }
-        }
+    if (field->is_final() && clazz != field->get_class()) {
+        throwIAE(field_get_name(field));
+        return;
     }
 
     DEBUG_BYTECODE(field->get_name()->bytes << " " << field->get_descriptor()->bytes
@@ -2526,7 +2514,7 @@
             << frame.method->get_descriptor()->bytes << endl);
 
     assert(frame.method->is_static() || frame.This);
-
+    
     M2N_ALLOC_MACRO;
     assert(!check_current_thread_exception());
     assert(!hythread_is_suspend_enabled());

Modified: incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h?view=diff&rev=463912&r1=463911&r2=463912
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h Sat Oct 14 04:07:22 2006
@@ -18,6 +18,6 @@
 #ifndef _VERSION_SVN_TAG_
 #define _VERSION_SVN_TAG_
 
-#define VERSION_SVN_TAG  "454528"
+#define VERSION_SVN_TAG  "463908"
 
 #endif // _VERSION_SVN_TAG_