summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-11-02 15:30:41 -0700
committerGabe Black <gabeblack@google.com>2018-11-05 23:09:01 +0000
commit45abd002b6072469faf98008304c33961d1d9e6b (patch)
treed43046e3522933cd7e1aa0005d5864c14541628d
parent28ab6ff6878dbaeec2c0a4dd1f6eaf2a244cd74e (diff)
downloadgem5-45abd002b6072469faf98008304c33961d1d9e6b.tar.xz
systemc: Change how SC_BIND_PROXY_NIL is initialized.
The previous implementation dereferenced a null pointer to create a reference which would then have its address taken in the sc_bind_proxy constructor. clang says that that uses undefined behavior, so this change adds a default constructor which initializes the two contained pointers to null explicitly. We have to hope systemc code doesn't play around with sc_bind_proxy too much and doesn't accidentally use this constructor unintentionally, but it seems like the least bad possible solution which makes clang happy. Change-Id: Ic59603495fe7a406586a18ce44de979f84089bcd Reviewed-on: https://gem5-review.googlesource.com/c/13879 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r--src/systemc/core/sc_module.cc6
-rw-r--r--src/systemc/ext/core/sc_module.hh1
2 files changed, 4 insertions, 3 deletions
diff --git a/src/systemc/core/sc_module.cc b/src/systemc/core/sc_module.cc
index 5d9e3da15..fc98aa3a0 100644
--- a/src/systemc/core/sc_module.cc
+++ b/src/systemc/core/sc_module.cc
@@ -102,6 +102,8 @@ newCThreadProcess(const char *name, ProcessFuncWrapper *func)
namespace sc_core
{
+sc_bind_proxy::sc_bind_proxy() : _interface(nullptr), _port(nullptr) {}
+
sc_bind_proxy::sc_bind_proxy(sc_interface &_interface) :
_interface(&_interface), _port(nullptr)
{}
@@ -110,12 +112,10 @@ sc_bind_proxy::sc_bind_proxy(sc_port_base &_port) :
_interface(nullptr), _port(&_port)
{}
-const sc_bind_proxy SC_BIND_PROXY_NUL(*(sc_port_base *)nullptr);
+const sc_bind_proxy SC_BIND_PROXY_NIL;
sc_module::~sc_module() { delete _gem5_module; }
-const sc_bind_proxy SC_BIND_PROXY_NIL(*(sc_port_base *)nullptr);
-
void
sc_module::operator () (const sc_bind_proxy &p001,
const sc_bind_proxy &p002,
diff --git a/src/systemc/ext/core/sc_module.hh b/src/systemc/ext/core/sc_module.hh
index dea728fba..0c8bd9f6c 100644
--- a/src/systemc/ext/core/sc_module.hh
+++ b/src/systemc/ext/core/sc_module.hh
@@ -82,6 +82,7 @@ class sc_bind_proxy
sc_port_base *_port;
public:
+ sc_bind_proxy();
sc_bind_proxy(sc_interface &_interface);
sc_bind_proxy(sc_port_base &_port);