aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorAdam Izraelevitz2016-09-26 16:12:00 -0700
committerDonggyu2016-09-26 16:12:00 -0700
commita2ad26d6b907b251a916c23a3fe93e1d0067fb03 (patch)
treeb685806a063bc5eeadbf808dc43896a44cb3ecd8 /src/main
parentc56929aabedea0de255f79b855d094bf4475a845 (diff)
Added max width check to dshl shift amount (#318)
Address #297
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/passes/Checks.scala4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/passes/Checks.scala b/src/main/scala/firrtl/passes/Checks.scala
index e3c85edb..75b9a01d 100644
--- a/src/main/scala/firrtl/passes/Checks.scala
+++ b/src/main/scala/firrtl/passes/Checks.scala
@@ -565,6 +565,8 @@ object CheckWidths extends Pass {
s"$info : [module $mname] Uninferred width.")
class WidthTooSmall(info: Info, mname: String, b: BigInt) extends PassException(
s"$info : [module $mname] Width too small for constant ${serialize(b)}.")
+ class WidthTooBig(info: Info, mname: String) extends PassException(
+ s"$info : [module $mname] Width of dshl shift amount cannot be larger than 31 bits.")
class NegWidthException(info:Info, mname: String) extends PassException(
s"$info: [module $mname] Width cannot be negative or zero.")
class BitsWidthException(info: Info, mname: String, hi: BigInt, width: BigInt) extends PassException(
@@ -608,6 +610,8 @@ object CheckWidths extends Pass {
errors append new HeadWidthException(info, mname, n, bitWidth(a.tpe))
case DoPrim(Tail, Seq(a), Seq(n), _) if bitWidth(a.tpe) <= n =>
errors append new TailWidthException(info, mname, n, bitWidth(a.tpe))
+ case DoPrim(Dshl, Seq(a, b), _, _) if bitWidth(b.tpe) >= BigInt(32) =>
+ errors append new WidthTooBig(info, mname)
case _ =>
}
e map check_width_w(info, mname) map check_width_e(info, mname)