| 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 <http://gcc.gnu.org/bugs.html> for instructions. | 
| ... | 
|   | 
| Tweak libguile/vm-i-system.c to add boundary value check to workaround it. | 
|   | 
| Upstream-Status: Pending | 
|   | 
| Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> | 
|   | 
| Fixes Buildroot autobuilder failures on AArch64. | 
|   | 
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | 
| --- | 
|  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 |