[Bug] javac gives non-deterministic output (for sealed interface with records)

Przemek Bielicki pbielicki at gmail.com
Tue Dec 19 08:48:05 UTC 2023


Oh damn! I think IDEA's decompiler helped a little with the explanation of
the meaning of the order.
As you can see from the attached screenshot the order of permits differ:

permits GradleExecGraphNodeExecutionInfo.Task,
GradleExecGraphNodeExecutionInfo.Transform {
vs.
permits GradleExecGraphNodeExecutionInfo.Transform,
GradleExecGraphNodeExecutionInfo.Task {

I guess this structure (collection of permits?) is handled by the compiler
using some sort of Set instead of a List thus we get a
non-deterministic order.
My fellow Gradle colleagues told me that they discovered such
non-determinisms in the past and the reasons were very similar.

I hope it's helpful and can unblock you from digging deeper? 🤞🏻

What's interesting is that javap isn't showing this difference. 🤔

Cheers,
Przemek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/compiler-dev/attachments/20231219/7c78e4f0/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: idea_decompiled.png
Type: image/png
Size: 166235 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/compiler-dev/attachments/20231219/7c78e4f0/idea_decompiled-0001.png>


More information about the compiler-dev mailing list