diff --git a/src/code/amd64.c b/src/code/amd64.c index f3eac20b3e0c8f21ec87ae1f6fa1d08eddfab009..c472513ed999eb71856e54f5e13c72e11b7ed78b 100644 --- a/src/code/amd64.c +++ b/src/code/amd64.c @@ -2789,7 +2789,7 @@ int amd64_ins_f_jump(unsigned int op, int backward_jump) mov_mem_reg( sp_reg, -4*sizeof(struct svalue)+8, P_REG_RBX ); mov_mem32_reg( P_REG_RBX, OFFSETOF(array,size), P_REG_RCX ); cmp_reg_reg( P_REG_RAX, P_REG_RCX ); - je(&label_A); + jge(&label_A); /* increase counter */ add_mem_imm( sp_reg, -1*(int)sizeof(struct svalue)+8, 1 ); diff --git a/src/testsuite.in b/src/testsuite.in index 8a0cb9018bcedd132dcadb722fac8ef3a26ab212..721834c12fd7de61e0611d443ba0c099afbcd26d 100644 --- a/src/testsuite.in +++ b/src/testsuite.in @@ -8846,6 +8846,13 @@ test_any([[ string s;if(1) foreach(({}),s); else foreach(({}),s); return 1 ]],1) +test_any([[ + // Bug 7426. + array a = ({}); + foreach(a[1..], mixed e) return 0; + return 1; +]], 1) + test_any([[ int ret; foreach( ([1:2,3:5,7:11,13:17]) ; int a ; int b) ret+=a*b;