Gabriel B. has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/67453?usp=email )

Change subject: base: Fix safe_cast for reference types
......................................................................

base: Fix safe_cast for reference types

Change-Id: I86692561c169b1ad063000c990a52ea80c6637ca
---
M src/base/cast.hh
1 file changed, 18 insertions(+), 5 deletions(-)



diff --git a/src/base/cast.hh b/src/base/cast.hh
index cdc3c62..9c29c94 100644
--- a/src/base/cast.hh
+++ b/src/base/cast.hh
@@ -30,6 +30,8 @@
 #define __BASE_CAST_HH__

 #include <cassert>
+#include <type_traits>
+#include "base/logging.hh"

 namespace gem5
 {
@@ -44,10 +46,12 @@

 template <class T, class U>
 inline T
-safe_cast(U ptr)
+safe_cast(U&& ptr)
 {
-    T ret = dynamic_cast<T>(ptr);
-    assert(ret);
+    T ret = dynamic_cast<T>(std::forward<U>(ptr));
+    if constexpr (std::is_pointer_v<T>) {
+        gem5_assert(ret);
+    }
     return ret;
 }

@@ -59,9 +63,9 @@

 template <class T, class U>
 inline T
-safe_cast(U ptr)
+safe_cast(U&& ptr)
 {
-    return static_cast<T>(ptr);
+    return static_cast<T>(std::forward<U>(ptr));
 }

 #endif

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/67453?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I86692561c169b1ad063000c990a52ea80c6637ca
Gerrit-Change-Number: 67453
Gerrit-PatchSet: 1
Gerrit-Owner: Gabriel B. <gabriel.bus...@arteris.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org

Reply via email to