Eli Zaretskii <[email protected]> writes: >> Date: Sun, 9 Nov 2014 23:30:07 -0500 >> From: jeremy chen <[email protected]> >> >> Hi, I am trying to compile guile on windows with Mingw-w64. >> The file libguile/numbers.c signal an error in this function: >> >> static SCM >> scm_i_inum2big (scm_t_inum x) >> { >> /* Return a newly created bignum initialized to X. */ >> SCM z = make_bignum (); >> #if SIZEOF_VOID_P == SIZEOF_LONG >> mpz_init_set_si (SCM_I_BIG_MPZ (z), x); >> #else >> /* Note that in this case, you'll also have to check all mpz_*_ui and >> mpz_*_si invocations in Guile. */ >> #error creation of mpz not implemented for this inum size >> #endif >> return z; >> } >> >> sizeof(void*) is 8 and sizeof(long) is 4 on my machine. >> Anyway to get around this? Thanks. > > This is a bug in Guile: it assumes the LP64 data model, where both > 'long' and a pointer are 64-bit wide. But 64-bit Windows uses the > LLP64 model, where 'long' is a 32-bit data type, and the 64-bit > integer data type is 'long long' or '__int64'.
Indeed. I've filed a ticket for this issue: http://bugs.gnu.org/19019 It will take some time to find and fix all the places where this assumption is made, but I will make an effort to do so in the coming months. Thanks, Mark
