--- old/src/share/vm/ci/ciMethod.cpp 2010-04-16 05:30:55.909719327 -0700 +++ new/src/share/vm/ci/ciMethod.cpp 2010-04-16 05:30:55.399649618 -0700 @@ -692,13 +692,18 @@ // invokedynamic support // bool ciMethod::is_method_handle_invoke() const { - check_is_loaded(); - bool flag = ((flags().as_int() & JVM_MH_INVOKE_BITS) == JVM_MH_INVOKE_BITS); + bool flag = ((holder()->name() == ciSymbol::java_dyn_MethodHandle() && + name() == ciSymbol::invoke_name()) || + holder()->name() == ciSymbol::java_dyn_InvokeDynamic()); #ifdef ASSERT - { - VM_ENTRY_MARK; - bool flag2 = get_methodOop()->is_method_handle_invoke(); - assert(flag == flag2, "consistent"); + if (is_loaded()) { + bool flag2 = ((flags().as_int() & JVM_MH_INVOKE_BITS) == JVM_MH_INVOKE_BITS); + { + VM_ENTRY_MARK; + bool flag3 = get_methodOop()->is_method_handle_invoke(); + assert(flag2 == flag3, "consistent"); + assert(flag == flag3, "consistent"); + } } #endif //ASSERT return flag;