From 4fb72a926987b941ebde88d5aab750dea7652b5e Mon Sep 17 00:00:00 2001 From: Nikhil Manglore Date: Wed, 5 Mar 2025 14:00:54 -0800 Subject: [PATCH] Resolved issues when using GCC >= 12 (#41) Signed-off-by: Nikhil Manglore Signed-off-by: Nikhil Manglore Co-authored-by: Roshan Khatri <117414976+roshkhatri@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- src/json/dom.cc | 5 ----- src/json/memory.h | 40 +++++++++++++++++++++++++++++++--------- src/rapidjson/document.h | 2 +- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e789f4c..5a4cbf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: build-ubuntu-latest: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest strategy: fail-fast: false matrix: diff --git a/src/json/dom.cc b/src/json/dom.cc index 4ea8fd9..aff3ed1 100644 --- a/src/json/dom.cc +++ b/src/json/dom.cc @@ -1432,13 +1432,8 @@ STATIC JValue readLegacyDoubleAsJValue(ValkeyModuleIO *rdb) { double d = ValkeyModule_LoadDouble(rdb); char str[BUF_SIZE_DOUBLE_JSON]; size_t str_len = jsonutil_double_to_string(d, str, sizeof(str)); - if (str) { JValue v(str, str_len, allocator, false, /* isdouble */ true); return v; - } else { - ValkeyModule_LogIOError(rdb, "error", "Unable to read legacy double"); - return JValue(); - } } /* diff --git a/src/json/memory.h b/src/json/memory.h index 46cf270..fcd0ec2 100644 --- a/src/json/memory.h +++ b/src/json/memory.h @@ -95,18 +95,40 @@ namespace jsn // // Our custom allocator // -template class stl_allocator : public std::allocator { - public: - typedef T value_type; - stl_allocator() = default; - stl_allocator(std::allocator&) {} - stl_allocator(std::allocator&&) {} - template constexpr stl_allocator(const stl_allocator&) noexcept {} +template class stl_allocator { + public: + using value_type = T; + stl_allocator() = default; + stl_allocator(const stl_allocator&) noexcept = default; + stl_allocator(stl_allocator&&) noexcept = default; + template + constexpr stl_allocator(const stl_allocator&) noexcept {} - T *allocate(std::size_t n) { return static_cast(memory_alloc(n*sizeof(T))); } - void deallocate(T *p, std::size_t n) { (void)n; memory_free(p); } + T* allocate(std::size_t n) { + return static_cast(memory_alloc(n * sizeof(T))); + } + + void deallocate(T* p, std::size_t n) { + (void)n; + memory_free(p); + } + + private: + static void* memory_alloc(std::size_t size) { + return std::malloc(size); + } + + static void memory_free(void* p) { + std::free(p); + } }; +template +bool operator==(const stl_allocator&, const stl_allocator&) { return true; } + +template +bool operator!=(const stl_allocator&, const stl_allocator&) { return false; } + template using vector = std::vector>; template> using set = std::set>; diff --git a/src/rapidjson/document.h b/src/rapidjson/document.h index d3a72d2..dee9f1b 100644 --- a/src/rapidjson/document.h +++ b/src/rapidjson/document.h @@ -2512,7 +2512,7 @@ private: DoReserveMembersVec(count, allocator); const typename GenericValue::Member* rm = rhs.GetMembersPointerVec(); for (SizeType i = 0; i < count; i++) { - KeyTable_Handle name = std::move(keyTable->clone(rm[i].name)); + KeyTable_Handle name = keyTable->clone(rm[i].name); GenericValue value(rm[i].value, allocator, copyConstStrings); DoAddMember(name, value, allocator); }