enso-org / enso

Hybrid visual and textual functional programming.
https://enso.org
Apache License 2.0
7.34k stars 323 forks source link

ClassCastException on Boolean crash #6093

Closed hubertp closed 1 year ago

hubertp commented 1 year ago

Discord username

No response

What type of issue is this?

Permanent – Ocurring repeatably

Is this issue blocking you from using Enso?

Is this a regression?

What issue are you facing?

Poking around the solution for one of the bookclubs revealed a hard crash:

[enso] Execution of function main failed (class org.enso.interpreter.runtime.callable.atom.BoxingAtom cannot be cast to class java.lang.Boolean (org.enso.interpreter.runtime.callable.atom.BoxingAtom is in unnamed module of loader com.oracle.graalvm.locator.GraalVMLocator$GuestLangToolsLoader @29314cc9; java.lang.Boolean is in module java.base of loader 'bootstrap')).
java.lang.ClassCastException: Some(class org.enso.interpreter.runtime.callable.atom.BoxingAtom cannot be cast to class java.lang.Boolean (org.enso.interpreter.runtime.callable.atom.BoxingAtom is in unnamed module of loader com.oracle.graalvm.locator.GraalVMLocator$GuestLangToolsLoader @29314cc9; java.lang.Boolean is in module java.base of loader 'bootstrap'))
  at org.enso.interpreter.runtime.type.TypesGen.asBoolean(TypesGen.java:63)
  at org.enso.interpreter.node.expression.builtin.bool.IfThenElseMethodGen.execute(IfThenElseMethodGen.java:89)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68)
  at org.enso.interpreter.node.callable.ExecuteCallNode.callDirect(ExecuteCallNode.java:56)
  at org.enso.interpreter.node.callable.ExecuteCallNodeGen.executeCall(ExecuteCallNodeGen.java:42)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.doCall(CurryNode.java:155)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.execute(CurryNode.java:108)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNode.invokeCached(InvokeFunctionNode.java:92)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNodeGen.execute(InvokeFunctionNodeGen.java:48)
  at org.enso.interpreter.node.callable.InvokeMethodNode.doFunctionalDispatch(InvokeMethodNode.java:107)
  at org.enso.interpreter.node.callable.InvokeMethodNodeGen.execute(InvokeMethodNodeGen.java:68)
  at org.enso.interpreter.node.callable.InvokeCallableNode.invokeDynamicSymbol(InvokeCallableNode.java:254)
  at org.enso.interpreter.node.callable.InvokeCallableNodeGen.execute(InvokeCallableNodeGen.java:85)
  at org.enso.interpreter.node.callable.ApplicationNode.executeGeneric(ApplicationNode.java:97)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:56)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:56)
  at org.enso.interpreter.node.ClosureRootNode.execute(ClosureRootNode.java:85)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68)
  at org.enso.interpreter.node.callable.ExecuteCallNode.callDirect(ExecuteCallNode.java:56)
  at org.enso.interpreter.node.callable.ExecuteCallNodeGen.executeCall(ExecuteCallNodeGen.java:42)
  at org.enso.interpreter.node.callable.dispatch.SimpleCallOptimiserNode.executeDispatch(SimpleCallOptimiserNode.java:49)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.doCall(CurryNode.java:157)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.execute(CurryNode.java:108)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNode.invokeCached(InvokeFunctionNode.java:92)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNodeGen.execute(InvokeFunctionNodeGen.java:48)
  at org.enso.interpreter.node.callable.InvokeMethodNode.doFunctionalDispatch(InvokeMethodNode.java:107)
  at org.enso.interpreter.node.callable.InvokeMethodNodeGen.execute(InvokeMethodNodeGen.java:68)
  at org.enso.interpreter.node.callable.InvokeCallableNode.invokeDynamicSymbol(InvokeCallableNode.java:254)
  at org.enso.interpreter.node.callable.InvokeCallableNodeGen.execute(InvokeCallableNodeGen.java:85)
  at org.enso.interpreter.node.callable.ApplicationNode.executeGeneric(ApplicationNode.java:97)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric_generic1(AssignmentNodeGen.java:57)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric(AssignmentNodeGen.java:36)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeVoid(AssignmentNodeGen.java:75)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:54)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:56)
  at org.enso.interpreter.node.ClosureRootNode.execute(ClosureRootNode.java:85)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68)
  at org.enso.interpreter.node.callable.ExecuteCallNode.callDirect(ExecuteCallNode.java:56)
  at org.enso.interpreter.node.callable.ExecuteCallNodeGen.executeCall(ExecuteCallNodeGen.java:42)
  at org.enso.interpreter.node.callable.dispatch.SimpleCallOptimiserNode.executeDispatch(SimpleCallOptimiserNode.java:49)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.doCall(CurryNode.java:157)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.execute(CurryNode.java:108)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNode.invokeCached(InvokeFunctionNode.java:92)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNodeGen.execute(InvokeFunctionNodeGen.java:48)
  at org.enso.interpreter.node.callable.InvokeMethodNode.doFunctionalDispatch(InvokeMethodNode.java:107)
  at org.enso.interpreter.node.callable.InvokeMethodNodeGen.execute(InvokeMethodNodeGen.java:68)
  at org.enso.interpreter.node.callable.InvokeCallableNode.invokeDynamicSymbol(InvokeCallableNode.java:254)
  at org.enso.interpreter.node.callable.InvokeCallableNodeGen.execute(InvokeCallableNodeGen.java:85)
  at org.enso.interpreter.node.callable.ApplicationNode.executeGeneric(ApplicationNode.java:97)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric_generic1(AssignmentNodeGen.java:57)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric(AssignmentNodeGen.java:36)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeVoid(AssignmentNodeGen.java:75)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:54)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:56)
  at org.enso.interpreter.node.ClosureRootNode.execute(ClosureRootNode.java:85)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:495)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:68)
  at org.enso.interpreter.node.callable.ExecuteCallNode.callDirect(ExecuteCallNode.java:56)
  at org.enso.interpreter.node.callable.ExecuteCallNodeGen.executeCall(ExecuteCallNodeGen.java:42)
  at org.enso.interpreter.node.callable.dispatch.SimpleCallOptimiserNode.executeDispatch(SimpleCallOptimiserNode.java:49)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.doCall(CurryNode.java:157)
  at org.enso.interpreter.node.callable.dispatch.CurryNode.execute(CurryNode.java:108)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNode.invokeCached(InvokeFunctionNode.java:92)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNodeGen.execute(InvokeFunctionNodeGen.java:48)
  at org.enso.interpreter.node.callable.InvokeMethodNode.doFunctionalDispatch(InvokeMethodNode.java:107)
  at org.enso.interpreter.node.callable.InvokeMethodNodeGen.execute(InvokeMethodNodeGen.java:68)
  at org.enso.interpreter.node.callable.InvokeCallableNode.invokeDynamicSymbol(InvokeCallableNode.java:254)
  at org.enso.interpreter.node.callable.InvokeCallableNodeGen.execute(InvokeCallableNodeGen.java:85)
  at org.enso.interpreter.node.callable.ApplicationNode.executeGeneric(ApplicationNode.java:97)
  at org.enso.interpreter.node.ExpressionNodeWrapper.executeGeneric(ExpressionNodeWrapper.java:114)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric_generic1(AssignmentNodeGen.java:57)
  at org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric(AssignmentNodeGen.java:36)
  at org.enso.interpreter.node.ExpressionNodeWrapper.executeGeneric(ExpressionNodeWrapper.java:114)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:56)
  at org.enso.interpreter.node.ExpressionNodeWrapper.executeGeneric(ExpressionNodeWrapper.java:114)
  at org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:56)
  at org.enso.interpreter.node.ClosureRootNode.execute(ClosureRootNode.java:85)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedIndirectCallNode.call(OptimizedIndirectCallNode.java:52)
  at org.enso.interpreter.node.callable.ExecuteCallNode.callIndirect(ExecuteCallNode.java:80)
  at org.enso.interpreter.node.callable.ExecuteCallNodeGen.executeCall(ExecuteCallNodeGen.java:48)
  at org.enso.interpreter.node.callable.dispatch.LoopingCallOptimiserNode$RepeatedCallNode.executeRepeating(LoopingCallOptimiserNode.java:214)
  at org.graalvm.truffle/com.oracle.truffle.api.nodes.RepeatingNode.executeRepeatingWithValue(RepeatingNode.java:112)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedOSRLoopNode.profilingLoop(OptimizedOSRLoopNode.java:154)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedOSRLoopNode.execute(OptimizedOSRLoopNode.java:105)
  at org.enso.interpreter.node.callable.dispatch.LoopingCallOptimiserNode.dispatch(LoopingCallOptimiserNode.java:67)
  at org.enso.interpreter.node.callable.dispatch.LoopingCallOptimiserNodeGen.executeDispatch(LoopingCallOptimiserNodeGen.java:36)
  at org.enso.interpreter.node.callable.dispatch.IndirectCurryNode.doCall(IndirectCurryNode.java:130)
  at org.enso.interpreter.node.callable.dispatch.IndirectCurryNode.doCurry(IndirectCurryNode.java:77)
  at org.enso.interpreter.node.callable.dispatch.IndirectCurryNodeGen.execute(IndirectCurryNodeGen.java:43)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNode.invokeUncached(InvokeFunctionNode.java:140)
  at org.enso.interpreter.node.callable.dispatch.InvokeFunctionNodeGen.execute(InvokeFunctionNodeGen.java:54)
  at org.enso.interpreter.node.callable.InteropApplicationNode.callCached(InteropApplicationNode.java:79)
  at org.enso.interpreter.node.callable.InteropApplicationNodeGen.execute(InteropApplicationNodeGen.java:46)
  at org.enso.interpreter.node.callable.FunctionCallInstrumentationNode$FunctionCall$Execute.callCached(FunctionCallInstrumentationNode.java:103)
  at org.enso.interpreter.node.callable.FunctionCallGen$InteropLibraryExports$Cached.execute(FunctionCallGen.java:75)
  at org.graalvm.truffle/com.oracle.truffle.api.interop.InteropLibraryGen$CachedDispatch.execute(InteropLibraryGen.java:7765)
  at org.enso.interpreter.service.ExecutionService$ExecuteRootNode.execute(ExecutionService.java:477)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:458)
  at org.enso.interpreter.service.ExecutionService.execute(ExecutionService.java:181)
  at org.enso.interpreter.service.ExecutionService.execute(ExecutionService.java:222)
  at org.enso.interpreter.instrument.job.ProgramExecutionSupport$.executeProgram(ProgramExecutionSupport.scala:106)
  at org.enso.interpreter.instrument.job.ProgramExecutionSupport$.$anonfun$runProgram$3(ProgramExecutionSupport.scala:215)
  at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
  at cats.syntax.EitherObjectOps$.catchNonFatal$extension(either.scala:391)
  at org.enso.interpreter.instrument.job.ProgramExecutionSupport$.$anonfun$runProgram$2(ProgramExecutionSupport.scala:215)
  at scala.util.Either.flatMap(Either.scala:352)
  at org.enso.interpreter.instrument.job.ProgramExecutionSupport$.runProgram(ProgramExecutionSupport.scala:209)
  at org.enso.interpreter.instrument.job.ExecuteJob.run(ExecuteJob.scala:33)
  at org.enso.interpreter.instrument.job.ExecuteJob.run(ExecuteJob.scala:14)
  at org.enso.interpreter.instrument.execution.JobExecutionEngine.$anonfun$runInternal$1(JobExecutionEngine.scala:113)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  at java.base/java.lang.Thread.run(Thread.java:829)
  at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotThread.access$001(PolyglotThread.java:53)
  at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotThread$1.execute(PolyglotThread.java:100)
  at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotThread$ThreadSpawnRootNode.executeImpl(PolyglotThread.java:134)
  at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotThread$ThreadSpawnRootNode.execute(PolyglotThread.java:125)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:709)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:632)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:565)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:549)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:477)
  at jdk.internal.vm.compiler/org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:458)
  at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotThread.run(PolyglotThread.java:96)
