Attempt to work around a bug in the Borland BCC 5.5.1 compiler. Ticket #2880. (CVS 4705)

FossilOrigin-Name: 6de0ee49073c7a47d5e10495b569b33df76d1448
This commit is contained in:
drh 2008-01-11 00:06:10 +00:00
parent 2d401ab8f9
commit efe3d656b6
3 changed files with 26 additions and 7 deletions

View File

@ -1,5 +1,5 @@
C More\swork\stoward\sconverting\sthe\sVM\sinto\sa\sregister-based\smachine.\s(CVS\s4704)
D 2008-01-10T23:50:11
C Attempt\sto\swork\saround\sa\sbug\sin\sthe\sBorland\sBCC\s5.5.1\scompiler.\s\sTicket\s#2880.\s(CVS\s4705)
D 2008-01-11T00:06:11
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 30789bf70614bad659351660d76b8e533f3340e9
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -175,7 +175,7 @@ F src/vdbeapi.c f14174843bf4be2c9afdf2ef48b61e7c3ac62d7c
F src/vdbeaux.c db33a4c2477546da05e772352be43896d24d51d5
F src/vdbeblob.c e386d49d8354aa5a58f0a7f2794303442c149120
F src/vdbefifo.c 334c838c8f42d61a94813d136019ee566b5dc2f6
F src/vdbemem.c a94f3e9e85578ba457133ad3446fc6114a03ec5a
F src/vdbemem.c 3da7f7fa7f2ab06a5cbaff132898b07e4d095220
F src/vtab.c 03014b2bfa8096ecac5fcdc80d34cd76e06af52a
F src/where.c 9705df3c2b78ea8e02a768be8ac5d3f7a2902f1e
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
@ -605,7 +605,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P 173698c963473ab1b9db88b23a2de82e4097b96d
R 8bf48b53bfdac6453062e461bf371d81
P 8cbd46517f407b3b1ce187b623db10f00aa415ea
R 911083b5c48b851385eee47775792145
U drh
Z e7ee9d7977b0629978f5e3008b2a0c6d
Z ec1836639b43428a4a6ed94e2aced93a

View File

@ -1 +1 @@
8cbd46517f407b3b1ce187b623db10f00aa415ea
6de0ee49073c7a47d5e10495b569b33df76d1448

View File

@ -355,7 +355,26 @@ double sqlite3VdbeRealValue(Mem *pMem){
void sqlite3VdbeIntegerAffinity(Mem *pMem){
assert( pMem->flags & MEM_Real );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
/* It is reported (in ticket #2880) that the BCC 5.5.1 compiler
** will corrupt a floating point number on the right-hand side
** of an assignment if the lvalue for the assignment is an integer.
**
** We will attempt to work around this bug in the Borland compiler
** by moving the value into a temporary variable first so that if
** the assignment into the integer really does corrupt the right-hand
** side value, it will corrupt a temporary variable that we do not
** care about.
*/
#ifdef __BORLANDC__
{
double r = pMem->r;
pMem->u.i = r;
}
#else
pMem->u.i = pMem->r;
#endif
if( ((double)pMem->u.i)==pMem->r ){
pMem->flags |= MEM_Int;
}