1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

More strict aliasing fixes. The single source file library now runs

successfully with -fstrict-alias. (CVS 3725)

FossilOrigin-Name: c8a8a189a82500aab501e9949f5b197c0b80b3a9
This commit is contained in:
drh
2007-03-27 13:36:37 +00:00
parent e2330c8608
commit cf64372910
10 changed files with 93 additions and 75 deletions

View File

@@ -1,5 +1,5 @@
C Get\sthe\s-DSQLITE_OMIT_XFER_OPT\soption\sworking.\s\sRun\sspeed\stests\son\sa\sfull\nregression.\s\sAdd\sthe\sscript\sfor\sgenerating\ssqlite3.c.\s(CVS\s3724) C More\sstrict\saliasing\sfixes.\s\sThe\ssingle\ssource\sfile\slibrary\snow\sruns\nsuccessfully\swith\s-fstrict-alias.\s(CVS\s3725)
D 2007-03-27T12:04:06 D 2007-03-27T13:36:37
F Makefile.in 1fe3d0b46e40fd684e1e61f8e8056cefed16de9f F Makefile.in 1fe3d0b46e40fd684e1e61f8e8056cefed16de9f
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -60,13 +60,13 @@ F src/attach.c 9b5a9c50fb92883e3404353b225674142da826cd
F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f
F src/btree.c 0659070eb438bae32cec8afebe6d8d390024d952 F src/btree.c 0659070eb438bae32cec8afebe6d8d390024d952
F src/btree.h 066444ee25bd6e6accb997bfd2cf5ace14dbcd00 F src/btree.h 066444ee25bd6e6accb997bfd2cf5ace14dbcd00
F src/build.c fe2fcebc9232a7dec77d7602a41c0d3bc2e7fa5d F src/build.c d178bd7c8117f5f47694da9a0d5f336e85528180
F src/callback.c 31d22b4919c7645cbcbb1591ce2453e8c677c558 F src/callback.c 31d22b4919c7645cbcbb1591ce2453e8c677c558
F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675 F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675
F src/date.c 393c73fc027597e008dcd81454544659e978b05c F src/date.c 393c73fc027597e008dcd81454544659e978b05c
F src/delete.c 151d08386bf9c9e7f92f6b9106c71efec2def184 F src/delete.c 151d08386bf9c9e7f92f6b9106c71efec2def184
F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
F src/expr.c 971dd206ec0fa82d9fd1abb587a40df226f98966 F src/expr.c a8740c24af3f39f2d502be1a1c640c96435eaac0
F src/func.c 94372fe3cf26b81d4dcdc15f98ff240c37c8c708 F src/func.c 94372fe3cf26b81d4dcdc15f98ff240c37c8c708
F src/hash.c 449f3d6620193aa557f5d86cbc5cc6b87702b185 F src/hash.c 449f3d6620193aa557f5d86cbc5cc6b87702b185
F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564 F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564
@@ -86,7 +86,7 @@ F src/os_unix.c 1f32d15449caa02ada876a0e5b7b774d90e1be77
F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
F src/os_win.c 13708a58aa24a9960fa45ac4a681e34f881ae77c F src/os_win.c 13708a58aa24a9960fa45ac4a681e34f881ae77c
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
F src/pager.c f40ac7af27f3494e5c82807d09a7e23d741aaf75 F src/pager.c 7a60e7e1f8b5abe841282a3dc90823b73fefe8b8
F src/pager.h 3c16500c25051536e43fb19e246e58fc7cb51d9f F src/pager.h 3c16500c25051536e43fb19e246e58fc7cb51d9f
F src/parse.y bcfe366c1fd61cfc40e5344eb69a31997a821af0 F src/parse.y bcfe366c1fd61cfc40e5344eb69a31997a821af0
F src/pragma.c 9cb8b94e7d38ba35a86037bd517d07ba9870b4b2 F src/pragma.c 9cb8b94e7d38ba35a86037bd517d07ba9870b4b2
@@ -98,7 +98,7 @@ F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
F src/shell.c 3ae4654560e91220a95738a73d135d91d937cda1 F src/shell.c 3ae4654560e91220a95738a73d135d91d937cda1
F src/sqlite.h.in 6b7383baf76070214f6381f603328ca9b22a7fae F src/sqlite.h.in 6b7383baf76070214f6381f603328ca9b22a7fae
F src/sqlite3ext.h 832e13de075d920e2c76584e2b7af1054bb212df F src/sqlite3ext.h 832e13de075d920e2c76584e2b7af1054bb212df
F src/sqliteInt.h 86ab83dddf32325d8f2afd92575d8e0168ecb8c2 F src/sqliteInt.h 7a3d16cd517dfce73eeac10963275454d6421f82
F src/table.c 6d0da66dde26ee75614ed8f584a1996467088d06 F src/table.c 6d0da66dde26ee75614ed8f584a1996467088d06
F src/tclsqlite.c cd2b3b86ab07c0e0779f6c6e71e72c6c7dc1e704 F src/tclsqlite.c cd2b3b86ab07c0e0779f6c6e71e72c6c7dc1e704
F src/test1.c 7c8f2786dbd55bab35c7529045a3d72f54c7f98b F src/test1.c 7c8f2786dbd55bab35c7529045a3d72f54c7f98b
@@ -120,17 +120,17 @@ F src/tokenize.c bb1732ef2b6fc2143f93ff28a45d3dcb04c1d396
F src/trigger.c 8c55d31876013ed4e97ee7ce24478fbe00db49bb F src/trigger.c 8c55d31876013ed4e97ee7ce24478fbe00db49bb
F src/update.c 876b3142b8db9ce6ddf8374a2ced65e576acabc7 F src/update.c 876b3142b8db9ce6ddf8374a2ced65e576acabc7
F src/utf.c 67ecb1032bc0b42c105e88d65ef9d9f626eb0e1f F src/utf.c 67ecb1032bc0b42c105e88d65ef9d9f626eb0e1f
F src/util.c 729a528fc35e858d33e270676d6a61b3eff525d4 F src/util.c 8e8180ee5597f2474c1da311ff3c464b6966c0f1
F src/vacuum.c 327c6ffa38935163db7c1e256ff5f788e901b318 F src/vacuum.c 327c6ffa38935163db7c1e256ff5f788e901b318
F src/vdbe.c df2aa8cf692eeffd4027a2a8ec71aa0248a13e87 F src/vdbe.c b452ec53e3b8d81b0f21af980ed8fd1547cb6f5a
F src/vdbe.h 0025259af1939fb264a545816c69e4b5b8d52691 F src/vdbe.h 0025259af1939fb264a545816c69e4b5b8d52691
F src/vdbeInt.h b2ca85ca8abfbba86e380b06c7673dc81c6784c3 F src/vdbeInt.h b2ca85ca8abfbba86e380b06c7673dc81c6784c3
F src/vdbeapi.c 6cff63a5b3a52af04b2bef0f7e27ed7ea6f85183 F src/vdbeapi.c 6cff63a5b3a52af04b2bef0f7e27ed7ea6f85183
F src/vdbeaux.c b196911da933c66df287fd4b1498a2d2ef5daa93 F src/vdbeaux.c b98177089a57f496a6a36edef038b9d5df2befdb
F src/vdbefifo.c 3ca8049c561d5d67cbcb94dc909ae9bb68c0bf8f F src/vdbefifo.c 3ca8049c561d5d67cbcb94dc909ae9bb68c0bf8f
F src/vdbemem.c 58a8be2231b0b13e2e77098debe173e79d22f791 F src/vdbemem.c 58a8be2231b0b13e2e77098debe173e79d22f791
F src/vtab.c 7fbda947e28cbe7adb3ba752a76ca9ef29936750 F src/vtab.c 7fbda947e28cbe7adb3ba752a76ca9ef29936750
F src/where.c 0825fabc1a185af1567dc82e63683cd9b47d9e22 F src/where.c 0ef9acc43cc696b01a3f1019bc07c8d8e0849999
F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/all.test 60267b055e82de4fb8b841eabb014bc2f836a4eb F test/all.test 60267b055e82de4fb8b841eabb014bc2f836a4eb
@@ -442,7 +442,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P 42c038518c4ba0ef827a5717d450f95165b3c729 P 1dd9d0775a8199047de30218af71a31c731fedb1
R 76a8b8a54e51e640933974bfc36cdc29 R 788fdfcff1fda81d98ec4386ff9fe62b
U drh U drh
Z d7b781387df7f99692c8bcb17adac3b2 Z a721db4fcd13afdccda21f5563fa1a8b

