fuzion
fuzion copied to clipboard
AoC issue: Small example using recursion, type inference and `panic`crashes with empty stack
This code
_ := n
n => if true then n else panic "n"
crashes fz
> ./build//bin/fz test_empty_stack.fz
error 1: java.util.EmptyStackException
at java.base/java.util.Stack.peek(Stack.java:101)
at java.base/java.util.Stack.pop(Stack.java:83)
at dev.flang.fuir.analysis.AbstractInterpreter.pop(AbstractInterpreter.java:380)
at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:619)
at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:515)
at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:478)
at dev.flang.be.jvm.JVM.codeForRoutine(JVM.java:1126)
at dev.flang.be.jvm.JVM.code(JVM.java:843)
at dev.flang.be.jvm.JVM$CompilePhase$3.compile(JVM.java:465)
at dev.flang.be.jvm.JVM.lambda$createCode$0(JVM.java:817)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
at java.base/java.util.stream.ReferencePipeline$Head.forEachOrdered(ReferencePipeline.java:772)
at dev.flang.be.jvm.JVM.createCode(JVM.java:810)
at dev.flang.be.jvm.JVM.compile(JVM.java:795)
at dev.flang.tools.Fuzion$Backend$3.process(Fuzion.java:163)
at dev.flang.tools.Fuzion$Backend.processFrontEnd(Fuzion.java:444)
at dev.flang.tools.Fuzion.lambda$parseArgsForBackend$3(Fuzion.java:908)
at dev.flang.tools.Tool.lambda$run$0(Tool.java:145)
at dev.flang.util.Errors.runAndExit(Errors.java:790)
at dev.flang.tools.Tool.run(Tool.java:145)
at dev.flang.tools.Fuzion.main(Fuzion.java:557)
Now verify error:
error 1: java.lang.VerifyError: Expecting a stack map frame
Exception Details:
Location:
fzC_n.fzRoutine()V @29: ldc
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: bb00 0259 b700 0b4b b800 1199 0006 a7ff
0000010: fab2 0017 5712 19b8 001f a700 0012 21b8
0000020: 001f a700 00
Stackmap Table:
full_frame(@0,{},{})
full_frame(@8,{Object[#2]},{})
full_frame(@11,{Object[#2]},{Integer})
full_frame(@14,{Object[#2]},{})
full_frame(@17,{Object[#2]},{})
full_frame(@26,{Object[#2]},{})
full_frame(@34,{Object[#2]},{})
at fzC_universe.fzRoutine(Unknown Source)
at fzC_universe.fz_run(Unknown Source)
at dev.flang.be.jvm.runtime.FuzionThread.lambda$new$1(FuzionThread.java:97)
at dev.flang.util.Errors.runAndExit(Errors.java:935)
at dev.flang.be.jvm.runtime.FuzionThread.lambda$new$2(FuzionThread.java:106)
at java.base/java.lang.Thread.run(Thread.java:1583)
*** fatal errors encountered, stopping.
A variant of this causes NoSuchMethodError:
ex is
n2 => if true then n2 else panic "n"
n2