diff --git a/src/serialize.h b/src/serialize.h index f72cb6fdf4b..96c1e6355f3 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -254,14 +254,14 @@ concept CharNotInt8 = std::same_as && !std::same_as; // clang-format off template void Serialize(Stream&, V) = delete; // char serialization forbidden. Use uint8_t or int8_t template void Serialize(Stream& s, std::byte a) { ser_writedata8(s, uint8_t(a)); } -template inline void Serialize(Stream& s, int8_t a ) { ser_writedata8(s, a); } -template inline void Serialize(Stream& s, uint8_t a ) { ser_writedata8(s, a); } -template inline void Serialize(Stream& s, int16_t a ) { ser_writedata16(s, a); } -template inline void Serialize(Stream& s, uint16_t a) { ser_writedata16(s, a); } -template inline void Serialize(Stream& s, int32_t a ) { ser_writedata32(s, a); } -template inline void Serialize(Stream& s, uint32_t a) { ser_writedata32(s, a); } -template inline void Serialize(Stream& s, int64_t a ) { ser_writedata64(s, a); } -template inline void Serialize(Stream& s, uint64_t a) { ser_writedata64(s, a); } +template void Serialize(Stream& s, int8_t a) { ser_writedata8(s, uint8_t(a)); } +template void Serialize(Stream& s, uint8_t a) { ser_writedata8(s, a); } +template void Serialize(Stream& s, int16_t a) { ser_writedata16(s, uint16_t(a)); } +template void Serialize(Stream& s, uint16_t a) { ser_writedata16(s, a); } +template void Serialize(Stream& s, int32_t a) { ser_writedata32(s, uint32_t(a)); } +template void Serialize(Stream& s, uint32_t a) { ser_writedata32(s, a); } +template void Serialize(Stream& s, int64_t a) { ser_writedata64(s, uint64_t(a)); } +template void Serialize(Stream& s, uint64_t a) { ser_writedata64(s, a); } template void Serialize(Stream& s, const B (&a)[N]) { s.write(MakeByteSpan(a)); } template void Serialize(Stream& s, const std::array& a) { s.write(MakeByteSpan(a)); } @@ -269,23 +269,23 @@ template void Serialize(Stream& s, std: template void Serialize(Stream& s, std::span span) { s.write(std::as_bytes(span)); } template void Unserialize(Stream&, V) = delete; // char serialization forbidden. Use uint8_t or int8_t -template void Unserialize(Stream& s, std::byte& a) { a = std::byte{ser_readdata8(s)}; } -template inline void Unserialize(Stream& s, int8_t& a ) { a = ser_readdata8(s); } -template inline void Unserialize(Stream& s, uint8_t& a ) { a = ser_readdata8(s); } -template inline void Unserialize(Stream& s, int16_t& a ) { a = ser_readdata16(s); } -template inline void Unserialize(Stream& s, uint16_t& a) { a = ser_readdata16(s); } -template inline void Unserialize(Stream& s, int32_t& a ) { a = ser_readdata32(s); } -template inline void Unserialize(Stream& s, uint32_t& a) { a = ser_readdata32(s); } -template inline void Unserialize(Stream& s, int64_t& a ) { a = ser_readdata64(s); } -template inline void Unserialize(Stream& s, uint64_t& a) { a = ser_readdata64(s); } +template void Unserialize(Stream& s, std::byte& a) { a = std::byte(ser_readdata8(s)); } +template void Unserialize(Stream& s, int8_t& a) { a = int8_t(ser_readdata8(s)); } +template void Unserialize(Stream& s, uint8_t& a) { a = ser_readdata8(s); } +template void Unserialize(Stream& s, int16_t& a) { a = int16_t(ser_readdata16(s)); } +template void Unserialize(Stream& s, uint16_t& a) { a = ser_readdata16(s); } +template void Unserialize(Stream& s, int32_t& a) { a = int32_t(ser_readdata32(s)); } +template void Unserialize(Stream& s, uint32_t& a) { a = ser_readdata32(s); } +template void Unserialize(Stream& s, int64_t& a) { a = int64_t(ser_readdata64(s)); } +template void Unserialize(Stream& s, uint64_t& a) { a = ser_readdata64(s); } template void Unserialize(Stream& s, B (&a)[N]) { s.read(MakeWritableByteSpan(a)); } template void Unserialize(Stream& s, std::array& a) { s.read(MakeWritableByteSpan(a)); } template void Unserialize(Stream& s, std::span span) { s.read(std::as_writable_bytes(span)); } template void Unserialize(Stream& s, std::span span) { s.read(std::as_writable_bytes(span)); } -template inline void Serialize(Stream& s, bool a) { uint8_t f = a; ser_writedata8(s, f); } -template inline void Unserialize(Stream& s, bool& a) { uint8_t f = ser_readdata8(s); a = f; } +template void Serialize(Stream& s, bool a) { uint8_t f = a; ser_writedata8(s, f); } +template void Unserialize(Stream& s, bool& a) { uint8_t f = ser_readdata8(s); a = f; } // clang-format on diff --git a/test/sanitizer_suppressions/ubsan b/test/sanitizer_suppressions/ubsan index acdae7415d2..4acfefbac8e 100644 --- a/test/sanitizer_suppressions/ubsan +++ b/test/sanitizer_suppressions/ubsan @@ -65,7 +65,6 @@ implicit-integer-sign-change:TxConfirmStats::removeTx implicit-integer-sign-change:prevector.h implicit-integer-sign-change:verify_flags implicit-integer-sign-change:EvalScript -implicit-integer-sign-change:serialize.h implicit-signed-integer-truncation:crypto/ implicit-unsigned-integer-truncation:crypto/ shift-base:arith_uint256.cpp