Skip to content

Commit d1fadeb

Browse files
committed
configury: enhance C11 detection
clang 5.0 on trusty is busted with respect to C11 atomics This can be evidenced with the simple program below. This test was added into OPAL_PROG_CC_C11_HELPER() and disable C11 atomics if it fails. _Atomic uint32_t a; uint32_t b; atomic_fetch_xor_explicit(&a, b, memory_order_relaxed); Refs. #6264 Signed-off-by: Gilles Gouaillardet <gilles@rist.or.jp>
1 parent ae2bda9 commit d1fadeb

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

config/opal_setup_cc.m4

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dnl Copyright (c) 2007-2009 Sun Microsystems, Inc. All rights reserved.
1414
dnl Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
1515
dnl Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
1616
dnl reserved.
17-
dnl Copyright (c) 2015-2018 Research Organization for Information Science
17+
dnl Copyright (c) 2015-2019 Research Organization for Information Science
1818
dnl and Technology (RIST). All rights reserved.
1919
dnl $COPYRIGHT$
2020
dnl
@@ -59,7 +59,11 @@ AC_DEFUN([OPAL_PROG_CC_C11_HELPER],[
5959
OPAL_CC_HELPER([if $CC $1 supports C11 _Static_assert], [opal_prog_cc_c11_helper__static_assert_available],
6060
[[#include <stdint.h>]],[[_Static_assert(sizeof(int64_t) == 8, "WTH");]])
6161

62-
AS_IF([test $opal_prog_cc_c11_helper__Thread_local_available -eq 1 && test $opal_prog_cc_c11_helper_atomic_var_available -eq 1],
62+
OPAL_CC_HELPER([if $CC $1 supports C11 atomic_fetch_xor_explicit], [opal_prog_cc_c11_helper_atomic_fetch_xor_explicit_available],
63+
[[#include <stdatomic.h>
64+
#include <stdint.h>]],[[_Atomic uint32_t a; uint32_t b; atomic_fetch_xor_explicit(&a, b, memory_order_relaxed);]])
65+
66+
AS_IF([test $opal_prog_cc_c11_helper__Thread_local_available -eq 1 && test $opal_prog_cc_c11_helper_atomic_var_available -eq 1 && test $opal_prog_cc_c11_helper_atomic_fetch_xor_explicit_available -eq 1],
6367
[$2],
6468
[$3])
6569

@@ -127,7 +131,7 @@ AC_DEFUN([OPAL_SETUP_CC],[
127131
AC_REQUIRE([_OPAL_PROG_CC])
128132
AC_REQUIRE([AM_PROG_CC_C_O])
129133

130-
OPAL_VAR_SCOPE_PUSH([opal_prog_cc_c11_helper__Thread_local_available opal_prog_cc_c11_helper_atomic_var_available opal_prog_cc_c11_helper__Atomic_available opal_prog_cc_c11_helper__static_assert_available opal_prog_cc_c11_helper__Generic_available opal_prog_cc__thread_available])
134+
OPAL_VAR_SCOPE_PUSH([opal_prog_cc_c11_helper__Thread_local_available opal_prog_cc_c11_helper_atomic_var_available opal_prog_cc_c11_helper__Atomic_available opal_prog_cc_c11_helper__static_assert_available opal_prog_cc_c11_helper__Generic_available opal_prog_cc__thread_available opal_prog_cc_c11_helper_atomic_fetch_xor_explicit_available])
131135

132136
# AC_PROG_CC_C99 changes CC (instead of CFLAGS) so save CC (without c99
133137
# flags) for use in our wrappers.

0 commit comments

Comments
 (0)