summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/netlist.cpp
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-06-14 00:04:34 +0200
committer couriersud <couriersud@gmx.org>2020-06-14 00:04:34 +0200
commitfe3bd223d83ec8cf1dbf8a8623b4367abb49c3b3 (patch)
treef93651dfcefa76889da5df0d4820b95115366f19 /src/devices/machine/netlist.cpp
parent23c0490019ea90a33eb2b06ff9eb617e56357f13 (diff)
netlist: Fix copy elusion bug on OSX and clang < 8 [AJR, Couriersud]
Solution discussed with AJR in chat.
Diffstat (limited to 'src/devices/machine/netlist.cpp')
-rw-r--r--src/devices/machine/netlist.cpp20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 1dd17acd8b1..9b4c3f48c57 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -43,14 +43,6 @@
#define LOGMASKED(mask, ...) do { if (LOG_MASK & (mask)) (LOG_OUTPUT_FUNC)(__VA_ARGS__); } while (false)
-
-// Workaround for return value optimization failure in some older versions of clang
-#if defined(__APPLE__) && defined(__clang__) && __clang_major__ < 8
-#define MOVE_UNIQUE_PTR(x) (std::move(x))
-#else
-#define MOVE_UNIQUE_PTR(x) (x)
-#endif
-
DEFINE_DEVICE_TYPE(NETLIST_CORE, netlist_mame_device, "netlist_core", "Netlist Core Device")
DEFINE_DEVICE_TYPE(NETLIST_CPU, netlist_mame_cpu_device, "netlist_cpu", "Netlist CPU Device")
DEFINE_DEVICE_TYPE(NETLIST_SOUND, netlist_mame_sound_device, "netlist_sound", "Netlist Sound Device")
@@ -266,9 +258,9 @@ netlist_source_memregion_t::stream_ptr netlist_source_memregion_t::stream(const
if (m_dev.has_running_machine())
{
memory_region *mem = m_dev.memregion(m_name.c_str());
- auto ret(std::make_unique<std::istringstream>(pstring(reinterpret_cast<char *>(mem->base()), mem->bytes())));
+ stream_ptr ret(std::make_unique<std::istringstream>(pstring(reinterpret_cast<char *>(mem->base()), mem->bytes())));
ret->imbue(std::locale::classic());
- return MOVE_UNIQUE_PTR(ret);
+ return ret;
}
else
throw memregion_not_set("memregion unavailable for {1} in source {2}", name, m_name);
@@ -307,9 +299,9 @@ netlist_data_memregions_t::stream_ptr netlist_data_memregions_t::stream(const ps
memory_region *mem = m_dev.memregion(name.c_str());
if (mem != nullptr)
{
- auto ret(std::make_unique<std::istringstream>(std::string(reinterpret_cast<char *>(mem->base()), mem->bytes()), std::ios_base::binary));
+ stream_ptr ret(std::make_unique<std::istringstream>(std::string(reinterpret_cast<char *>(mem->base()), mem->bytes()), std::ios_base::binary));
ret->imbue(std::locale::classic());
- return MOVE_UNIQUE_PTR(ret);
+ return ret;
}
else
return stream_ptr(nullptr);
@@ -320,9 +312,9 @@ netlist_data_memregions_t::stream_ptr netlist_data_memregions_t::stream(const ps
if (rom_exists(m_dev.mconfig().root_device(), pstring(m_dev.tag()) + ":" + name))
{
// Create an empty stream.
- auto ret(std::make_unique<std::istringstream>(std::ios_base::binary));
+ stream_ptr ret(std::make_unique<std::istringstream>(std::ios_base::binary));
ret->imbue(std::locale::classic());
- return MOVE_UNIQUE_PTR(ret);
+ return ret;
}
else
return stream_ptr(nullptr);