View File

@@ -1 +1 @@
1dd9d0775a8199047de30218af71a31c731fedb1 c8a8a189a82500aab501e9949f5b197c0b80b3a9

View File

@@ -22,7 +22,7 @@
** COMMIT ** COMMIT
** ROLLBACK ** ROLLBACK
** **
** $Id: build.c,v 1.416 2007/03/26 22:05:01 drh Exp $ ** $Id: build.c,v 1.417 2007/03/27 13:36:37 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -82,7 +82,7 @@ void sqlite3TableLock(
} }
nBytes = sizeof(TableLock) * (pParse->nTableLock+1); nBytes = sizeof(TableLock) * (pParse->nTableLock+1);
sqliteReallocOrFree(&pParse->aTableLock, nBytes); pParse->aTableLock = sqliteReallocOrFree(pParse->aTableLock, nBytes);
if( pParse->aTableLock ){ if( pParse->aTableLock ){
p = &pParse->aTableLock[pParse->nTableLock++]; p = &pParse->aTableLock[pParse->nTableLock++];
p->iDb = iDb; p->iDb = iDb;
@@ -2783,45 +2783,46 @@ exit_drop_index:
} }
/* /*
** ppArray points into a structure where there is an array pointer ** pArray is a pointer to an array of objects. Each object in the
** followed by two integers. The first integer is the ** array is szEntry bytes in size. This routine allocates a new
** number of elements in the structure array. The second integer ** object on the end of the array.
** is the number of allocated slots in the array.
** **
** In other words, the structure looks something like this: ** *pnEntry is the number of entries already in use. *pnAlloc is
** the previously allocated size of the array. initSize is the
** suggested initial array size allocation.
** **
** struct Example1 { ** The index of the new entry is returned in *pIdx.
** struct subElem *aEntry;
** int nEntry;
** int nAlloc;
** }
** **
** The pnEntry parameter points to the equivalent of Example1.nEntry. ** This routine returns a pointer to the array of objects. This
** ** might be the same as the pArray parameter or it might be a different
** This routine allocates a new slot in the array, zeros it out, ** pointer if the array was resized.
** and returns its index. If malloc fails a negative number is returned.
**
** szEntry is the sizeof of a single array entry. initSize is the
** number of array entries allocated on the initial allocation.
*/ */
int sqlite3ArrayAllocate(void *ppArray, int szEntry, int initSize){ void *sqlite3ArrayAllocate(
char *p; void *pArray, /* Array of objects. Might be reallocated */
void **pp = (void**)ppArray; int szEntry, /* Size of each object in the array */
int *an = (int*)&pp[1]; int initSize, /* Suggested initial allocation, in elements */
if( an[0]>=an[1] ){ int *pnEntry, /* Number of objects currently in use */
int *pnAlloc, /* Current size of the allocation, in elements */
int *pIdx /* Write the index of a new slot here */
){
char *z;
if( *pnEntry >= *pnAlloc ){
void *pNew; void *pNew;
int newSize; int newSize;
newSize = an[1]*2 + initSize; newSize = (*pnAlloc)*2 + initSize;
pNew = sqliteRealloc(*pp, newSize*szEntry); pNew = sqliteRealloc(pArray, newSize*szEntry);
if( pNew==0 ){ if( pNew==0 ){
return -1; *pIdx = -1;
return pArray;
} }
an[1] = newSize; *pnAlloc = newSize;
*pp = pNew; pArray = pNew;
} }
p = *pp; z = (char*)pArray;
memset(&p[an[0]*szEntry], 0, szEntry); memset(&z[*pnEntry * szEntry], 0, szEntry);
return an[0]++; *pIdx = *pnEntry;
++*pnEntry;
return pArray;
} }
/* /*
@@ -2837,7 +2838,14 @@ IdList *sqlite3IdListAppend(IdList *pList, Token *pToken){
if( pList==0 ) return 0; if( pList==0 ) return 0;
pList->nAlloc = 0; pList->nAlloc = 0;
} }
i = sqlite3ArrayAllocate(&pList->a, sizeof(pList->a[0]), 5); pList->a = sqlite3ArrayAllocate(
pList->a,
sizeof(pList->a[0]),
5,
&pList->nId,
&pList->nAlloc,
&i
);
if( i<0 ){ if( i<0 ){
sqlite3IdListDelete(pList); sqlite3IdListDelete(pList);
return 0; return 0;

View File

@@ -12,7 +12,7 @@
** This file contains routines used for analyzing expressions and ** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite. ** for generating VDBE code that evaluates expressions in SQLite.
** **
** $Id: expr.c,v 1.282 2007/03/26 22:05:01 drh Exp $ ** $Id: expr.c,v 1.283 2007/03/27 13:36:37 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -404,7 +404,7 @@ void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
pExpr->iTable = ++pParse->nVar; pExpr->iTable = ++pParse->nVar;
if( pParse->nVarExpr>=pParse->nVarExprAlloc-1 ){ if( pParse->nVarExpr>=pParse->nVarExprAlloc-1 ){
pParse->nVarExprAlloc += pParse->nVarExprAlloc + 10; pParse->nVarExprAlloc += pParse->nVarExprAlloc + 10;
sqliteReallocOrFree(&pParse->apVarExpr, pParse->apVarExpr = sqliteReallocOrFree(pParse->apVarExpr,
pParse->nVarExprAlloc*sizeof(pParse->apVarExpr[0]) ); pParse->nVarExprAlloc*sizeof(pParse->apVarExpr[0]) );
} }
if( !sqlite3MallocFailed() ){ if( !sqlite3MallocFailed() ){
@@ -2237,10 +2237,14 @@ int sqlite3ExprCompare(Expr *pA, Expr *pB){
*/ */
static int addAggInfoColumn(AggInfo *pInfo){ static int addAggInfoColumn(AggInfo *pInfo){
int i; int i;
i = sqlite3ArrayAllocate(&pInfo->aCol, sizeof(pInfo->aCol[0]), 3); pInfo->aCol = sqlite3ArrayAllocate(
if( i<0 ){ pInfo->aCol,
return -1; sizeof(pInfo->aCol[0]),
} 3,
&pInfo->nColumn,
&pInfo->nColumnAlloc,
&i
);
return i; return i;
} }
@@ -2250,10 +2254,14 @@ static int addAggInfoColumn(AggInfo *pInfo){
*/ */
static int addAggInfoFunc(AggInfo *pInfo){ static int addAggInfoFunc(AggInfo *pInfo){
int i; int i;
i = sqlite3ArrayAllocate(&pInfo->aFunc, sizeof(pInfo->aFunc[0]), 2); pInfo->aFunc = sqlite3ArrayAllocate(
if( i<0 ){ pInfo->aFunc,
return -1; sizeof(pInfo->aFunc[0]),
} 3,
&pInfo->nFunc,
&pInfo->nFuncAlloc,
&i
);
return i; return i;
} }

View File

@@ -18,7 +18,7 @@
** file simultaneously, or one process from reading the database while ** file simultaneously, or one process from reading the database while
** another is writing. ** another is writing.
** **
** @(#) $Id: pager.c,v 1.300 2007/03/26 22:05:02 drh Exp $ ** @(#) $Id: pager.c,v 1.301 2007/03/27 13:36:37 drh Exp $
*/ */
#ifndef SQLITE_OMIT_DISKIO #ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -1828,7 +1828,7 @@ int sqlite3PagerSetPagesize(Pager *pPager, int pageSize){
if( !pPager->memDb && pPager->nRef==0 ){ if( !pPager->memDb && pPager->nRef==0 ){
pager_reset(pPager); pager_reset(pPager);
pPager->pageSize = pageSize; pPager->pageSize = pageSize;
sqlite3ReallocOrFree(&pPager->pTmpSpace, pageSize); pPager->pTmpSpace = sqlite3ReallocOrFree(pPager->pTmpSpace, pageSize);
} }
return pPager->pageSize; return pPager->pageSize;
} }

