fuzion icon indicating copy to clipboard operation
fuzion copied to clipboard

AoC Issue: Missing implementation of `lteq` in type feature results in crash

Open fridis opened this issue 2 years ago • 1 comments

This example does is missing an implementation of test.x.type.lteq:

test is
  a is
    h x := x
    type.q(a test.a.this) => a.h <= a.h
  x : property.orderable is
  p := a.type.q a

Which is not reported as an error but results in a crash:

 > $FUZION/bin/fz part1_crash2.fz

error 1: Found error clazz in set of clazzes in the IR even though no earlier errors were reported.  This can only be the result of a severe bug.


warning 1: code for intrinsic lteq.T is missing


error 2: java.lang.IndexOutOfBoundsException: Index -268435457 out of bounds for length 105
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
	at java.base/java.util.Objects.checkIndex(Objects.java:359)
	at java.base/java.util.ArrayList.get(ArrayList.java:427)
	at dev.flang.util.Map2Int.get(Map2Int.java:148)
	at dev.flang.fuir.FUIR.clazz(FUIR.java:244)
	at dev.flang.fuir.FUIR.clazzContract(FUIR.java:1036)
	at dev.flang.fuir.FUIR.hasPrecondition(FUIR.java:2414)
	at dev.flang.fuir.cfg.CFG.createCallGraphForExpr(CFG.java:561)
	at dev.flang.fuir.cfg.CFG.createCallGraphForBlock(CFG.java:534)
	at dev.flang.fuir.cfg.CFG.createCallGraphForRoutine(CFG.java:179)
	at dev.flang.fuir.cfg.CFG.createCallGraph(CFG.java:149)
	at dev.flang.fuir.cfg.CFG.addToCallGraph(CFG.java:670)
	at dev.flang.fuir.cfg.CFG.call(CFG.java:641)
	at dev.flang.fuir.cfg.CFG.access(CFG.java:623)
	at dev.flang.fuir.cfg.CFG.createCallGraphForExpr(CFG.java:567)
	at dev.flang.fuir.cfg.CFG.createCallGraphForBlock(CFG.java:534)
	at dev.flang.fuir.cfg.CFG.createCallGraphForRoutine(CFG.java:179)
	at dev.flang.fuir.cfg.CFG.createCallGraph(CFG.java:149)
	at dev.flang.fuir.cfg.CFG.addToCallGraph(CFG.java:670)
	at dev.flang.fuir.cfg.CFG.call(CFG.java:641)
	at dev.flang.fuir.cfg.CFG.access(CFG.java:623)
	at dev.flang.fuir.cfg.CFG.createCallGraphForExpr(CFG.java:567)
	at dev.flang.fuir.cfg.CFG.createCallGraphForBlock(CFG.java:534)
	at dev.flang.fuir.cfg.CFG.createCallGraphForRoutine(CFG.java:179)
	at dev.flang.fuir.cfg.CFG.createCallGraph(CFG.java:149)
	at dev.flang.fuir.cfg.CFG.addToCallGraph(CFG.java:670)
	at dev.flang.fuir.cfg.CFG.call(CFG.java:641)
	at dev.flang.fuir.cfg.CFG.access(CFG.java:623)
	at dev.flang.fuir.cfg.CFG.createCallGraphForExpr(CFG.java:567)
	at dev.flang.fuir.cfg.CFG.createCallGraphForBlock(CFG.java:534)
	at dev.flang.fuir.cfg.CFG.createCallGraphForRoutine(CFG.java:179)
	at dev.flang.fuir.cfg.CFG.createCallGraph(CFG.java:149)
	at dev.flang.fuir.cfg.CFG.createCallGraph(CFG.java:132)
	at dev.flang.be.effects.Effects.<init>(Effects.java:73)
	at dev.flang.tools.Fuzion$Backend.processFrontEnd(Fuzion.java:443)
	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)


*** fatal errors encountered, stopping.

