Skip to content

frontend: Crash when using a forall index as sliceΒ #641

@Jozott00

Description

@Jozott00

The following spec

instruction set architecture ARCH = {

  program counter PC  : Bits<64>
  memory          MEM : Bits<64> -> Bits<8>

  register X : Bits<5> -> Bits<64>

  format Fmt : Bits<32> =
  { opcd    : Bits<6>
  , rs    : Bits<5>
  , ra   : Bits<5>
  , rb   : Bits<5>
  , extopcd : Bits<10>
  , rsv     : Bits<1>
  }

  instruction Instr : Fmt = {
    forall i: Bits<6> in 0..31 do {
      X(1)(i) := 1
    }
  }
  encoding Instr = {opcd = 0b010011, extopcd = 0b01000'00001, rsv = 0b0}
  assembly Instr = ("CRAND", " ", decimal(rs), ",", decimal(rb), ",", decimal(ra))
}

crashes with

vadl.ast.EvaluationError: Cannot evaluate identifier with origin of vadl.ast.ForallStatement
	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.TypeChecker.checkIndexSlice(TypeChecker.java:3048)
	at vadl.ast.TypeChecker.visitSliceIndexCall(TypeChecker.java:3099)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:3362)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.CallIndexExpr.accept(Expr.java:1861)
	at vadl.ast.TypeChecker.check(TypeChecker.java:161)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:3934)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.AssignmentStatement.accept(Statement.java:332)
	at vadl.ast.TypeChecker.check(TypeChecker.java:196)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:3880)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.BlockStatement.accept(Statement.java:121)
	at vadl.ast.TypeChecker.check(TypeChecker.java:196)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:4152)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.ForallStatement.accept(Statement.java:1004)
	at vadl.ast.TypeChecker.check(TypeChecker.java:196)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:3880)
	at vadl.ast.TypeChecker.visit(TypeChecker.java:74)
	at vadl.ast.BlockStatement.accept(Statement.java:121)
	at vadl.ast.TypeChecker.check(TypeChecker.java:196)

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