~ 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
 #endif
Trap