|
From: <sv...@va...> - 2011-03-24 20:28:04
|
Author: bart Date: 2011-03-24 20:27:54 +0000 (Thu, 24 Mar 2011) New Revision: 11665 Log: Test separately whether g++ and/or gcc support built-in functions for atomic memory access. Apparently for some distributions gcc 4.2 has that support but g++ 4.2 doesn't. This patch has been supplied by Florian Krohm. Modified: trunk/configure.in trunk/drd/tests/Makefile.am Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2011-03-24 11:34:12 UTC (rev 11664) +++ trunk/configure.in 2011-03-24 20:27:54 UTC (rev 11665) @@ -1848,7 +1848,7 @@ [ ac_have_builtin_atomic=yes AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_BUILTIN_ATOMIC, 1, [Define to 1 if gcc supports __sync_bool_compare_and_swap() a.o.]) + AC_DEFINE(HAVE_BUILTIN_ATOMIC, 1, [Define to 1 if gcc supports __sync_bool_compare_and_swap() and __sync_add_and_fetch()]) ], [ ac_have_builtin_atomic=no @@ -1859,7 +1859,34 @@ AM_CONDITIONAL([HAVE_BUILTIN_ATOMIC], [test x$ac_have_builtin_atomic = xyes]) +# does g++ have built-in functions for atomic memory access ? +AC_MSG_CHECKING([if g++ supports __sync_bool_compare_and_swap]) +safe_CXXFLAGS=$CXXFLAGS +CXXFLAGS="$mflag_primary" + +AC_LANG_PUSH(C++) +AC_TRY_LINK(, +[ + int variable = 1; + return (__sync_bool_compare_and_swap(&variable, 1, 2) + && __sync_add_and_fetch(&variable, 1) ? 1 : 0) +], +[ + ac_have_builtin_atomic_cxx=yes + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_BUILTIN_ATOMIC_CXX, 1, [Define to 1 if g++ supports __sync_bool_compare_and_swap() and __sync_add_and_fetch()]) +], +[ + ac_have_builtin_atomic_cxx=no + AC_MSG_RESULT([no]) +]) +AC_LANG_POP(C++) + +CXXFLAGS=$safe_CXXFLAGS + +AM_CONDITIONAL([HAVE_BUILTIN_ATOMIC_CXX], [test x$ac_have_builtin_atomic_cxx = xyes]) + #---------------------------------------------------------------------------- # Ok. We're done checking. #---------------------------------------------------------------------------- Modified: trunk/drd/tests/Makefile.am =================================================================== --- trunk/drd/tests/Makefile.am 2011-03-24 11:34:12 UTC (rev 11664) +++ trunk/drd/tests/Makefile.am 2011-03-24 20:27:54 UTC (rev 11665) @@ -323,9 +323,13 @@ check_PROGRAMS += \ annotate_barrier \ annotate_rwlock \ + atomic_var \ + circular_buffer +endif + +if HAVE_BUILTIN_ATOMIC_CXX +check_PROGRAMS += \ annotate_smart_pointer \ - atomic_var \ - circular_buffer \ tsan_unittest endif |