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

Vicente Romero vicente.romero at oracle.com
Tue Dec 19 16:45:47 UTC 2023


Hi Przemek,

Thanks again for the report and the additional info provided. I have 
created [1] and assigned it to myself,

Vicente

[1] https://bugs.openjdk.org/browse/JDK-8322477

On 12/19/23 03:48, Przemek Bielicki wrote:
> 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/989e4a8f/attachment.htm>


More information about the compiler-dev mailing list