From f97b90e40b9a9b8e8b8ea692c651464980721ce4 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Thu, 26 Mar 2020 14:33:06 -0700 Subject: [PATCH] kernel: Cell::set{Port,Param}() to pass by value, but use std::move Otherwise cell->setPort(ID::A, cell->getPort(ID::B)) could be invalid --- kernel/rtlil.cc | 10 +++++----- kernel/rtlil.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 6eb698b2b..baa033401 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -2481,11 +2481,11 @@ void RTLIL::Cell::unsetPort(RTLIL::IdString portname) } } -void RTLIL::Cell::setPort(RTLIL::IdString portname, const RTLIL::SigSpec &signal) +void RTLIL::Cell::setPort(RTLIL::IdString portname, RTLIL::SigSpec signal) { auto r = connections_.insert(portname); auto conn_it = r.first; - if (conn_it->second == signal) + if (!r.second && conn_it->second == signal) return; for (auto mon : module->monitors) @@ -2500,7 +2500,7 @@ void RTLIL::Cell::setPort(RTLIL::IdString portname, const RTLIL::SigSpec &signal log_backtrace("-X- ", yosys_xtrace-1); } - conn_it->second = signal; + conn_it->second = std::move(signal); } const RTLIL::SigSpec &RTLIL::Cell::getPort(RTLIL::IdString portname) const @@ -2556,9 +2556,9 @@ void RTLIL::Cell::unsetParam(RTLIL::IdString paramname) parameters.erase(paramname); } -void RTLIL::Cell::setParam(RTLIL::IdString paramname, const RTLIL::Const &value) +void RTLIL::Cell::setParam(RTLIL::IdString paramname, RTLIL::Const value) { - parameters[paramname] = value; + parameters[paramname] = std::move(value); } const RTLIL::Const &RTLIL::Cell::getParam(RTLIL::IdString paramname) const diff --git a/kernel/rtlil.h b/kernel/rtlil.h index deb677f68..c0f1c7fa8 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -1381,7 +1381,7 @@ public: // access cell ports bool hasPort(RTLIL::IdString portname) const; void unsetPort(RTLIL::IdString portname); - void setPort(RTLIL::IdString portname, const RTLIL::SigSpec &signal); + void setPort(RTLIL::IdString portname, RTLIL::SigSpec signal); const RTLIL::SigSpec &getPort(RTLIL::IdString portname) const; const dict &connections() const; @@ -1393,7 +1393,7 @@ public: // access cell parameters bool hasParam(RTLIL::IdString paramname) const; void unsetParam(RTLIL::IdString paramname); - void setParam(RTLIL::IdString paramname, const RTLIL::Const& value); + void setParam(RTLIL::IdString paramname, RTLIL::Const value); const RTLIL::Const &getParam(RTLIL::IdString paramname) const; void sort(); -- 2.30.2