~ chicken-core (chicken-5) 1c9e888c2daf5c0635b879e9946fe213f7bd8c3d
commit 1c9e888c2daf5c0635b879e9946fe213f7bd8c3d Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sat Sep 19 11:30:46 2020 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Thu Sep 24 22:11:09 2020 +1200 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. Signed-off-by: Evan Hanson <evhan@foldling.org> 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 #endifTrap