From 9d5507f7a2701395e1d5c121bd877bb9066ee6ea Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Wed, 5 Dec 2007 10:51:28 +0000 Subject: [PATCH] check that the version of __sync_sub_and_fetch that returns a value is supported, not just the void one git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50480 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- build/aclocal/atomic_builtins.m4 | 7 +++++-- configure | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/build/aclocal/atomic_builtins.m4 b/build/aclocal/atomic_builtins.m4 index bf2bcd17e3..8366eb3ef4 100644 --- a/build/aclocal/atomic_builtins.m4 +++ b/build/aclocal/atomic_builtins.m4 @@ -6,14 +6,17 @@ AC_DEFUN([WX_ATOMIC_BUILTINS], [ AC_REQUIRE([AC_PROG_CC]) if test -n "$GCC"; then - AC_MSG_CHECKING([for __sync_fetch_* builtins]) + AC_MSG_CHECKING([for __sync_fetch_and_add and __sync_sub_and_fetch builtins]) AC_CACHE_VAL(wx_cv_cc_gcc_atomic_builtins, [ AC_TRY_LINK( [], [ unsigned int value=0; - __sync_fetch_and_add(&value, 1); + /* wxAtomicInc doesn't use return value here */ + __sync_fetch_and_add(&value, 2); __sync_sub_and_fetch(&value, 1); + /* but wxAtomicDec does, so mimic that: */ + unsigned int r2 = __sync_sub_and_fetch(&value, 1); ], wx_cv_cc_gcc_atomic_builtins=yes, wx_cv_cc_gcc_atomic_builtins=no) diff --git a/configure b/configure index 56ccf84904..9ef0e3dfba 100755 --- a/configure +++ b/configure @@ -24772,8 +24772,8 @@ fi if test -n "$GCC"; then - { echo "$as_me:$LINENO: checking for __sync_fetch_* builtins" >&5 -echo $ECHO_N "checking for __sync_fetch_* builtins... $ECHO_C" >&6; } + { echo "$as_me:$LINENO: checking for __sync_fetch_and_add and __sync_sub_and_fetch builtins" >&5 +echo $ECHO_N "checking for __sync_fetch_and_add and __sync_sub_and_fetch builtins... $ECHO_C" >&6; } if test "${wx_cv_cc_gcc_atomic_builtins+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else @@ -24790,8 +24790,11 @@ main () { unsigned int value=0; - __sync_fetch_and_add(&value, 1); + /* wxAtomicInc doesn't use return value here */ + __sync_fetch_and_add(&value, 2); __sync_sub_and_fetch(&value, 1); + /* but wxAtomicDec does, so mimic that: */ + unsigned int r2 = __sync_sub_and_fetch(&value, 1); ; return 0; -- 2.45.2