Fix GCC-9.1 warning with macro GET_ARG_NUMERIC

GCC-9.1 reports following error when trying to compile file
src/malloc_io.c and with CFLAGS='-Werror' :

src/malloc_io.c: In function ‘malloc_vsnprintf’:
src/malloc_io.c:369:2: error: case label value exceeds maximum value for type [-Werror]
  369 |  case '?' | 0x80:      \
      |  ^~~~
src/malloc_io.c:581:5: note: in expansion of macro ‘GET_ARG_NUMERIC’
  581 |     GET_ARG_NUMERIC(val, 'p');
      |     ^~~~~~~~~~~~~~~
...
<snip>
cc1: all warnings being treated as errors
make: *** [Makefile:388: src/malloc_io.sym.o] Error 1

The warning is reported as by default the type 'char' is 'signed char'
and or-ing 0x80 will turn the case label char negative which will be
beyond the printable ascii range (0 - 127).

The patch fixes this by explicitly casting the 'len' variable as
unsigned char' inside the 'switch' statement so that value of
expression " '?' | 0x80 " falls within the legal values of the
variable 'len'.
This commit is contained in:
Vaibhav Jain 2019-05-21 12:06:16 +05:30 committed by Qi Wang
parent 07c44847c2
commit 2d6d099fed

View File

@ -362,7 +362,7 @@ malloc_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
} \ } \
} while (0) } while (0)
#define GET_ARG_NUMERIC(val, len) do { \ #define GET_ARG_NUMERIC(val, len) do { \
switch (len) { \ switch ((unsigned char)len) { \
case '?': \ case '?': \
val = va_arg(ap, int); \ val = va_arg(ap, int); \
break; \ break; \