diff options
author | drh <drh@noemail.net> | 2020-01-10 01:05:49 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-01-10 01:05:49 +0000 |
commit | b2fe5a7c35a114e8d4b869968c61c7b6a9a99cb7 (patch) | |
tree | ba4583cdfbe56b56fb40b03dd801d06251a34c85 /src/vdbeaux.c | |
parent | e5f88010441d15b70fb3cbd9a4833c5d545e8c4c (diff) | |
download | sqlite-b2fe5a7c35a114e8d4b869968c61c7b6a9a99cb7.tar.gz sqlite-b2fe5a7c35a114e8d4b869968c61c7b6a9a99cb7.zip |
Fix to the register validity tracking logic in debug builds. No impact
on release builds.
FossilOrigin-Name: 0a500da6aa659a8e73206e6d22ddbf2da5e4f1d1d551eeb66433163a3e13109d
Diffstat (limited to 'src/vdbeaux.c')
-rw-r--r-- | src/vdbeaux.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 8b01fdec6..fab8b705c 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -1209,14 +1209,16 @@ void sqlite3VdbeReleaseRegisters( assert( pParse->pVdbe ); assert( iFirst>=1 ); assert( iFirst+N-1<=pParse->nMem ); - while( N>0 && (mask&1)!=0 ){ - mask >>= 1; - iFirst++; - N--; - } - while( N>0 && N<=32 && (mask & MASKBIT32(N-1))!=0 ){ - mask &= ~MASKBIT32(N-1); - N--; + if( N<=31 && mask!=0 ){ + while( N>0 && (mask&1)!=0 ){ + mask >>= 1; + iFirst++; + N--; + } + while( N>0 && N<=32 && (mask & MASKBIT32(N-1))!=0 ){ + mask &= ~MASKBIT32(N-1); + N--; + } } if( N>0 ){ sqlite3VdbeAddOp3(pParse->pVdbe, OP_ReleaseReg, iFirst, N, *(int*)&mask); |