From: drh Date: Tue, 3 Jan 2017 17:33:43 +0000 (+0000) Subject: Make use of the __buildin_OP_overflow() functions from GCC when doing X-Git-Tag: version-3.17.0~139^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a47761e0dfa3d62feae632d90c6fb22d1d0df3f;p=thirdparty%2Fsqlite.git Make use of the __buildin_OP_overflow() functions from GCC when doing 64-bit signed integer arithmetic. FossilOrigin-Name: 82cbebb8ee4484f13e5f48d305e20e73063f273e --- diff --git a/manifest b/manifest index cff39d7dca..7ec2dbb8d2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sexperimental\saffinity()\sSQL\sfunction\swhen\sSQLITE_DEBUG\sis\sdefined. -D 2017-01-03T14:45:35.313 +C Make\suse\sof\sthe\s__buildin_OP_overflow()\sfunctions\sfrom\sGCC\swhen\sdoing\n64-bit\ssigned\sinteger\sarithmetic. +D 2017-01-03T17:33:43.523 F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da @@ -453,7 +453,7 @@ F src/treeview.c 4e44ade3bfe59d82005039f72e09333ce2b4162c F src/trigger.c c9f0810043b265724fdb1bdd466894f984dfc182 F src/update.c 1da7c462110bffed442a42884cb0d528c1db46d8 F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c -F src/util.c 1534060bc034cdc51381c040c8bd6252dbcb64c9 +F src/util.c 8c3d2aa11bacd984caf8067ed5b857de3fb53b81 F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16 F src/vdbe.c 88bd6c32b333580d2661ac3afe33369757fb1522 F src/vdbe.h 50ee139f9c68fff91be1d717ed3a6abbd496919c @@ -1541,8 +1541,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 36944be6be5c42096f5da84187ff203af26b08ae f778f58ae4ea3e16f51b94591a2c1e563dcb0cde -R 4de702ec2e06c17a2db8893398d4255a -T +closed f778f58ae4ea3e16f51b94591a2c1e563dcb0cde +P bed0eaa5f50112e64fc97a2afdc9d56cf8f5026a +R 082101997f3f378fcfea5fe538ad3ab9 +T *branch * gnu-safe-math +T *sym-gnu-safe-math * +T -sym-trunk * U drh -Z ab80b4c4af6ffab14c74e7e3612d1ec8 +Z 54548663084083c7fef96c176f102936 diff --git a/manifest.uuid b/manifest.uuid index 1ef467555f..f1ed017db3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bed0eaa5f50112e64fc97a2afdc9d56cf8f5026a \ No newline at end of file +82cbebb8ee4484f13e5f48d305e20e73063f273e \ No newline at end of file diff --git a/src/util.c b/src/util.c index b9684c6c01..4a2266ee69 100644 --- a/src/util.c +++ b/src/util.c @@ -1279,6 +1279,10 @@ int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ ** overflow, leave *pA unchanged and return 1. */ 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; testcase( iA==0 ); testcase( iA==1 ); testcase( iB==-1 ); testcase( iB==0 ); @@ -1293,8 +1297,13 @@ int sqlite3AddInt64(i64 *pA, i64 iB){ } *pA += iB; return 0; +#endif } 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 ); if( iB==SMALLEST_INT64 ){ testcase( (*pA)==(-1) ); testcase( (*pA)==0 ); @@ -1304,8 +1313,13 @@ int sqlite3SubInt64(i64 *pA, i64 iB){ }else{ return sqlite3AddInt64(pA, -iB); } +#endif } 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; if( iB>0 ){ if( iA>LARGEST_INT64/iB ) return 1; @@ -1321,6 +1335,7 @@ int sqlite3MulInt64(i64 *pA, i64 iB){ } *pA = iA*iB; return 0; +#endif } /*