fridis avatar Dec 07 '23 16:12 fridis

the example from #4093

ex =>

  My_Fun ref : Function i32 i32 is

  a (b My_Fun) is

  a n->n

also causes this error

❯ fz /tmp/4093.fz                                         

/tmp/4093.fz:7:5: error 1: Wrong number of arguments in lambda expression
  a n->n

Lambda expression has one argument while the target type expects -1 arguments.
Arguments of lambda expression: 'n'
Expected function type: ex.this.My_Fun
To solve this, remove 2 arguments from the list 'n' before the '->' of the lambda expression.


error 2: java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
        at java.base/java.util.Objects.checkIndex(Objects.java:385)
        at java.base/java.util.ArrayList.get(ArrayList.java:427)
        at dev.flang.ast.Function.propagateTypeAndInferResult(Function.java:300)
        at dev.flang.ast.Function.propagateExpectedType(Function.java:188)
        at dev.flang.ast.Call.lambda$propagateExpectedType$25(Call.java:2524)
        at dev.flang.ast.Call.applyToActualsAndFormalTypes(Call.java:2633)
        at dev.flang.ast.Call.propagateExpectedType(Call.java:2524)
        at dev.flang.ast.Feature$4.action(Feature.java:1919)
        at dev.flang.ast.Feature$4.action(Feature.java:1917)
        at dev.flang.ast.Call.visit(Call.java:1112)
        at dev.flang.ast.Block.visit(Block.java:212)
        at dev.flang.ast.Block.visit(Block.java:42)
        at dev.flang.ast.Impl.visit(Impl.java:301)
        at dev.flang.ast.Feature.visit(Feature.java:1192)
        at dev.flang.ast.Feature.typeInference(Feature.java:1917)
        at dev.flang.ast.Feature.typeInference(Feature.java:1881)
        at dev.flang.ast.Feature.typeInference(Feature.java:1881)
        at dev.flang.ast.Resolution.resolveOne(Resolution.java:448)
        at dev.flang.ast.Resolution.resolve(Resolution.java:392)
        at dev.flang.fe.SourceModule.createASTandResolve(SourceModule.java:261)
        at dev.flang.fe.FrontEnd.<init>(FrontEnd.java:166)
        at dev.flang.tools.Fuzion.lambda$parseArgsForBackend$4(Fuzion.java:1119)
        at dev.flang.tools.Tool.lambda$run$0(Tool.java:142)
        at dev.flang.util.Errors.runAndExit(Errors.java:903)
        at dev.flang.tools.Tool.run(Tool.java:142)
        at dev.flang.tools.Fuzion.main(Fuzion.java:672)


*** fatal errors encountered, stopping.
2 errors.

simonvonhackewitz avatar Mar 14 '25 09:03 simonvonhackewitz

idiom87 causes a similar error on the interpreter backend

❯ fz -interpreter -e 'ex87 is exit 0'

error 1: *** java.lang.IndexOutOfBoundsException: Index -268435457 out of bounds for length 99
Call stack:
exit.type.install_default: {base.fum}/exit.fz:58:7:
      (exit default_exit_handler unit unit).default

exit0: {base.fum}/exit.fz:101:3:
  exit.install_default

exit#1: {base.fum}/exit.fz:108:30:
public exit(code u8) void => exit0.exit code

ex87: {main.fum}/command line:1:9:
ex87 is exit 0