View File

@@ -11,7 +11,7 @@
************************************************************************* *************************************************************************
** Internal interface definitions for SQLite. ** Internal interface definitions for SQLite.
** **
** @(#) $Id: sqliteInt.h,v 1.544 2007/03/26 22:05:02 drh Exp $ ** @(#) $Id: sqliteInt.h,v 1.545 2007/03/27 13:36:37 drh Exp $
*/ */
#ifndef _SQLITEINT_H_ #ifndef _SQLITEINT_H_
#define _SQLITEINT_H_ #define _SQLITEINT_H_
@@ -1567,7 +1567,7 @@ void *sqlite3Realloc(void*,int);
char *sqlite3StrDup(const char*); char *sqlite3StrDup(const char*);
char *sqlite3StrNDup(const char*, int); char *sqlite3StrNDup(const char*, int);
# define sqlite3CheckMemory(a,b) # define sqlite3CheckMemory(a,b)
void sqlite3ReallocOrFree(void*,int); void *sqlite3ReallocOrFree(void*,int);
void sqlite3FreeX(void*); void sqlite3FreeX(void*);
void *sqlite3MallocX(int); void *sqlite3MallocX(int);
int sqlite3AllocSize(void *); int sqlite3AllocSize(void *);
@@ -1624,7 +1624,7 @@ void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int);
void sqlite3DropTable(Parse*, SrcList*, int, int); void sqlite3DropTable(Parse*, SrcList*, int, int);
void sqlite3DeleteTable(sqlite3*, Table*); void sqlite3DeleteTable(sqlite3*, Table*);
void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int); void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
int sqlite3ArrayAllocate(void*,int,int); void *sqlite3ArrayAllocate(void*,int,int,int*,int*,int*);
IdList *sqlite3IdListAppend(IdList*, Token*); IdList *sqlite3IdListAppend(IdList*, Token*);
int sqlite3IdListIndex(IdList*,const char*); int sqlite3IdListIndex(IdList*,const char*);
SrcList *sqlite3SrcListAppend(SrcList*, Token*, Token*); SrcList *sqlite3SrcListAppend(SrcList*, Token*, Token*);