Caused by: com.oracle.truffle.api.TruffleStackTrace.LazyStackTrace: None

Expected behaviour

No crash

How we can reproduce it?

Took a snapshot of the project state when it crashed. It is 100% reproducible with a CLI by running it on the project. Managed to minimize to

from Standard.Base import all
from Standard.Table.Data.Table import Table
from Standard.Table.Data.Column_Selector import Column_Selector
from Standard.Base.Data.Boolean import Boolean

main =
    x = Table.new [["A", [1,2,3]]]
    cols = [Column_Selector.By_Name "A"]
    x.select_columns cols reorder=Boolean.True

In the provided example it crashes when using the provided suggestion (Boolean.True) to the Table.select_column method for the reorder parameter. This is a real example because IDE will insert Boolean.True instead of True.

Screenshots or screencasts

No response

Enso Version

develop

Browser or standalone distribution

Chrome

Browser Version or standalone distribution

standalone

Operating System

Linux

Operating System Version

No response

Hardware you are using

No response

hubertp commented 1 year ago

@Akirathan I'm wondering if this is not yet another manifestation of https://github.com/enso-org/enso/issues/6076 since changing Boolean.True to True works just fine.

hubertp commented 1 year ago

Extracted a minimal example. Let me know if you need a full project snapshot.

JaroslavTulach commented 1 year ago

Related to

which has just been fixed, btw.

Akirathan commented 1 year ago

Fixed by #6090.

hubertp commented 1 year ago

True, I can confirm

enso-bot[bot] commented 1 year ago

Hubert Plociniczak reports a new STANDUP for yesterday (2023-03-27):

Progress: Spent most of the day with some old bookclub examples, trying to break them. So far filed 6099, 6098, 6095, 6088, 6094. More to come. Trying to verify other engine-related bugs. It should be finished by 2023-03-27.

Next Day: Next day I will be working on the #6099 task. Pick up latest design for execution contexts, trying to figure out how to remedy 6099.