Index: vm/interpreter/src/interpreter.cpp =================================================================== --- vm/interpreter/src/interpreter.cpp (revision 449553) +++ vm/interpreter/src/interpreter.cpp (working copy) @@ -1779,11 +1779,9 @@ M2N_FREE_MACRO; } - if (field->is_final()) { - if (!frame.method->is_init()) { - throwIAE(field_get_name(field)); - return; - } + if (field->is_final() && clazz != field->get_class()) { + throwIAE(field_get_name(field)); + return; } DEBUG_BYTECODE(field->get_name()->bytes << " " << field->get_descriptor()->bytes @@ -2514,6 +2512,8 @@ << " " << frame.method->get_name()->bytes << 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());