Request for reviews (XS): 7087727: JSR 292: C2 crash if ScavengeRootsInCode=2 when "static final" MethodHandle constants are in use

Christian Thalinger christian.thalinger at oracle.com
Tue Nov 8 12:18:29 PST 2011


On Nov 8, 2011, at 7:52 PM, Tom Rodriguez wrote:

> 
> On Nov 8, 2011, at 10:24 AM, Christian Thalinger wrote:
> 
>> 
>> On Nov 8, 2011, at 7:12 PM, Vladimir Kozlov wrote:
>> 
>>> Christian,
>>> 
>>> You recently fixed other code to avoid check bytecode directly. So should you use is_method_handle_invoke() here? Or it is not correct for this place?
>> 
>> I wanted to do that but then I noticed that there is no easy way to get a methodHandle out of a ciMethod and left it as it is.  If you know of a good way let me know and I will change it.
> 
> I don't think you want to use is_method_handle_invoke in this code.  It's explicitly interested in what kind of call site is being used so that it can emit the proper kind of guard.

Yeah, right.  I just wanted to use Bytecode_invoke::is_invokedynamic.

-- Chris

> 
> In the failing case what invoke bytecode is being used?  invokevirtual?  Why would some call sites that invoke an MH used invokevirtual and others use invokespecial?
> 
> tom
> 
>> 
>> -- Chris
>> 
>>> 
>>> Thanks,
>>> Vladimir
>>> 
>>> Christian Thalinger wrote:
>>>> http://cr.openjdk.java.net/~twisti/7087727/
>>>> 7087727: JSR 292: C2 crash if ScavengeRootsInCode=2 when "static final" MethodHandle constants are in use
>>>> Reviewed-by:
>>>> The flag setting ScavengeRootsInCode=2 causes the JIT to inline more
>>>> constants.  This is generally a good thing for performance, but can
>>>> cause bugs in compiled code.
>>>> The test case has a code pattern that looks similar to the
>>>> selectAlternative idiom but boils down to a different invoke bytecode
>>>> (invokevirtual in that case).  The current code in
>>>> PredictedDynamicCallGenerator::generate checks for invokespecial
>>>> (which is used by selectAlternative) and so code for invokedynamic is
>>>> generated (in non-debug builds) which eventually leads to a crash.
>>>> src/share/vm/opto/callGenerator.cpp
>> 
> 



More information about the hotspot-compiler-dev mailing list