summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authormergify[bot]2022-08-13 00:17:56 +0000
committerGitHub2022-08-13 00:17:56 +0000
commitc4dec947d54a52c3092bd7855180d42afaae3776 (patch)
tree11c00cf3cc1c2e5fcc3d463475f296ee7cd3b57f /core/src/main
parentd344e8a91bdbfedc28527c3fc7d6d243dff9e3e6 (diff)
Add option to treat warnings as errors (backport #2676) (#2677)
* Add option to treat warnings as errors (#2676) Add --warnings-as-errors option (cherry picked from commit 498946663726955c380a1e420f5d7b9630000aad) # Conflicts: # core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala # core/src/main/scala/chisel3/internal/Builder.scala # src/main/scala/chisel3/aop/injecting/InjectingAspect.scala # src/main/scala/chisel3/stage/ChiselOptions.scala # src/main/scala/chisel3/stage/package.scala # src/main/scala/chisel3/stage/phases/Elaborate.scala * Resolve backport conflicts Co-authored-by: Zachary Yedidia <zyedidia@gmail.com> Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala2
-rw-r--r--core/src/main/scala/chisel3/internal/Builder.scala8
-rw-r--r--core/src/main/scala/chisel3/internal/Error.scala9
3 files changed, 12 insertions, 7 deletions
diff --git a/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala b/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
index 36bf6f87..99eacc7d 100644
--- a/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
+++ b/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
@@ -103,7 +103,7 @@ object Definition extends SourceInfoDoc {
): Definition[T] = {
val dynamicContext = {
val context = Builder.captureContext()
- new DynamicContext(Nil, context.throwOnFirstError, context.warnReflectiveNaming)
+ new DynamicContext(Nil, context.throwOnFirstError, context.warnReflectiveNaming, context.warningsAsErrors)
}
Builder.globalNamespace.copyTo(dynamicContext.globalNamespace)
dynamicContext.inDefinition = true
diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala
index b2c98309..75d08f92 100644
--- a/core/src/main/scala/chisel3/internal/Builder.scala
+++ b/core/src/main/scala/chisel3/internal/Builder.scala
@@ -244,7 +244,8 @@ private[chisel3] trait HasId extends InstanceId {
// These accesses occur after Chisel elaboration so we cannot use the normal
// Builder.deprecated mechanism, we have to create our own one off ErrorLog and print the
// warning right away.
- val errors = new ErrorLog
+ // It's especially bad because --warnings-as-errors does not work with these warnings
+ val errors = new ErrorLog(false)
val logger = new _root_.logger.Logger(this.getClass.getName)
val msg = "Accessing the .instanceName or .toTarget of non-hardware Data is deprecated. " +
"This will become an error in Chisel 3.6."
@@ -376,7 +377,8 @@ private[chisel3] class ChiselContext() {
private[chisel3] class DynamicContext(
val annotationSeq: AnnotationSeq,
val throwOnFirstError: Boolean,
- val warnReflectiveNaming: Boolean) {
+ val warnReflectiveNaming: Boolean,
+ val warningsAsErrors: Boolean) {
val importDefinitionAnnos = annotationSeq.collect { case a: ImportDefinitionAnnotation[_] => a }
// Map holding the actual names of extModules
@@ -433,7 +435,7 @@ private[chisel3] class DynamicContext(
var whenStack: List[WhenContext] = Nil
var currentClock: Option[Clock] = None
var currentReset: Option[Reset] = None
- val errors = new ErrorLog
+ val errors = new ErrorLog(warningsAsErrors)
val namingStack = new NamingStack
// Used to indicate if this is the top-level module of full elaboration, or from a Definition
diff --git a/core/src/main/scala/chisel3/internal/Error.scala b/core/src/main/scala/chisel3/internal/Error.scala
index 98db7109..da968d2a 100644
--- a/core/src/main/scala/chisel3/internal/Error.scala
+++ b/core/src/main/scala/chisel3/internal/Error.scala
@@ -176,7 +176,7 @@ private[chisel3] object ErrorLog {
val errTag = s"[${Console.RED}error${Console.RESET}]"
}
-private[chisel3] class ErrorLog {
+private[chisel3] class ErrorLog(warningsAsErrors: Boolean) {
def getLoc(loc: Option[StackTraceElement]): String = {
loc match {
case Some(elt: StackTraceElement) => s"${elt.getFileName}:${elt.getLineNumber}"
@@ -190,17 +190,20 @@ private[chisel3] class ErrorLog {
errors += (((m, getLoc(loc)), new Error(m, loc)))
}
+ private def warn(m: => String, loc: Option[StackTraceElement]): LogEntry =
+ if (warningsAsErrors) new Error(m, loc) else new Warning(m, loc)
+
/** Log a warning message */
def warning(m: => String): Unit = {
val loc = getUserLineNumber
- errors += (((m, getLoc(loc)), new Warning(m, loc)))
+ errors += (((m, getLoc(loc)), warn(m, loc)))
}
/** Log a warning message without a source locator. This is used when the
* locator wouldn't be helpful (e.g., due to lazy values).
*/
def warningNoLoc(m: => String): Unit =
- errors += (((m, ""), new Warning(m, None)))
+ errors += (((m, ""), warn(m, None)))
/** Emit an informational message */
@deprecated("This method will be removed in 3.5", "3.4")