chipsalliance / chipsalliance/chisel

BoringUtils: tapAndRead of literal throws error

Open
#4,663 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Scala
Stars
4.8k
Forks
658
Avg merge
18h 59m
Merged PRs (30d)
14

Description

**Type of issue**: Bug Report

**Please provide the steps to reproduce the problem:**

Use `BoringUtils.tapAndRead` on a literal, example:

```
//> using repository "sonatype-s01:snapshots"
//> using scala "2.13.14"
//> using dep "org.chipsalliance::chisel:7.0.0-M2+317-62ca9bdc-SNAPSHOT"
//> using plugin "org.chipsalliance:::chisel-plugin:7.0.0-M2+317-62ca9bdc-SNAPSHOT"
//> using options "-unchecked", "-deprecation", "-language:reflectiveCalls", "-feature", "-Xcheckinit", "-Xfatal-warnings", "-Ywarn-dead-code", "-Ywarn-unused", "-Ymacro-annotations"

import chisel3._
import circt.stage.ChiselStage
import chisel3.util.experimental.BoringUtils

class Foo extends RawModule {
val x = 5.U
val y = BoringUtils.tapAndRead(x)
}

object Main extends App {
println(ChiselStage.emitCHIRRTL(new Foo, Array("--full-stacktrace")))
}
```

**What is the current behavior?**

```
Exception in thread "main" java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:627)
at scala.None$.get(Option.scala:626)
at chisel3.util.experimental.BoringUtils$.parent$1(BoringUtils.scala:230)
at chisel3.util.experimental.BoringUtils$.boreOrTap(BoringUtils.scala:328)
at chisel3.util.experimental.BoringUtils$.$anonfun$tapAndRead$3(BoringUtils.scala:423)
at chisel3.experimental.skipPrefix$.apply(prefix.scala:102)
at chisel3.util.experimental.BoringUtils$.$anonfun$tapAndRead$2(BoringUtils.scala:423)
at chisel3.experimental.prefix$.apply(prefix.scala:50)
at chisel3.util.experimental.BoringUtils$.$anonfun$tapAndRead$1(BoringUtils.scala:422)
at chisel3.internal.plugin.package$.autoNameRecursively(package.scala:33)
at chisel3.util.experimental.BoringUtils$.tapAndRead(BoringUtils.scala:422)
at Foo.$anonfun$y$2(bore-literal.scala:13)
(snip)
```

**What is the expected behavior?**

Ability to use BoringUtils with literals.

**Please tell us about your environment:**

**Other Information**

**What is the use case for changing the behavior?**

Building library code using BoringUtils.

Contributor guide

Open the contributing guide

Research direction

Start with BoringUtils.scala at the stack-trace locations around lines 230, 328, and 422-423, then run the supplied Scala reproduction using BoringUtils.tapAndRead on 5.U. Done means the example emits CHIRRTL without a NoSuchElementException and BoringUtils works with literals.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
embedded-iot
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.