On 26 feb 2014, at 01:48, Daniel D. Daugherty <daniel.daughe...@oracle.com> wrote:
> I concur with Markus. Pairing JVM_CONSTANT_UnresolvedClassInError with > JVM_CONSTANT_UnresolvedClass in the ConstantPool::copy_entry_to() > switch looks like the right thing to do. Good - thanks. > > The usual questions: > > - why wasn't this failure mode seen before JDK8? No tests for this ? ;) > - was this failure caught somewhere else before JDK8 and changes > in JDK8 exposed a new code path? > > Reasoning about this from a 30,000 foot view, I don't see any reason > why you can't redefine a class that has a constant pool ref that > refers to a class in error. You won't be able to use the error'ed > class, but there's no reason it can't be in there... Or does that > violate the rule that you can't redefine a class that isn't fully > linked (what ever that means...)??? > > So what does your new test on JDK7 or JDK6? Just curious… The test passes on jdk7, but fails on jdk8. (I don’t have a jdk6). I don’t know why it passes on jdk7, do you think it’s important to track it down? /Staffan > > Dan > > > On 2/24/14 2:42 AM, Markus Gronlund wrote: >> Hi Staffan, >> >> I would think this is the correct fix. >> >> The other two constant pool "error" tags, besides UnresolvedClassInError, >> which signal constant pool resolution errors are MethodTypeInError and >> MethodHandleInError - these error tags are associated with their >> corresponding "success" tags in switch targets in >> ConstantPool::copy_entry_to(), as well as in additional routines in >> constantPool.cpp. >> >> In addition, in other routines in ConstantPool.cpp, the error tag >> JVM_CONSTANT_UnresolvedClassInError is associated with >> JVM_CONSTANT_UnresolvedClass - ConstantPool::resolve_constant_at_impl() for >> example. >> >> Thanks >> Markus >> >> >> -----Original Message----- >> From: Staffan Larsen >> Sent: den 21 februari 2014 15:11 >> To: hotspot-runtime-dev; serviceability-dev@openjdk.java.net >> serviceability-dev@openjdk.java.net >> Subject: RFR: 8035150 ShouldNotReachHere() in ConstantPool::copy_entry_to >> >> This is an attempt to solve a crash while redefining a class that has >> unresolved class references in its constant pool. I would appreciate some >> extra scrutiny here since I am unfamiliar with this code path. >> >> I have also added a test that causes a JVM crash without the fix. >> >> The updates to the test library is all code copied from the jdk version of >> the test library. >> >> webrev: http://cr.openjdk.java.net/~sla/8035150/webrev.00/ >> bug: https://bugs.openjdk.java.net/browse/JDK-8035150 >> >> Thanks, >> /Staffan >