chipsalliance / chipsalliance/chisel
BoringUtils: tapAndRead of literal throws error
- 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
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