diff --git a/include/atomic b/include/atomic index 34a2a58b2..adffc354a 100644 --- a/include/atomic +++ b/include/atomic @@ -555,6 +555,9 @@ void atomic_signal_fence(memory_order m) noexcept; #if !defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP) #error is not implemented #endif +#ifdef __ALLOW_STDC_ATOMICS_IN_CXX__ +#error is incompatible with the C++ standard library +#endif #if _LIBCPP_STD_VER > 14 # define __cpp_lib_atomic_is_always_lock_free 201603L diff --git a/test/libcxx/atomics/c_compatibility.fail.cpp b/test/libcxx/atomics/c_compatibility.fail.cpp new file mode 100644 index 000000000..092687d5b --- /dev/null +++ b/test/libcxx/atomics/c_compatibility.fail.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// UNSUPPORTED: libcpp-has-no-threads +// +// + +// Test that including fails to compile when we want to use C atomics +// in C++ and have corresponding macro defined. + +// MODULES_DEFINES: __ALLOW_STDC_ATOMICS_IN_CXX__ +#ifndef __ALLOW_STDC_ATOMICS_IN_CXX__ +#define __ALLOW_STDC_ATOMICS_IN_CXX__ +#endif + +#include +// expected-error@atomic:* {{ is incompatible with the C++ standard library}} + +int main() +{ +} +