From 70576ca592a5f27bfc2a12112ad968bf538f4ffc Mon Sep 17 00:00:00 2001
From: thorstenhater <24411438+thorstenhater@users.noreply.github.com>
Date: Thu, 6 Aug 2020 02:04:09 +0200
Subject: [PATCH] Fix issues found in device_coordinator.hpp. (#1086)
* Check for self-assignment in `device_reference::operator=(const device_reference&)`.
* Return reference to self in ` device_reference::operator=(const device_reference&)`.
* Prohibit default construction of `device_reference` and clarify copy semantics.
---
arbor/memory/device_coordinator.hpp | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/arbor/memory/device_coordinator.hpp b/arbor/memory/device_coordinator.hpp
index f9b3c864..ab8733d7 100644
--- a/arbor/memory/device_coordinator.hpp
+++ b/arbor/memory/device_coordinator.hpp
@@ -80,10 +80,19 @@ public:
return *this;
}
+ // Assigning to a reference will copy the referenced memory
device_reference& operator=(const device_reference& ref) {
- gpu_memcpy_d2d(pointer_, ref.pointer_, sizeof(T));
+ if (this != &ref) {
+ gpu_memcpy_d2d(pointer_, ref.pointer_, sizeof(T));
+ }
+ return *this;
}
+ // No empty references
+ device_reference() = delete;
+ // Copying a reference is a shallow copy
+ device_reference(const device_reference& ref) = default;
+
operator T() const {
T tmp;
gpu_memcpy_d2h(&tmp, pointer_, sizeof(T));
--
GitLab