From 489d5d44ebad21bddd24701661be18f8854be7f1 Mon Sep 17 00:00:00 2001 From: Albert Magyar Date: Mon, 8 Jun 2020 12:14:10 -0700 Subject: [PATCH] Report Builder.error errors as exceptions outside hardware context (#1425) * Immediately throw Builder.error errors outside hardware context * Add example of hidden no-hardware-context error from #1422 Co-authored-by: Schuyler Eldridge (cherry picked from commit 99ac8a134b134713913036013ffdec98ec92c73a) --- core/src/main/scala/chisel3/internal/Builder.scala | 8 +++++++- src/test/scala/chiselTests/ImplicitConversionsSpec.scala | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala index 7e521812161..bacc9fee9a1 100644 --- a/core/src/main/scala/chisel3/internal/Builder.scala +++ b/core/src/main/scala/chisel3/internal/Builder.scala @@ -387,7 +387,13 @@ private[chisel3] object Builder { } def errors: ErrorLog = dynamicContext.errors - def error(m: => String): Unit = if (dynamicContextVar.value.isDefined) errors.error(m) + def error(m: => String): Unit = { + if (dynamicContextVar.value.isDefined) { + errors.error(m) + } else { + throwException(m) + } + } def warning(m: => String): Unit = if (dynamicContextVar.value.isDefined) errors.warning(m) def deprecated(m: => String, location: Option[String] = None): Unit = if (dynamicContextVar.value.isDefined) errors.deprecated(m, location) diff --git a/src/test/scala/chiselTests/ImplicitConversionsSpec.scala b/src/test/scala/chiselTests/ImplicitConversionsSpec.scala index d5939b24721..bde4371755f 100644 --- a/src/test/scala/chiselTests/ImplicitConversionsSpec.scala +++ b/src/test/scala/chiselTests/ImplicitConversionsSpec.scala @@ -39,5 +39,10 @@ class ImplicitConversionsSpec extends ChiselFlatSpec { import chisel3.util._ assertTypeError("Decoupled(UInt(8.W)).target") } -} + "X.B for X not in [0,1]" should "throw an exception, even outside hardware context" in { + a [ChiselException] should be thrownBy { + 65.B + } + } +}