fuzion icon indicating copy to clipboard operation
fuzion copied to clipboard

AoC issue: Small example using recursion, type inference and `panic`crashes with empty stack

Open fridis opened this issue 2 years ago • 1 comments

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)

fridis avatar Dec 10 '23 22:12 fridis

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.

michaellilltokiwa avatar Mar 20 '24 11:03 michaellilltokiwa

A variant of this causes NoSuchMethodError:

ex is
  n2 => if true then n2 else panic "n"
  n2

michaellilltokiwa avatar May 24 '24 08:05 michaellilltokiwa