aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJack Koenig2018-07-10 19:03:53 -0700
committerGitHub2018-07-10 19:03:53 -0700
commit17437907de4ad12eb3f8d0818a158eb6959591a3 (patch)
tree6f4cef136baff0c4b76592bff744f9639a0c694e /src/main
parent6b02d09eb412df275d00930ab0e167b07fa61862 (diff)
Fix bug in zero-width renaming (#845)
Previously, Vecs of Bundles that contained a zero-width element would result in a ClassCastException
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/passes/ZeroWidth.scala8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/passes/ZeroWidth.scala b/src/main/scala/firrtl/passes/ZeroWidth.scala
index 12da7d9b..6a79fe9a 100644
--- a/src/main/scala/firrtl/passes/ZeroWidth.scala
+++ b/src/main/scala/firrtl/passes/ZeroWidth.scala
@@ -66,8 +66,12 @@ object ZeroWidth extends Transform {
else fields.flatMap(f => findRemovable(WSubField(expr, f.name, f.tpe, MALE), f.tpe))
case VectorType(vtpe, size) =>
if (size == 0) List(expr)
- else findRemovable(WSubIndex(expr, 0, vtpe, MALE), vtpe).flatMap { e =>
- (0 until size).map(i => e.asInstanceOf[WSubIndex].copy(value = i))
+ else { // Only invoke findRemovable multiple times if a zero-width element is found
+ val es0 = findRemovable(WSubIndex(expr, 0, vtpe, MALE), vtpe)
+ if (es0.isEmpty) es0
+ else {
+ es0 ++ (1 until size).flatMap(i => findRemovable(WSubIndex(expr, i, vtpe, MALE), vtpe))
+ }
}
}