View File

@@ -14,7 +14,7 @@
** This file contains functions for allocating memory, comparing ** This file contains functions for allocating memory, comparing
** strings, and stuff like that. ** strings, and stuff like that.
** **
** $Id: util.c,v 1.196 2007/03/26 22:05:02 drh Exp $ ** $Id: util.c,v 1.197 2007/03/27 13:36:37 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -661,13 +661,13 @@ void *sqlite3Malloc(int n, int doMemManage){
} }
return p; return p;
} }
void sqlite3ReallocOrFree(void *pp, int n){ void *sqlite3ReallocOrFree(void *p, int n){
char **x = (char**)pp; void *pNew;
void *p = sqlite3Realloc(*x, n); pNew = sqlite3Realloc(p, n);
if( !p ){ if( !pNew ){
sqlite3FreeX(*x); sqlite3FreeX(p);
} }
*x = p; return pNew;
} }
/* /*

View File

@@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing ** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code. ** commenting and indentation practices when changing or adding code.
** **
** $Id: vdbe.c,v 1.592 2007/03/26 22:05:02 drh Exp $ ** $Id: vdbe.c,v 1.593 2007/03/27 13:36:37 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -4236,7 +4236,8 @@ case OP_ContextPush: { /* no-push */
/* FIX ME: This should be allocated as part of the vdbe at compile-time */ /* FIX ME: This should be allocated as part of the vdbe at compile-time */
if( i>=p->contextStackDepth ){ if( i>=p->contextStackDepth ){
p->contextStackDepth = i+1; p->contextStackDepth = i+1;
sqliteReallocOrFree(&p->contextStack, sizeof(Context)*(i+1)); p->contextStack = sqliteReallocOrFree(p->contextStack,
sizeof(Context)*(i+1));
if( p->contextStack==0 ) goto no_mem; if( p->contextStack==0 ) goto no_mem;
} }
pContext = &p->contextStack[i]; pContext = &p->contextStack[i];

