RFR 8129547 (S): Excess entries in BootstrapMethods with the same (bsm, bsmKind, bsmStaticArgs), but different dynamicArgs
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon Aug 17 14:15:39 UTC 2015
Ok, I think I know what you meant now; DynamicMethod is used for two
different purposes:
* for the NameAndType CP entry associated with an invokedynamic
instruction (pointed by the CONSTANT_InvokeDynamic entry); this bit
_requires_ dynamic info to be taken into account - as different invoked
types need to map to different entries - even if their underlying BSM
entry is the same.
* as keys in the BootstrapMethod attribute; in this case you want the
dynamic info to be gone, as all it's going to be stored in the table is
a bsmKind + static args list.
How about something like this:
http://cr.openjdk.java.net/~mcimadamore/8129547/
Maurizio
On 17/08/15 14:48, Maurizio Cimadamore wrote:
> Hi Alex,
> the only dfference I see between your patch and the current code is
> that the current code is comparing the invokedType, while yours is not
> - am I reading your patch correctly?
>
> If that's the case, wouldn't dropping the call to super.equals from
> Pool.DynamicMethod also resolve the issue?
>
> I'm, saying this because, from a design perspective, javac symbols
> usually don't care about uniqueness etc. - that's an extra value added
> when storing them into a constant pool.
>
> Maurizio
>
> On 17/08/15 13:33, Aleksey Shipilev wrote:
>> Hi,
>>
>> This issue gets into way with my current work:
>> https://bugs.openjdk.java.net/browse/JDK-8129547
>>
>> There is a proof-of-concept patch:
>> http://cr.openjdk.java.net/~shade/8129547/webrev.00/
>>
>> The crux of an issue seems to be the Method.equals() call in
>> DynamicMethod.equals(), that compares the type. The type of
>> DynamicMethod includes the DynamicMethodSymbol.type, that includes
>> dynamic args. It seems DynamicMethodSymbol is a better fit for
>> BootstrapMethod table key, since it includes BSM symbol and static
>> arguments only.
>>
>> I would be grateful if somebody from compiler team can help me out with
>> this. Is this the fix above valid? Can you do it better?
>>
>> How would one write a regression test for it? My cursory grep through
>> langtools tests does not yield a clear way to emit a special-shaped indy
>> for such a test.
>>
>> Thanks,
>> -Aleksey
>>
>
More information about the compiler-dev
mailing list