7041244: JSR 292: Server VM gets a SEGV running a JCK test
Reviewed-by: iveresov, kvn, never
--- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Mon May 02 18:53:37 2011 -0700
+++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Wed May 04 00:41:48 2011 -0700
@@ -645,9 +645,10 @@
// Live at this point:
// - G5_klass : klass required by the target method
+ // - O0_argslot : argslot index in vmarg; may be required in the failing path
// - O1_scratch : argument klass to test
// - G3_method_handle: adapter method handle
- __ check_klass_subtype(O1_scratch, G5_klass, O0_argslot, O2_scratch, done);
+ __ check_klass_subtype(O1_scratch, G5_klass, O2_scratch, O3_scratch, done);
// If we get here, the type check failed!
__ load_heap_oop(G3_amh_argument, O2_required); // required class
--- a/hotspot/src/share/vm/memory/genOopClosures.hpp Mon May 02 18:53:37 2011 -0700
+++ b/hotspot/src/share/vm/memory/genOopClosures.hpp Wed May 04 00:41:48 2011 -0700
@@ -175,7 +175,7 @@
protected:
template <class T> inline void do_oop_work(T* p) {
oop obj = oopDesc::load_decode_heap_oop(p);
- guarantee(obj->is_oop_or_null(), err_msg("invalid oop: " INTPTR_FORMAT, obj));
+ guarantee(obj->is_oop_or_null(), err_msg("invalid oop: " INTPTR_FORMAT, (oopDesc*) obj));
}
public:
virtual void do_oop(oop* p);