[9] RFR (S): 8157181: Compilers accept modification of final fields outside initializer methods

Coleen Phillimore coleen.phillimore at oracle.com
Fri Jun 10 19:43:32 UTC 2016


Hi,

I'm late to the thread, which is good because it's better that this 
check is done in the rewriter, than in InstanceKlass.

But I'm fuzzy on why this wasn't checked in the verifier, and what the 
purpose of the has_initialized_final_update (which means a non <init> 
method has updated a final field, which is a verify error, right?

Also, have you run the JCK tests?

Why have a global flag if it's an error?

Thanks,
Coleen



On 6/10/16 1:40 PM, Zoltán Majó wrote:
> Hi Vladimir,
>
>
> On 06/10/2016 06:05 PM, Vladimir Ivanov wrote:
>>
>>> Please note an additional small change in rewriter.cpp:
>>>
>>> +if (!reverse) {
>>> // Check if any final field of the class given as parameter is modified
>>> // outside of initializer methods of the class. Fields that are 
>>> modified
>>>    ...
>>> +}
>>>
>>> It's sufficient to check fields during rewriting (i.e., we're coming
>>> from Rewriter::rewrite_bytecodes()). We do not need to do the checks if
>>> the class has already been rewritten but we're reversing changes due to
>>> some failure that appeared during rewriting (in that case scan_method()
>>> is called from Rewriter::restore_bytecodes()).
>>
>> Ok.
>>
>>> Here is the updated webrev:
>>> http://cr.openjdk.java.net/~zmajo/8157181/webrev.11/
>>
>> Looks good.
>>
>> src/share/vm/runtime/globals.hpp
>>
>> +          "for classfile version >= 51")
>>
>> s/51/53/ (no need to send new webrev).
>
> OK, I've corrected the code in-situ (in webrev.11). I also have the 
> JPRT results now, all tests pass.
>
> Thank you!
>
> Best regards,
>
>
> Zoltan
>
>
>
>>
>> Best regards,
>> Vladimir Ivanov
>



More information about the hotspot-dev mailing list