libguile/vm-i-system.c: workaround ice ssa corruption while compiling with option -g -O While compiling with option -g -O, there was a ssa corruption: .. Unable to coalesce ssa_names 48 and 3476 which are marked as MUST COALESCE. sp_48(ab) and sp_3476(ab) guile-2.0.11/libguile/vm-engine.c: In function 'vm_debug_engine': guile-2.0.11/libguile/vm.c:673:19: internal compiler error: SSA corruption #define VM_NAME vm_debug_engine ^ guile-2.0.11/libguile/vm-engine.c:39:1: note: in expansion of macro 'VM_NAME' VM_NAME (SCM vm, SCM program, SCM *argv, int nargs) ^ Please submit a full bug report, with preprocessed source if appropriate. See for instructions. ... Tweak libguile/vm-i-system.c to add boundary value check to workaround it. Upstream-Status: Pending Signed-off-by: Hongxu Jia --- libguile/vm-i-system.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -625,10 +625,22 @@ VM_DEFINE_INSTRUCTION (47, bind_optionals_shuffle, "bind-optionals/shuffle", 6, /* now shuffle up, from walk to ntotal */ { scm_t_ptrdiff nshuf = sp - walk + 1, i; - sp = (fp - 1) + ntotal + nshuf; - CHECK_OVERFLOW (); - for (i = 0; i < nshuf; i++) - sp[-i] = walk[nshuf-i-1]; + /* check the value of nshuf to workaround ice ssa corruption */ + /* while compiling with -O -g */ + if (nshuf > 0) + { + sp = (fp - 1) + ntotal + nshuf; + CHECK_OVERFLOW (); + for (i = 0; i < nshuf; i++) + sp[-i] = walk[nshuf-i-1]; + } + else + { + sp = (fp - 1) + ntotal + nshuf; + CHECK_OVERFLOW (); + for (i = 0; i < nshuf; i++) + sp[-i] = walk[nshuf-i-1]; + } } /* and fill optionals & keyword args with SCM_UNDEFINED */ while (walk <= (fp - 1) + ntotal) -- 1.9.1