mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-12 13:01:09 +03:00
Make use of the __buildin_OP_overflow() functions from GCC when doing
64-bit signed integer arithmetic. FossilOrigin-Name: 82cbebb8ee4484f13e5f48d305e20e73063f273e
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Add\sthe\sexperimental\saffinity()\sSQL\sfunction\swhen\sSQLITE_DEBUG\sis\sdefined.
|
C Make\suse\sof\sthe\s__buildin_OP_overflow()\sfunctions\sfrom\sGCC\swhen\sdoing\n64-bit\ssigned\sinteger\sarithmetic.
|
||||||
D 2017-01-03T14:45:35.313
|
D 2017-01-03T17:33:43.523
|
||||||
F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
|
F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
|
F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
|
||||||
@@ -453,7 +453,7 @@ F src/treeview.c 4e44ade3bfe59d82005039f72e09333ce2b4162c
|
|||||||
F src/trigger.c c9f0810043b265724fdb1bdd466894f984dfc182
|
F src/trigger.c c9f0810043b265724fdb1bdd466894f984dfc182
|
||||||
F src/update.c 1da7c462110bffed442a42884cb0d528c1db46d8
|
F src/update.c 1da7c462110bffed442a42884cb0d528c1db46d8
|
||||||
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
||||||
F src/util.c 1534060bc034cdc51381c040c8bd6252dbcb64c9
|
F src/util.c 8c3d2aa11bacd984caf8067ed5b857de3fb53b81
|
||||||
F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16
|
F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16
|
||||||
F src/vdbe.c 88bd6c32b333580d2661ac3afe33369757fb1522
|
F src/vdbe.c 88bd6c32b333580d2661ac3afe33369757fb1522
|
||||||
F src/vdbe.h 50ee139f9c68fff91be1d717ed3a6abbd496919c
|
F src/vdbe.h 50ee139f9c68fff91be1d717ed3a6abbd496919c
|
||||||
@@ -1541,8 +1541,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 36944be6be5c42096f5da84187ff203af26b08ae f778f58ae4ea3e16f51b94591a2c1e563dcb0cde
|
P bed0eaa5f50112e64fc97a2afdc9d56cf8f5026a
|
||||||
R 4de702ec2e06c17a2db8893398d4255a
|
R 082101997f3f378fcfea5fe538ad3ab9
|
||||||
T +closed f778f58ae4ea3e16f51b94591a2c1e563dcb0cde
|
T *branch * gnu-safe-math
|
||||||
|
T *sym-gnu-safe-math *
|
||||||
|
T -sym-trunk *
|
||||||
U drh
|
U drh
|
||||||
Z ab80b4c4af6ffab14c74e7e3612d1ec8
|
Z 54548663084083c7fef96c176f102936
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
bed0eaa5f50112e64fc97a2afdc9d56cf8f5026a
|
82cbebb8ee4484f13e5f48d305e20e73063f273e
|
||||||
15
src/util.c
15
src/util.c
@@ -1279,6 +1279,10 @@ int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
|
|||||||
** overflow, leave *pA unchanged and return 1.
|
** overflow, leave *pA unchanged and return 1.
|
||||||
*/
|
*/
|
||||||
int sqlite3AddInt64(i64 *pA, i64 iB){
|
int sqlite3AddInt64(i64 *pA, i64 iB){
|
||||||
|
#if !defined(SQLITE_DISABLE_INTRINSIC) \
|
||||||
|
&& defined(__GNUC__) && GCC_VERSION>=5004000
|
||||||
|
return __builtin_add_overflow(*pA, iB, pA);
|
||||||
|
#else
|
||||||
i64 iA = *pA;
|
i64 iA = *pA;
|
||||||
testcase( iA==0 ); testcase( iA==1 );
|
testcase( iA==0 ); testcase( iA==1 );
|
||||||
testcase( iB==-1 ); testcase( iB==0 );
|
testcase( iB==-1 ); testcase( iB==0 );
|
||||||
@@ -1293,8 +1297,13 @@ int sqlite3AddInt64(i64 *pA, i64 iB){
|
|||||||
}
|
}
|
||||||
*pA += iB;
|
*pA += iB;
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
int sqlite3SubInt64(i64 *pA, i64 iB){
|
int sqlite3SubInt64(i64 *pA, i64 iB){
|
||||||
|
#if !defined(SQLITE_DISABLE_INTRINSIC) \
|
||||||
|
&& defined(__GNUC__) && GCC_VERSION>=5004000
|
||||||
|
return __builtin_sub_overflow(*pA, iB, pA);
|
||||||
|
#else
|
||||||
testcase( iB==SMALLEST_INT64+1 );
|
testcase( iB==SMALLEST_INT64+1 );
|
||||||
if( iB==SMALLEST_INT64 ){
|
if( iB==SMALLEST_INT64 ){
|
||||||
testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
|
testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
|
||||||
@@ -1304,8 +1313,13 @@ int sqlite3SubInt64(i64 *pA, i64 iB){
|
|||||||
}else{
|
}else{
|
||||||
return sqlite3AddInt64(pA, -iB);
|
return sqlite3AddInt64(pA, -iB);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
int sqlite3MulInt64(i64 *pA, i64 iB){
|
int sqlite3MulInt64(i64 *pA, i64 iB){
|
||||||
|
#if !defined(SQLITE_DISABLE_INTRINSIC) \
|
||||||
|
&& defined(__GNUC__) && GCC_VERSION>=5004000
|
||||||
|
return __builtin_mul_overflow(*pA, iB, pA);
|
||||||
|
#else
|
||||||
i64 iA = *pA;
|
i64 iA = *pA;
|
||||||
if( iB>0 ){
|
if( iB>0 ){
|
||||||
if( iA>LARGEST_INT64/iB ) return 1;
|
if( iA>LARGEST_INT64/iB ) return 1;
|
||||||
@@ -1321,6 +1335,7 @@ int sqlite3MulInt64(i64 *pA, i64 iB){
|
|||||||
}
|
}
|
||||||
*pA = iA*iB;
|
*pA = iA*iB;
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user