From 36933c7f5c7778e2d7fbfea5361c11fb41070467 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Sun, 6 Mar 2022 00:48:38 -0600 Subject: [PATCH] Eliminate portable_storage_to_bin.h reliance on pragma_comp_defs.h The `-Wstrict-aliasing` warning issue was already fixed by someone earlier. And for the `-Wtautological-constant-out-of-range-compare` (wordy) warning, I replaced `val <= 4611686018427387903` assertion with `!(val >> 31 >> 31)` expression. These expressions are equivalent but the latter is defined if the size_t type is only 32-bits wide. Another way to think about it is that the expression is checking if any bit after the 61st bit is set. --- .../include/storages/portable_storage_to_bin.h | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/contrib/epee/include/storages/portable_storage_to_bin.h b/contrib/epee/include/storages/portable_storage_to_bin.h index b82cf532b..be4033dd8 100644 --- a/contrib/epee/include/storages/portable_storage_to_bin.h +++ b/contrib/epee/include/storages/portable_storage_to_bin.h @@ -28,7 +28,6 @@ #pragma once -#include "pragma_comp_defs.h" #include "misc_language.h" #include "portable_storage_base.h" #include "portable_storage_bin_utils.h" @@ -49,12 +48,7 @@ namespace epee return sizeof(pack_value); } - PRAGMA_WARNING_PUSH - PRAGMA_GCC("GCC diagnostic ignored \"-Wstrict-aliasing\"") -#ifdef __clang__ - PRAGMA_GCC("GCC diagnostic ignored \"-Wtautological-constant-out-of-range-compare\"") -#endif - template + template size_t pack_varint(t_stream& strm, size_t val) { //the first two bits always reserved for size information @@ -70,13 +64,13 @@ namespace epee return pack_varint_t(strm, PORTABLE_RAW_SIZE_MARK_DWORD, val); }else { - CHECK_AND_ASSERT_THROW_MES(val <= 4611686018427387903, "failed to pack varint - too big amount = " << val); + // Same as checking val <= 4611686018427387903 except that it's portable for 32-bit size_t + CHECK_AND_ASSERT_THROW_MES(!(val >> 31 >> 31), "failed to pack varint - too big amount = " << val); return pack_varint_t(strm, PORTABLE_RAW_SIZE_MARK_INT64, val); } } - PRAGMA_WARNING_POP - template + template bool put_string(t_stream& strm, const std::string& v) { pack_varint(strm, v.size());