fix issue with gp references

main
Brett 2025-04-04 18:53:35 -04:00
parent 0eea2189e3
commit 0dc083e095
6 changed files with 10 additions and 14 deletions

View File

@ -27,7 +27,7 @@ macro(compile_options target_name)
sanitizers(${target_name}) sanitizers(${target_name})
endmacro() endmacro()
project(blt-gp VERSION 0.4.5) project(blt-gp VERSION 0.4.6)
include(CTest) include(CTest)

View File

@ -63,9 +63,10 @@ namespace blt::gp
template<typename T> template<typename T>
static void call_drop(stack_allocator& read_allocator, const size_t offset) static void call_drop(stack_allocator& read_allocator, const size_t offset)
{ {
if constexpr (blt::gp::detail::has_func_drop_v<T>) if constexpr (blt::gp::detail::has_func_drop_v<detail::remove_cv_ref<T>>)
{ {
auto [type, ptr] = read_allocator.access_pointer<detail::remove_cv_ref<T>>(offset); auto [type, ptr] = read_allocator.access_pointer<detail::remove_cv_ref<T>>(offset);
// type is not ephemeral, so we must drop it.
if (!ptr.bit(0)) if (!ptr.bit(0))
type.drop(); type.drop();
} }
@ -200,7 +201,7 @@ namespace blt::gp
[[nodiscard]] bool return_has_ephemeral_drop() const [[nodiscard]] bool return_has_ephemeral_drop() const
{ {
return detail::has_func_drop_v<Return>; return detail::has_func_drop_v<detail::remove_cv_ref<Return>>;
} }
operator_id id = -1; operator_id id = -1;

View File

@ -21,21 +21,16 @@
#include <blt/std/types.h> #include <blt/std/types.h>
#include <blt/std/bump_allocator.h> #include <blt/std/bump_allocator.h>
#include <blt/std/assert.h>
#include <blt/logging/logging.h> #include <blt/logging/logging.h>
#include <blt/std/allocator.h> #include <blt/std/allocator.h>
#include <blt/std/ranges.h>
#include <blt/meta/meta.h> #include <blt/meta/meta.h>
#include <blt/gp/fwdecl.h> #include <blt/gp/util/meta.h>
#include <blt/gp/util/trackers.h>
#include <blt/gp/allocator.h> #include <blt/gp/allocator.h>
#include <utility> #include <utility>
#include <stdexcept>
#include <cstdlib> #include <cstdlib>
#include <memory> #include <memory>
#include <type_traits> #include <type_traits>
#include <cstring> #include <cstring>
#include <iostream>
namespace blt::gp namespace blt::gp
{ {
@ -87,7 +82,7 @@ namespace blt::gp
static constexpr size_t aligned_size() noexcept static constexpr size_t aligned_size() noexcept
{ {
const auto bytes = detail::aligned_size(sizeof(NO_REF_T<T>)); const auto bytes = detail::aligned_size(sizeof(NO_REF_T<T>));
if constexpr (blt::gp::detail::has_func_drop_v<T>) if constexpr (blt::gp::detail::has_func_drop_v<gp::detail::remove_cv_ref<T>>)
return bytes + detail::aligned_size(sizeof(std::atomic_uint64_t*)); return bytes + detail::aligned_size(sizeof(std::atomic_uint64_t*));
return bytes; return bytes;
} }
@ -179,7 +174,7 @@ namespace blt::gp
const auto ptr = static_cast<char*>(allocate_bytes_for_size(aligned_size<NO_REF>())); const auto ptr = static_cast<char*>(allocate_bytes_for_size(aligned_size<NO_REF>()));
std::memcpy(ptr, &t, sizeof(NO_REF)); std::memcpy(ptr, &t, sizeof(NO_REF));
if constexpr (gp::detail::has_func_drop_v<T>) if constexpr (gp::detail::has_func_drop_v<gp::detail::remove_cv_ref<T>>)
{ {
new(ptr + sizeof(NO_REF)) mem::pointer_storage<std::atomic_uint64_t>{nullptr}; new(ptr + sizeof(NO_REF)) mem::pointer_storage<std::atomic_uint64_t>{nullptr};
} }

View File

@ -166,7 +166,7 @@ namespace blt::gp
~evaluation_ref() ~evaluation_ref()
{ {
if constexpr (detail::has_func_drop_v<T>) if constexpr (detail::has_func_drop_v<detail::remove_cv_ref<T>>)
{ {
if (m_value.get() != nullptr) if (m_value.get() != nullptr)
{ {

View File

@ -48,7 +48,7 @@ namespace blt::gp
template <typename T> template <typename T>
static type make_type(const type_id id) static type make_type(const type_id id)
{ {
return type(stack_allocator::aligned_size<T>(), id, blt::type_string<T>(), detail::has_func_drop_v<T>); return type(stack_allocator::aligned_size<T>(), id, blt::type_string<T>(), detail::has_func_drop_v<detail::remove_cv_ref<T>>);
} }
[[nodiscard]] size_t size() const [[nodiscard]] size_t size() const

@ -1 +1 @@
Subproject commit 284743c683aebae3277f64a07cdd0deedf629039 Subproject commit 9a05c86b02c9c45c2b384c531007416148ec4b56