Use the CLANG_VERSION macro to control clang-specific features.

FossilOrigin-Name: f8ebeec211483503e135104ef977b3c384a1d789
This commit is contained in:
drh 2017-01-03 20:01:24 +00:00
parent eea46aeafc
commit b94f2eccc1
5 changed files with 24 additions and 16 deletions

View File

@ -1,5 +1,5 @@
C Use\sthe\sGCC\sbuilt-in\s__sync_fetch_and_sub()\sto\smake\sthe\ssqlite3StatusDown()\nroutine\satomic,\sand\sthereby\savoid\ssome\smutexing.
D 2017-01-03T18:05:04.175
C Use\sthe\sCLANG_VERSION\smacro\sto\scontrol\sclang-specific\sfeatures.
D 2017-01-03T20:01:24.105
F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
@ -393,9 +393,9 @@ F src/shell.c 6095531aa900decdaa765e0f3993fba7153c92c1
F src/sqlite.h.in e8e2d108d82647f0a812fdb74accf91c1ec08ddc
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 8648034aa702469afb553231677306cc6492a1ae
F src/sqliteInt.h ae113e82230109e0964c3d93efed55700d8eec5e
F src/sqliteInt.h 898cfcd9e0a40df15258cd86255bf9bee411e36d
F src/sqliteLimit.h c0373387c287c8d0932510b5547ecde31b5da247
F src/status.c 56174fdb52d1e8a0e9f3976e82d06a5cd0a1c2c3
F src/status.c 1b1e64fbce135bc178a6481433422a32f433ba37
F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
F src/tclsqlite.c 205c66b9b81d97978a155caa3ef5be9c4de2b174
F src/test1.c 8a98191a1da8e100f77cdb5cc716df67d405028d
@ -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 8c3d2aa11bacd984caf8067ed5b857de3fb53b81
F src/util.c a88b0466fddf445ce752226d4698ca3faada620a
F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16
F src/vdbe.c 88bd6c32b333580d2661ac3afe33369757fb1522
F src/vdbe.h 50ee139f9c68fff91be1d717ed3a6abbd496919c
@ -1541,7 +1541,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 82cbebb8ee4484f13e5f48d305e20e73063f273e
R 799d9858a7a6a1551985c372ac93d54d
P f69ce75b3d94331fdbfa2f3a27d61db24c285d2b
R 576384b00d5b84002b3bf9bfa5fd1c23
U drh
Z efd83d8962e4e3c856ce381388686c40
Z df7fbae7b850ad1f1ec95f7decb0f63b

View File

@ -1 +1 @@
f69ce75b3d94331fdbfa2f3a27d61db24c285d2b
f8ebeec211483503e135104ef977b3c384a1d789

View File

@ -110,6 +110,14 @@
# define GCC_VERSION 0
#endif
/* What version of CLANG is being used. 0 means GCC is not being used */
#ifdef __clang__
# define CLANG_VERSION \
(__clang_major__*1000000+__clang_minor__*1000+__clang_patchlevel__)
#else
# define CLANG_VERSION 0
#endif
/* Needed for various definitions... */
#if defined(__GNUC__) && !defined(_GNU_SOURCE)
# define _GNU_SOURCE
@ -233,7 +241,7 @@
** the sqlite3StatusDown() function is threadsafe.
*/
#if !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=4004000
&& (GCC_VERSION>=4004000 || CLANG_VERSION>=3000000)
# define SQLITE_ATOMIC_STATUS_DOWN 1
#endif

View File

@ -102,7 +102,7 @@ void sqlite3StatusDown(int op, int N){
assert( N>=0 );
assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
#if !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=4004000
&& (GCC_VERSION>=4004000 || CLANG_VERSION>=3000000)
(void)__sync_fetch_and_sub(&wsdStat.nowValue[op], N);
#else
assert( op>=0 && op<ArraySize(statMutex) );

View File

@ -1141,7 +1141,7 @@ u32 sqlite3Get4byte(const u8 *p){
memcpy(&x,p,4);
return x;
#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=4003000
&& (GCC_VERSION>=4003000 || CLANG_VERSION>=3000000)
u32 x;
memcpy(&x,p,4);
return __builtin_bswap32(x);
@ -1159,7 +1159,7 @@ void sqlite3Put4byte(unsigned char *p, u32 v){
#if SQLITE_BYTEORDER==4321
memcpy(p,&v,4);
#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=4003000
&& (GCC_VERSION>=4003000 || CLANG_VERSION>=3000000)
u32 x = __builtin_bswap32(v);
memcpy(p,&x,4);
#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \
@ -1280,7 +1280,7 @@ int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
*/
int sqlite3AddInt64(i64 *pA, i64 iB){
#if !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=5004000
&& (GCC_VERSION>=5004000 || CLANG_VERSION>=4000000)
return __builtin_add_overflow(*pA, iB, pA);
#else
i64 iA = *pA;
@ -1301,7 +1301,7 @@ int sqlite3AddInt64(i64 *pA, i64 iB){
}
int sqlite3SubInt64(i64 *pA, i64 iB){
#if !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=5004000
&& (GCC_VERSION>=5004000 || CLANG_VERSION>=4000000)
return __builtin_sub_overflow(*pA, iB, pA);
#else
testcase( iB==SMALLEST_INT64+1 );
@ -1317,7 +1317,7 @@ int sqlite3SubInt64(i64 *pA, i64 iB){
}
int sqlite3MulInt64(i64 *pA, i64 iB){
#if !defined(SQLITE_DISABLE_INTRINSIC) \
&& defined(__GNUC__) && GCC_VERSION>=5004000
&& (GCC_VERSION>=5004000 || CLANG_VERSION>=4000000)
return __builtin_mul_overflow(*pA, iB, pA);
#else
i64 iA = *pA;