This is an automated email from Gerrit. "Jan Matyas <jan.mat...@codasip.com>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8748
-- gerrit commit 3bd53815c5a0b790d235201fd5439916f6bfd159 Author: Jan Matyas <jan.mat...@codasip.com> Date: Sun Feb 9 17:59:21 2025 +0100 helper/binarybuffer: Avoid -Wconversion warnings Avoid -Wconversion warnings in binarybuffer.{c,h} by replacing implicit trucnations (or implicit sign conversions) by explict casts. Hopefully, it will become possible to enable -Wconversion on (parts of) OpenOCD code one day; and this patch is a step that direction. Note: The occurrences of -Wconversion in the current OpenOCD code can be shown by manually enabling this warning during configure - for example this way: ./bootstrap && \ ./configure CFLAGS="-Wconversion" --disable-werror && \ make clean && \ make -j`nproc` 2>&1 | tee build_log.txt && \ grep -P "\[\-W(sign\-)?conversion\]" \ < build_log.txt > wconversion.txt Change-Id: I89b05eec6fac299bcedf1c17c873212c17f519de Signed-off-by: Jan Matyas <jan.mat...@codasip.com> diff --git a/src/helper/binarybuffer.c b/src/helper/binarybuffer.c index 6fba86a660..feb72f2284 100644 --- a/src/helper/binarybuffer.c +++ b/src/helper/binarybuffer.c @@ -52,7 +52,7 @@ void *buf_cpy(const void *from, void *_to, unsigned int size) unsigned int trailing_bits = size % 8; if (trailing_bits) { uint8_t *to = _to; - to[size / 8] &= (1 << trailing_bits) - 1; + to[size / 8] &= (uint8_t)((1 << trailing_bits) - 1); } return _to; } @@ -63,7 +63,8 @@ static bool buf_eq_masked(uint8_t a, uint8_t b, uint8_t m) } static bool buf_eq_trailing(uint8_t a, uint8_t b, uint8_t m, unsigned int trailing) { - uint8_t mask = (1 << trailing) - 1; + assert(trailing < 8); + uint8_t mask = (uint8_t)((1 << trailing) - 1); return buf_eq_masked(a, b, mask & m); } @@ -112,7 +113,7 @@ void *buf_set_ones(void *_buf, unsigned int size) unsigned int trailing_bits = size % 8; if (trailing_bits) - buf[size / 8] = (1 << trailing_bits) - 1; + buf[size / 8] = (uint8_t)((1 << trailing_bits) - 1); return buf; } @@ -145,10 +146,10 @@ void *buf_set_buf(const void *_src, unsigned int src_start, /* fallback to slow bit copy */ for (i = 0; i < len; i++) { - if (((*src >> (sq&7)) & 1) == 1) - *dst |= 1 << (dq&7); + if (((*src >> (sq & 7)) & 1) == 1) + *dst |= 1 << (dq & 7); else - *dst &= ~(1 << (dq&7)); + *dst &= (uint8_t)(~(1 << (dq & 7))); if (sq++ == 7) { sq = 0; src++; @@ -248,11 +249,11 @@ int str_to_buf(const char *str, void *_buf, unsigned int buf_bitsize) const char c = *str; if ((c >= '0') && (c <= '9')) { - tmp = c - '0'; + tmp = (unsigned int)(c - '0'); } else if ((c >= 'a') && (c <= 'f')) { - tmp = c - 'a' + 10; + tmp = (unsigned int)(c - 'a') + 10; } else if ((c >= 'A') && (c <= 'F')) { - tmp = c - 'A' + 10; + tmp = (unsigned int)(c - 'A') + 10; } else { /* Characters other than [0-9,a-f,A-F] are invalid */ return ERROR_INVALID_NUMBER; @@ -359,7 +360,7 @@ size_t unhexify(uint8_t *bin, const char *hex, size_t count) else return i / 2; - bin[i / 2] |= tmp << (4 * ((i + 1) % 2)); + bin[i / 2] |= (uint8_t)(tmp << (4 * ((i + 1) % 2))); } return i / 2; diff --git a/src/helper/binarybuffer.h b/src/helper/binarybuffer.h index 99132798b6..bf5c69eba4 100644 --- a/src/helper/binarybuffer.h +++ b/src/helper/binarybuffer.h @@ -38,16 +38,17 @@ static inline void buf_set_u32(uint8_t *_buffer, uint8_t *buffer = _buffer; if ((num == 32) && (first == 0)) { - buffer[3] = (value >> 24) & 0xff; - buffer[2] = (value >> 16) & 0xff; - buffer[1] = (value >> 8) & 0xff; - buffer[0] = (value >> 0) & 0xff; + buffer[3] = (uint8_t)((value >> 24) & 0xff); + buffer[2] = (uint8_t)((value >> 16) & 0xff); + buffer[1] = (uint8_t)((value >> 8) & 0xff); + buffer[0] = (uint8_t)((value >> 0) & 0xff); } else { for (unsigned int i = first; i < first + num; i++) { + const uint8_t mask = 1 << (i % 8); if (((value >> (i - first)) & 1) == 1) - buffer[i / 8] |= 1 << (i % 8); + buffer[i / 8] |= mask; else - buffer[i / 8] &= ~(1 << (i % 8)); + buffer[i / 8] &= ~mask; } } } @@ -69,25 +70,26 @@ static inline void buf_set_u64(uint8_t *_buffer, uint8_t *buffer = _buffer; if ((num == 32) && (first == 0)) { - buffer[3] = (value >> 24) & 0xff; - buffer[2] = (value >> 16) & 0xff; - buffer[1] = (value >> 8) & 0xff; - buffer[0] = (value >> 0) & 0xff; + buffer[3] = (uint8_t)((value >> 24) & 0xff); + buffer[2] = (uint8_t)((value >> 16) & 0xff); + buffer[1] = (uint8_t)((value >> 8) & 0xff); + buffer[0] = (uint8_t)((value >> 0) & 0xff); } else if ((num == 64) && (first == 0)) { - buffer[7] = (value >> 56) & 0xff; - buffer[6] = (value >> 48) & 0xff; - buffer[5] = (value >> 40) & 0xff; - buffer[4] = (value >> 32) & 0xff; - buffer[3] = (value >> 24) & 0xff; - buffer[2] = (value >> 16) & 0xff; - buffer[1] = (value >> 8) & 0xff; - buffer[0] = (value >> 0) & 0xff; + buffer[7] = (uint8_t)((value >> 56) & 0xff); + buffer[6] = (uint8_t)((value >> 48) & 0xff); + buffer[5] = (uint8_t)((value >> 40) & 0xff); + buffer[4] = (uint8_t)((value >> 32) & 0xff); + buffer[3] = (uint8_t)((value >> 24) & 0xff); + buffer[2] = (uint8_t)((value >> 16) & 0xff); + buffer[1] = (uint8_t)((value >> 8) & 0xff); + buffer[0] = (uint8_t)((value >> 0) & 0xff); } else { for (unsigned int i = first; i < first + num; i++) { + const uint8_t mask = 1 << (i % 8); if (((value >> (i - first)) & 1) == 1) - buffer[i / 8] |= 1 << (i % 8); + buffer[i / 8] |= mask; else - buffer[i / 8] &= ~(1 << (i % 8)); + buffer[i / 8] &= ~mask; } } } --