From 8a38af2f99685eac412d862dd379036ad65cbb6e Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Thu, 15 May 2014 17:03:28 +0200 Subject: [PATCH] Fix FOLD rule for STRREF of SNEW. --- src/lj_opt_fold.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 8a5b41cc..409549c9 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -505,13 +505,14 @@ LJFOLDF(kfold_strref_snew) } else { /* Reassociate: strref(snew(strref(str, a), len), b) ==> strref(str, a+b) */ IRIns *ir = IR(fleft->op1); - IRRef1 str = ir->op1; /* IRIns * is not valid across emitir. */ - lua_assert(ir->o == IR_STRREF); - PHIBARRIER(ir); - fins->op2 = emitir(IRTI(IR_ADD), ir->op2, fins->op2); /* Clobbers fins! */ - fins->op1 = str; - fins->ot = IRT(IR_STRREF, IRT_P32); - return RETRYFOLD; + if (ir->o == IR_STRREF) { + IRRef1 str = ir->op1; /* IRIns * is not valid across emitir. */ + PHIBARRIER(ir); + fins->op2 = emitir(IRTI(IR_ADD), ir->op2, fins->op2); /* Clobbers fins! */ + fins->op1 = str; + fins->ot = IRT(IR_STRREF, IRT_P32); + return RETRYFOLD; + } } return NEXTFOLD; } -- 2.11.4.GIT