summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-07-26 15:15:20 -0700
committerGabe Black <gabeblack@google.com>2018-09-11 21:49:30 +0000
commita2ab1052c91ad82fa0bb564cb39a8be6dc496120 (patch)
tree3d6426e79708618292e8da20248758449844c614
parent6a198f29234a6a037f73cefd15f784bd18017d1a (diff)
downloadgem5-a2ab1052c91ad82fa0bb564cb39a8be6dc496120.tar.xz
systemc: Detect a process control corner case and report an error.
This error reporting results in an exception being thrown, and one (or more) of the tests depend on that behavior. Change-Id: I858aa14fbb80b0648392179a6a8d2055c91aedf8 Reviewed-on: https://gem5-review.googlesource.com/12050 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r--src/systemc/core/process.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/systemc/core/process.cc b/src/systemc/core/process.cc
index 6b4c42766..a54d5c24c 100644
--- a/src/systemc/core/process.cc
+++ b/src/systemc/core/process.cc
@@ -178,6 +178,14 @@ Process::disable(bool inc_kids)
if (inc_kids)
forEachKid([](Process *p) { p->disable(true); });
+ if (!::sc_core::sc_allow_process_control_corners &&
+ dynamic_cast<SensitivityTimeout *>(dynamicSensitivity)) {
+ std::string message("attempt to disable a thread with timeout wait: ");
+ message += name();
+ SC_REPORT_ERROR("Undefined process control interaction",
+ message.c_str());
+ }
+
_disabled = true;
}