From 45abd002b6072469faf98008304c33961d1d9e6b Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Fri, 2 Nov 2018 15:30:41 -0700 Subject: [PATCH] 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 Maintainer: Gabe Black --- src/systemc/core/sc_module.cc | 6 +++--- 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); -- 2.30.2