Skip to content

frontend: crash in mostly constant functionΒ #653

@AndreasKrall

Description

@AndreasKrall

The following program:

  constant VL    = 128                // vector length, number of bits in a vector register

  using Bits5    = Bits< 5>           //  5 bit type
  using Bits2    = Bits< 2>           //  2 bit type
  using BitsX    = Bits<64>           // 64 bit type

  function DecodePredCount(pattern: Bits5, size: Bits2) -> BitsX =
    let elements = VL >> (3+size) in
      match pattern with
        { '00000' => elements as BitsX                      // elements is always a power of 2
        , '00001' => if elements >=   1 then   1 else 0
        , '00010' => if elements >=   2 then   2 else 0
        , '00011' => if elements >=   3 then   3 else 0
        , '00100' => if elements >=   4 then   4 else 0
        , '00101' => if elements >=   5 then   5 else 0
        , '00110' => if elements >=   6 then   6 else 0
        , '00111' => if elements >=   7 then   7 else 0
        , '01000' => if elements >=   8 then   8 else 0
        , '01001' => if elements >=  16 then  16 else 0
        , '01010' => if elements >=  32 then  32 else 0
        , '01011' => if elements >=  64 then  64 else 0
        , '01100' => if elements >= 128 then 128 else 0
        , '01101' => if elements >= 256 then 256 else 0
        , '11101' => elements - elements % 4
        , '11110' => elements - elements % 3
        , '11111' => elements
        , _       => 0
        }

leads to the following crash:

                             ___ ___    _   ___ _  _
                            / __| _ \  /_\ / __| || |
                           | (__|   / / _ \\__ \ __ |
                            \___|_|_\/_/ \_\___/_||_|

                       πŸ”₯ The OpenVADL compiler crashed πŸ”₯

This shouldn't have happened, please open an issue with the stacktrace below at:
https://github.com/OpenVADL/open-vadl/issues/new


vadl.ast.EvaluationError: Cannot evaluate identifier with origin of vadl.ast.Parameter
	at vadl.ast.ConstantEvaluator.visitIdentifiable(ConstantEvaluator.java:112)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:158)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:47)
	at vadl.ast.Identifier.accept(Expr.java:219)
	at vadl.ast.ConstantEvaluator.eval(ConstantEvaluator.java:70)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:201)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:47)
	at vadl.ast.BinaryExpr.accept(Expr.java:454)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:404)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:47)
	at vadl.ast.CastExpr.accept(Expr.java:2217)
	at vadl.ast.ConstantEvaluator.eval(ConstantEvaluator.java:70)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:201)
	at vadl.ast.ConstantEvaluator.visit(ConstantEvaluator.java:47)
	at vadl.ast.BinaryExpr.accept(Expr.java:454)
	at vadl.ast.ConstantEvaluator.eval(ConstantEvaluator.java:70)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:2596)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.BinaryExpr.accept(Expr.java:454)
	at vadl.ast.TypeChecker.check(TypeChecker.java:161)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:3638)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.LetExpr.accept(Expr.java:2143)
	at vadl.ast.TypeChecker.check(TypeChecker.java:161)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:1085)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.FunctionDefinition.accept(Definition.java:1977)
	at vadl.ast.TypeChecker.check(TypeChecker.java:261)
	at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1604)
	at vadl.ast.TypeChecker.verify(TypeChecker.java:284)
	at vadl.cli.BaseCommand.parseToVIAM(BaseCommand.java:255)
	at vadl.cli.BaseCommand.call(BaseCommand.java:329)
	at vadl.cli.BaseCommand.call(BaseCommand.java:66)
	at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
	at picocli.CommandLine.access$1500(CommandLine.java:148)
	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
	at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
	at picocli.CommandLine.execute(CommandLine.java:2174)
	at vadl.cli.Main.main(Main.java:44)
	at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingfrontendThis is frontend related

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions