diff options
author | Gabe Black <gabeblack@google.com> | 2018-11-02 15:30:41 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-11-05 23:09:01 +0000 |
commit | 45abd002b6072469faf98008304c33961d1d9e6b (patch) | |
tree | d43046e3522933cd7e1aa0005d5864c14541628d /src/systemc | |
parent | 28ab6ff6878dbaeec2c0a4dd1f6eaf2a244cd74e (diff) | |
download | gem5-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>
Diffstat (limited to 'src/systemc')
-rw-r--r-- | src/systemc/core/sc_module.cc | 6 | ||||
-rw-r--r-- | src/systemc/ext/core/sc_module.hh | 1 |
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); |