error 2: java.lang.IndexOutOfBoundsException: Index -268435457 out of bounds for length 99
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
        at java.base/java.util.Objects.checkIndex(Objects.java:385)
        at java.base/java.util.ArrayList.get(ArrayList.java:427)
        at dev.flang.fuir.GeneratingFUIR.id2clazz(GeneratingFUIR.java:444)
        at dev.flang.fuir.GeneratingFUIR.clazzIsRef(GeneratingFUIR.java:1317)
        at dev.flang.be.interpreter.Interpreter.loadField(Interpreter.java:354)
        at dev.flang.be.interpreter.Interpreter.getField(Interpreter.java:253)
        at dev.flang.be.interpreter.Executor.call(Executor.java:274)
        at dev.flang.be.interpreter.Executor.call(Executor.java:58)
        at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:601)
        at dev.flang.fuir.analysis.AbstractInterpreter.processCode(AbstractInterpreter.java:512)
        at dev.flang.fuir.analysis.AbstractInterpreter.processClazz(AbstractInterpreter.java:488)
        at dev.flang.be.interpreter.Executor.callOnNewInstance(Executor.java:624)
        at dev.flang.be.interpreter.Executor.call(Executor.java:258)
        at dev.flang.be.interpreter.Executor.call(Executor.java:58)
        at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:601)
        at dev.flang.fuir.analysis.AbstractInterpreter.processCode(AbstractInterpreter.java:512)
        at dev.flang.be.interpreter.Executor.match(Executor.java:529)
        at dev.flang.be.interpreter.Executor.match(Executor.java:58)
        at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:645)
        at dev.flang.fuir.analysis.AbstractInterpreter.processCode(AbstractInterpreter.java:512)
        at dev.flang.fuir.analysis.AbstractInterpreter.processClazz(AbstractInterpreter.java:488)
        at dev.flang.be.interpreter.Executor.callOnNewInstance(Executor.java:624)
        at dev.flang.be.interpreter.Executor.call(Executor.java:258)
        at dev.flang.be.interpreter.Executor.call(Executor.java:58)
        at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:601)
        at dev.flang.fuir.analysis.AbstractInterpreter.processCode(AbstractInterpreter.java:512)
        at dev.flang.fuir.analysis.AbstractInterpreter.processClazz(AbstractInterpreter.java:488)
        at dev.flang.be.interpreter.Executor.callOnNewInstance(Executor.java:624)
        at dev.flang.be.interpreter.Executor.call(Executor.java:258)
        at dev.flang.be.interpreter.Executor.call(Executor.java:58)
        at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:601)
        at dev.flang.fuir.analysis.AbstractInterpreter.processCode(AbstractInterpreter.java:512)
        at dev.flang.fuir.analysis.AbstractInterpreter.processClazz(AbstractInterpreter.java:488)
        at dev.flang.be.interpreter.Executor.callOnNewInstance(Executor.java:624)
        at dev.flang.be.interpreter.Executor.call(Executor.java:258)
        at dev.flang.be.interpreter.Executor.call(Executor.java:58)
        at dev.flang.fuir.analysis.AbstractInterpreter.process(AbstractInterpreter.java:601)
        at dev.flang.fuir.analysis.AbstractInterpreter.processCode(AbstractInterpreter.java:512)
        at dev.flang.fuir.analysis.AbstractInterpreter.processClazz(AbstractInterpreter.java:488)
        at dev.flang.be.interpreter.Interpreter.run(Interpreter.java:75)
        at dev.flang.tools.Fuzion$Backend$1.process(Fuzion.java:114)
        at dev.flang.tools.Fuzion$Backend.processFrontEnd(Fuzion.java:557)
        at dev.flang.tools.Fuzion.lambda$parseArgsForBackend$4(Fuzion.java:1138)
        at dev.flang.tools.Tool.lambda$run$0(Tool.java:142)
        at dev.flang.util.Errors.runAndExit(Errors.java:912)
        at dev.flang.tools.Tool.run(Tool.java:142)
        at dev.flang.tools.Fuzion.main(Fuzion.java:688)


*** fatal errors encountered, stopping.
2 errors.

On JVM it works

❯ fz -e 'ex87 is exit 0'                             

simonvonhackewitz avatar Jul 08 '25 12:07 simonvonhackewitz

meanwhile fixed: #reg_issue5330

michaellilltokiwa avatar Jul 16 '25 10:07 michaellilltokiwa