On Wed, 6 Nov 2024 20:08:54 GMT, Vicente Romero <vrom...@openjdk.org> wrote:

>> Javac is not issuing a mandated unchecked cast warning for code like:
>> 
>> 
>> import java.lang.invoke.VarHandle;
>> 
>> class VarHandleCast<V> {
>>      VarHandle vh;
>>      V method(Object obj) {
>>          return (V)vh.getAndSet(this, obj);
>>      }
>> }
>> 
>> 
>> according to the spec the return type inferred for this method polymorphic 
>> method should be Object see:
>> 
>> -  If the compile-time declaration for the method invocation is a signature 
>> polymorphic method, then:
>> ...
>>     – The compile-time result is determined as follows:
>>         Otherwise, if the method invocation expression is the operand of a 
>> cast
>>     expression (§15.16), the compile-time result is the erasure of the type 
>> of the
>>     cast expression (§4.6).
>> 
>> javac is not doing the type erasure mandated by the spec which is what this 
>> PR is fixing
>> 
>> TIA
>> 
>> Note: I had to add some annotations to suppress warnings in java.base that 
>> were not being issued before due to the javac bug
>
> Vicente Romero has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains four additional 
> commits since the last revision:
> 
>  - fixing build error
>  - Merge branch 'master' into JDK-8343286
>  - fixing build error
>  - 8343286: Redundant cast in polymorphic method call

Changes look good. The extra suppress warnings seem to indicate that the logic 
is now working as intended :-)

-------------

Marked as reviewed by mcimadamore (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/21914#pullrequestreview-2421062251

Reply via email to