RFR: 8343286: Missing unchecked cast warning in polymorphic method call [v2]
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Nov 7 14:01:42 UTC 2024
On Wed, 6 Nov 2024 20:08:54 GMT, Vicente Romero <vromero at 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
More information about the compiler-dev
mailing list