From a2658f08e5163de3b4c182633e9c730176fac4e5 Mon Sep 17 00:00:00 2001 From: Earl Ou Date: Tue, 10 Jan 2023 00:27:53 -0800 Subject: [PATCH] systemc: fix -Wno-free-nonheap-object for building scheduler.cc -Wno-free-nonheap-object can happen at compile or link time depending on the versions. To better disable this false alarm, we move the memory management part into .cc file, so the check is always done at link time. This change also removes the global flags so other code is still checked with the flags. Change-Id: I8f1e20197b25c90b5f439e2ecc474bd99e4f82ed Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67237 Tested-by: kokoro Reviewed-by: Yu-hsin Wang Maintainer: Gabe Black --- SConstruct | 4 ---- src/sim/eventq.cc | 26 ++++++++++++++++++++++++++ src/sim/eventq.hh | 18 ++++-------------- src/systemc/core/SConscript | 6 ++---- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/SConstruct b/SConstruct index bd26e4552e..e08c2984e5 100755 --- a/SConstruct +++ b/SConstruct @@ -447,10 +447,6 @@ for variant_path in variant_paths: error('gcc version 7 or newer required.\n' 'Installed version:', env['CXXVERSION']) - with gem5_scons.Configure(env) as conf: - # This warning has a false positive in the systemc in g++ 11.1. - conf.CheckCxxFlag('-Wno-free-nonheap-object') - # Add the appropriate Link-Time Optimization (LTO) flags if # `--with-lto` is set. if GetOption('with_lto'): diff --git a/src/sim/eventq.cc b/src/sim/eventq.cc index 66d03854ac..23ca2f6f4e 100644 --- a/src/sim/eventq.cc +++ b/src/sim/eventq.cc @@ -108,6 +108,32 @@ Event::insertBefore(Event *event, Event *curr) return event; } +void +Event::acquire() +{ + if (flags.isSet(Event::Managed)) + acquireImpl(); +} + +void +Event::release() +{ + if (flags.isSet(Event::Managed)) + releaseImpl(); +} + +void +Event::acquireImpl() +{ +} + +void +Event::releaseImpl() +{ + if (!scheduled()) + delete this; +} + void EventQueue::insert(Event *event) { diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index cd5d285f93..62495bf86d 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -381,26 +381,16 @@ class Event : public EventBase, public Serializable /** * Managed event scheduled and being held in the event queue. */ - void acquire() - { - if (flags.isSet(Event::Managed)) - acquireImpl(); - } + void acquire(); /** * Managed event removed from the event queue. */ - void release() { - if (flags.isSet(Event::Managed)) - releaseImpl(); - } + void release(); - virtual void acquireImpl() {} + virtual void acquireImpl(); - virtual void releaseImpl() { - if (!scheduled()) - delete this; - } + virtual void releaseImpl(); /** @} */ diff --git a/src/systemc/core/SConscript b/src/systemc/core/SConscript index 2b8811187c..c7c9dbb40b 100644 --- a/src/systemc/core/SConscript +++ b/src/systemc/core/SConscript @@ -40,6 +40,7 @@ if env['CONF']['USE_SYSTEMC']: Source('port.cc') Source('process.cc') Source('sched_event.cc') + Source('scheduler.cc') Source('sensitivity.cc') Source('time.cc') @@ -75,7 +76,4 @@ if env['CONF']['USE_SYSTEMC']: # Disable the false positive warning for the event members of the scheduler. with gem5_scons.Configure(env) as conf: flag = '-Wno-free-nonheap-object' - append = {} - if conf.CheckCxxFlag(flag, autoadd=False): - append['CCFLAGS'] = [flag] - Source('scheduler.cc', append=append) + conf.CheckLinkFlag(flag)