From: Gabe Black Date: Fri, 5 Oct 2018 23:12:11 +0000 (-0700) Subject: systemc: Add a range check to the intial value of sc_semaphore. X-Git-Tag: v19.0.0.0~1521 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1f4e37911934a90088a8c68dc981ed6cc1be7b9c;p=gem5.git systemc: Add a range check to the intial value of sc_semaphore. Change-Id: I4e1ef90b14074e5a2794a4386e411397213b2789 Reviewed-on: https://gem5-review.googlesource.com/c/13304 Reviewed-by: Gabe Black Maintainer: Gabe Black --- diff --git a/src/systemc/channel/sc_semaphore.cc b/src/systemc/channel/sc_semaphore.cc index ba52c199b..59191be4e 100644 --- a/src/systemc/channel/sc_semaphore.cc +++ b/src/systemc/channel/sc_semaphore.cc @@ -27,21 +27,29 @@ * Authors: Gabe Black */ +#include + #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()