JVM crash with split-at
In some cases, an invocation of split-at results in a JVM crash. A simple example is below. split-at works fine if given a literal integer as the second argument (e.g., 2 in the example below).
$ cat w.scm
(import (scheme base)
(scheme write)
(only (srfi 1) split-at))
(let ((lst '(0 1 2 3)))
(if (odd? (length lst))
(error 'odd)
(split-at lst
(/ (length lst) 2))))
$ kawa w.scm
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
w.run(Lgnu/mapping/CallContext;)V @52: invokestatic
Reason:
Type 'gnu/math/RatNum' (current frame, stack[1]) is not assignable to 'gnu/math/IntNum'
Current Frame:
bci: @52
flags: { }
locals: { 'w', 'gnu/mapping/CallContext', 'gnu/lists/Consumer' }
stack: { 'gnu/lists/PairWithPosition', 'gnu/math/RatNum' }
Bytecode:
0x0000000: 2bb4 0008 4db2 000c b600 1204 7e99 0014
0x0000010: 04bd 0014 5903 b200 1853 b800 1eb2 0024
0x0000020: bfb2 000c b200 0cb6 0012 b800 2a05 b800
0x0000030: 2ab8 002f b800 352c b800 3bb1
Stackmap Table:
append_frame(@16,Object[#90])
same_frame(@33)
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
at java.lang.Class.getDeclaredField(Class.java:2068)
at gnu.expr.ModuleContext.findInstance(ModuleContext.java:71)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:286)
at gnu.expr.CompiledModule.evalModule(CompiledModule.java:42)
at gnu.expr.CompiledModule.evalModule(CompiledModule.java:60)
at kawa.Shell.runFile(Shell.java:571)
at kawa.Shell.runFileOrClass(Shell.java:474)
at kawa.repl.processArgs(repl.java:710)
at kawa.repl.main(repl.java:830)
$ kawa --version
Kawa 3.1.1 (git describe: 3.1.1-6-g079d3a6f1-dirty)
Copyright (C) 2020 Per Bothner
$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-1~deb9u1-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
$