A bit of an init/clear gremlin in integer-expt, * numbers.c (scm_integer_expt): Don't mpz_init after scm_i_clonebig or scm_i_mkbig, since they do so already. Don't mpz_clear a bignum SCM, since gc does this. The bad cases are a bignum exponent and a flonum exponent bigger than a fixnum, so (integer-expt 0.5 (ash 1 128)) (gc) (gc) and (integer-expt 0.5 (exact->inexact (ash 1 128))) (gc) (gc) Run under your favourite malloc debugger to see the duplicate mpz_clear free when the gc gets around to releasing z_i2.