From 1dd7d6535cd6760641b4cfe53c00e0f70da1a2e1 Mon Sep 17 00:00:00 2001 From: felix Date: Sat, 19 Sep 2020 11:30:46 +0200 Subject: [PATCH] Ensure lambda-info length in C_lihdr is cast to C_char As lambda-info strings that exceed 127 cause a signed char overflow, we must cast the length to C_char, or C++ compilers will reject the generated code. --- chicken.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chicken.h b/chicken.h index d75fe04f..ad3ba9da 100644 --- a/chicken.h +++ b/chicken.h @@ -1487,17 +1487,17 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret; #ifdef C_BIG_ENDIAN # ifdef C_SIXTY_FOUR # define C_lihdr(x, y, z) ((C_LAMBDA_INFO_TYPE >> 56) & 0xff), \ - 0, 0, 0, 0, (x), (y), (z) + 0, 0, 0, 0, (x), (y), ((C_char)(z)) # else # define C_lihdr(x, y, z) ((C_LAMBDA_INFO_TYPE >> 24) & 0xff), \ - (x), (y), (z) + (x), (y), ((C_char)(z)) # endif #else # ifdef C_SIXTY_FOUR -# define C_lihdr(x, y, z) (z), (y), (x), 0, 0, 0, 0, \ +# define C_lihdr(x, y, z) ((C_char)(z)), (y), (x), 0, 0, 0, 0, \ ((C_LAMBDA_INFO_TYPE >> 56) & 0xff) # else -# define C_lihdr(x, y, z) (z), (y), (x), \ +# define C_lihdr(x, y, z) ((C_char)(z)), (y), (x), \ ((C_LAMBDA_INFO_TYPE >> 24) & 0xff) # endif #endif -- 2.24.2