RFR: 8263642: javac emits duplicate checkcast for first bound of intersection type in cast [v2]
Vicente Romero
vromero at openjdk.java.net
Wed Jun 2 16:15:46 UTC 2021
On Wed, 2 Jun 2021 15:26:18 GMT, Guoxiong Li <gli at openjdk.org> wrote:
>> Hi all,
>>
>> Before the phase `desugar`, the demo `(C1 & I1) o` has **one** type-cast sub-tree, `JCTypeIntersection C1&I1`, at the syntax tree. After the phase `desugar`, the `(C1 & I1) o` becomes **three** type-cast sub-trees: `JCTypeIntersection C1&I1`, `I1`, `C1`. So at phase `Gen`, `javac` generates **three** `checkcast` according to the **three** type-cast sub-trees which causes this bug.
>>
>> This patch doesn't generate `checkcast` when the type is `JCTypeIntersection` so that the problem can be solved. And a corresponding test case is added.
>>
>> Another way to solve this issue is that the `TransTypes` of the `desugar` should be modified and **two** type-cast sub-trees should be generated instead of **three**. But this way may change more code than my original patch and may cause other regression.
>>
>> Thank you for taking the time to review.
>>
>> Best Regards.
>> --Guoxiong
>
> Guoxiong Li 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:
>
> - Remove the duplicated typecast nodes in the AST instead of ignoring it
> - Check the type of the checkcast
> - Merge branch 'master' into JDK-8263642
> - 8263642: javac emits duplicate checkcast for first bound of intersection type in cast
test/langtools/tools/javac/cast/intersection/DuplicatedCheckcastTest.java line 94:
> 92: "Expected number: 2, actual number: " + checkCastList.size());
> 93: }
> 94: // first checkcast
hi, there is common code in the two sections of code that check for the checkcast I suggest creating a method for the common code
-------------
PR: https://git.openjdk.java.net/jdk/pull/3399
More information about the compiler-dev
mailing list