aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-01-04 15:21:47 +0000
committerdrh <drh@noemail.net>2020-01-04 15:21:47 +0000
commitf6ea97ea3d278c212ef366e255051e52ca352332 (patch)
tree5be684272a2ae657c6aff18870acf86295d6e3a9 /src/expr.c
parent4549a3b8cb6d776dc7023580ded18a8158dccc9e (diff)
downloadsqlite-f6ea97ea3d278c212ef366e255051e52ca352332.tar.gz
sqlite-f6ea97ea3d278c212ef366e255051e52ca352332.zip
Fix a false-positive in the register validity tracking logic by moving the
temporary register release call before the jump that uses that temporary register. FossilOrigin-Name: 9da48a5ca66dc67c8f7fb2d2471dac7ea696e35ecba5ddf65747d08d452436c1
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/expr.c b/src/expr.c
index 0c4a61175..a89730fe9 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -3209,6 +3209,7 @@ static void sqlite3ExprCodeIN(
if( regCkNull && sqlite3ExprCanBeNull(pList->a[ii].pExpr) ){
sqlite3VdbeAddOp3(v, OP_BitAnd, regCkNull, r2, regCkNull);
}
+ sqlite3ReleaseTempReg(pParse, regToFree);
if( ii<pList->nExpr-1 || destIfNull!=destIfFalse ){
int op = rLhs!=r2 ? OP_Eq : OP_NotNull;
sqlite3VdbeAddOp4(v, op, rLhs, labelOk, r2,
@@ -3227,7 +3228,6 @@ static void sqlite3ExprCodeIN(
VdbeCoverageIf(v, op==OP_IsNull);
sqlite3VdbeChangeP5(v, zAff[0] | SQLITE_JUMPIFNULL);
}
- sqlite3ReleaseTempReg(pParse, regToFree);
}
if( regCkNull ){
sqlite3VdbeAddOp2(v, OP_IsNull, regCkNull, destIfNull); VdbeCoverage(v);