systemc: Add a range check to the intial value of sc_semaphore.
authorGabe Black <gabeblack@google.com>
Fri, 5 Oct 2018 23:12:11 +0000 (16:12 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 16 Oct 2018 00:58:23 +0000 (00:58 +0000)
Change-Id: I4e1ef90b14074e5a2794a4386e411397213b2789
Reviewed-on: https://gem5-review.googlesource.com/c/13304
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/channel/sc_semaphore.cc

index ba52c199bbc90e859bd45b8eb7b445fe11e8d25b..59191be4eef99fa4e12e25620d9f09a180c5c46e 100644 (file)
  * Authors: Gabe Black
  */
 
+#include <string>
+
 #include "base/logging.hh"
 #include "systemc/ext/channel/sc_semaphore.hh"
 #include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
+#include "systemc/ext/utils/sc_report_handler.hh"
 
 namespace sc_core
 {
 
 sc_semaphore::sc_semaphore(int value) :
-        sc_interface(), sc_semaphore_if(),
-        sc_object(sc_gen_unique_name("semaphore")), _value(value)
+    sc_semaphore(sc_gen_unique_name("semaphore"), value)
 {}
 
-sc_semaphore::sc_semaphore(const char *name, int value) :
-        sc_interface(), sc_semaphore_if(), sc_object(name), _value(value)
-{}
+sc_semaphore::sc_semaphore(const char *_name, int value) :
+        sc_interface(), sc_semaphore_if(), sc_object(_name), _value(value)
+{
+    if (value < 0) {
+        std::string msg = "semaphore '" + std::string(name()) + "'";
+        SC_REPORT_ERROR("(E119) sc_semaphore requires an initial value >= 0",
+                msg.c_str());
+    }
+}
 
 int
 sc_semaphore::wait()