aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala
diff options
context:
space:
mode:
authorJack Koenig2021-03-16 10:26:38 -0700
committerGitHub2021-03-16 10:26:38 -0700
commit94d1bee4c23bd3d8f99dae3ca431ffaa5dc1410d (patch)
treed673a1024f74ca65b27329343082dc1751e1583f /src/test/scala
parent0eb7afd09d488507d776017c5df8f6ec56924927 (diff)
Fix issue where inlined cvt could cause crash (#2124)
Due to inlining of Boolean expressions, the following circuit is handled directly by the VerilogEmitter: input a: UInt<4> input b: SInt<1> output o: UInt<5> o <= dshl(a, asUInt(cvt(b))) Priot to this change, this could crash due to mishandling of cvt in the logic to inject parentheses based on Verilog precedence rules. This is a corner case, but similar bugs would drop up if we open up the VerilogEmitter to more expression inlining.
Diffstat (limited to 'src/test/scala')
-rw-r--r--src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala b/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala
index 02ac3cd0..e11c4281 100644
--- a/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala
+++ b/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala
@@ -392,6 +392,22 @@ class InlineBooleanExpressionsSpec extends FirrtlFlatSpec {
firrtlEquivalenceTest(input, Seq(new InlineBooleanExpressions))
}
+ // https://github.com/chipsalliance/firrtl/issues/2035
+ // This is interesting because other ways of trying to express this get split out by
+ // SplitExpressions and don't get inlined again
+ // If we were to inline more expressions (ie. not just boolean ones) the issue this represents
+ // would come up more often
+ it should "handle cvt nested inside of a dshl" in {
+ val input =
+ """circuit DshlCvt:
+ | module DshlCvt:
+ | input a: UInt<4>
+ | input b: SInt<1>
+ | output o: UInt
+ | o <= dshl(a, asUInt(cvt(b)))""".stripMargin
+ firrtlEquivalenceTest(input, Seq(new InlineBooleanExpressions))
+ }
+
it should s"respect --${PrettyNoExprInlining.longOption}" in {
val input =
"""circuit Top :