RFR: 8185858: [MVT] "must constrain OSR typestate" crash

Tobias Hartmann tobias.hartmann at oracle.com
Mon Aug 21 12:05:52 UTC 2017


Hi Roland,

this looks good to me. I just found and fixed these minor issues:

diff -r 1491300d343a src/share/vm/runtime/sharedRuntime.cpp
--- a/src/share/vm/runtime/sharedRuntime.cpp	Mon Aug 21 13:01:43 2017 +0200
+++ b/src/share/vm/runtime/sharedRuntime.cpp	Mon Aug 21 13:17:28 2017 +0200
@@ -2967,7 +2967,7 @@
            Handle protection_domain(THREAD, method->method_holder()->protection_domain());
            Klass* k = ss.as_klass(class_loader, protection_domain, SignatureStream::ReturnNull, THREAD);
            assert(k != NULL && !HAS_PENDING_EXCEPTION, "can't resolve klass");
-          assert(k == SystemDictionary::___Value_klass(), "other values no supported");
+          assert(k == SystemDictionary::___Value_klass(), "other values not supported");
  #endif
            bt = T_VALUETYPEPTR;
          }
diff -r 1491300d343a src/share/vm/utilities/globalDefinitions.hpp
--- a/src/share/vm/utilities/globalDefinitions.hpp	Mon Aug 21 13:01:43 2017 +0200
+++ b/src/share/vm/utilities/globalDefinitions.hpp	Mon Aug 21 13:17:28 2017 +0200
@@ -690,7 +690,7 @@
    T_NARROWKLASS_aelem_bytes = 4,
    T_VOID_aelem_bytes        = 0,
  #ifdef _LP64
-  T_VALUETYPEPTR_aelem_bytes= 4,
+  T_VALUETYPEPTR_aelem_bytes= 4
  #else
    T_VALUETYPEPTR_aelem_bytes= 8
  #endif

All tests pass. Pushed.

Thanks,
Tobias

On 09.08.2017 10:38, Roland Westrelin wrote:
> 
> http://cr.openjdk.java.net/~roland/8185858/webrev.00/
> 
> An OSR compilation with a __Value local fails because in
> Parse::load_interpreter_state():
> 
> local_type_at() returns
> TypeValueTypePtr::NOTNULL. Parse::fetch_interpreter_state() then uses
> the basic type of TypeValueTypePtr::NOTNULL to load the __Value
> local. That basic type is T_OBJECT so it loads a
> TypeInstPtr::BOTTOM. Parse::check_interpreter_type() then casts the
> result of the load to __Value. TypeInstPtr::BOTTOM and __Value are
> unrelated and the outcome of the cast causes the assert failure.
> 
> C2 handles value types either as buffered values or unbuffered values
> but we only have one basic type to designate a value type. I suggest we
> add a new one for buffered values. That also helps clean up the calling
> convention a bit.
> 
> Roland.
> 


More information about the valhalla-dev mailing list