View File

@@ -195,7 +195,8 @@ int sqlite3VdbeMakeLabel(Vdbe *p){
assert( p->magic==VDBE_MAGIC_INIT ); assert( p->magic==VDBE_MAGIC_INIT );
if( i>=p->nLabelAlloc ){ if( i>=p->nLabelAlloc ){
p->nLabelAlloc = p->nLabelAlloc*2 + 10; p->nLabelAlloc = p->nLabelAlloc*2 + 10;
sqliteReallocOrFree(&p->aLabel, p->nLabelAlloc*sizeof(p->aLabel[0])); p->aLabel = sqliteReallocOrFree(p->aLabel,
p->nLabelAlloc*sizeof(p->aLabel[0]));
} }
if( p->aLabel ){ if( p->aLabel ){
p->aLabel[i] = -1; p->aLabel[i] = -1;

View File

@@ -16,7 +16,7 @@
** so is applicable. Because this module is responsible for selecting ** so is applicable. Because this module is responsible for selecting
** indices, you might also think of this module as the "query optimizer". ** indices, you might also think of this module as the "query optimizer".
** **
** $Id: where.c,v 1.240 2007/03/26 22:05:02 drh Exp $ ** $Id: where.c,v 1.241 2007/03/27 13:36:37 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -1707,8 +1707,8 @@ static void codeEqualityTerm(
sqlite3VdbeAddOp(v, OP_Rewind, iTab, 0); sqlite3VdbeAddOp(v, OP_Rewind, iTab, 0);
VdbeComment((v, "# %.*s", pX->span.n, pX->span.z)); VdbeComment((v, "# %.*s", pX->span.n, pX->span.z));
pLevel->nIn++; pLevel->nIn++;
sqliteReallocOrFree(&pLevel->aInLoop, pLevel->aInLoop = sqliteReallocOrFree(pLevel->aInLoop,
sizeof(pLevel->aInLoop[0])*2*pLevel->nIn); sizeof(pLevel->aInLoop[0])*2*pLevel->nIn);
aIn = pLevel->aInLoop; aIn = pLevel->aInLoop;
if( aIn ){ if( aIn ){
aIn += pLevel->nIn*2 - 2; aIn += pLevel->nIn*2 - 2;