summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2015-08-19 17:21:46 +0000
committerEric Fiselier <eric@efcs.ca>2015-08-19 17:21:46 +0000
commit749adeba3d655f27abec2a3589a612a15d8be21c (patch)
tree6c7de9eac62b2185c5754850d02f5425de00f659 /libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp
parent24b64a940579cbdb33554be5eeff8b9f6a0a331a (diff)
downloadbcm5719-llvm-749adeba3d655f27abec2a3589a612a15d8be21c.tar.gz
bcm5719-llvm-749adeba3d655f27abec2a3589a612a15d8be21c.zip
[libcxx] Allow use of <atomic> in C++03. Try 3.
Summary: After putting this question up on cfe-dev I have decided that it would be best to allow the use of `<atomic>` in C++03. Although static initialization is a concern the syntax required to get it is C++11 only. Meaning that C++11 constant static initialization cannot silently break in C++03, it will always cause a syntax error. Furthermore `ATOMIC_VAR_INIT` and `ATOMIC_FLAG_INIT` remain defined in C++03 even though they cannot be used because C++03 usages will cause better error messages. The main change in this patch is to replace `__has_feature(cxx_atomic)`, which only returns true when C++ >= 11, to `__has_extension(c_atomic)` which returns true whenever clang supports the required atomic builtins. This patch adds the following macros: * `_LIBCPP_HAS_C_ATOMIC_IMP` - Defined on clang versions which provide the C `_Atomic` keyword. * `_LIBCPP_HAS_GCC_ATOMIC_IMP` - Defined on GCC > 4.7. We must use the fallback atomic implementation. * `_LIBCPP_HAS_NO_ATOMIC_HEADER` - Defined when it is not safe to include `<atomic>`. `_LIBCPP_HAS_C_ATOMIC_IMP` and `_LIBCPP_HAS_GCC_ATOMIC_IMP` are mutually exclusive, only one should be defined. If neither is defined then `<atomic>` is not implemented and including `<atomic>` will issue an error. Reviewers: chandlerc, jroelofs, mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11555 llvm-svn: 245463
Diffstat (limited to 'libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp')
-rw-r--r--libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp b/libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp
index 8a60f8196da..3a74e13faf1 100644
--- a/libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp
+++ b/libcxx/test/std/atomics/atomics.flag/atomic_flag_clear.pass.cpp
@@ -22,13 +22,13 @@
int main()
{
{
- std::atomic_flag f = ATOMIC_FLAG_INIT;
+ std::atomic_flag f(false);
f.test_and_set();
atomic_flag_clear(&f);
assert(f.test_and_set() == 0);
}
{
- volatile std::atomic_flag f = ATOMIC_FLAG_INIT;
+ volatile std::atomic_flag f(false);
f.test_and_set();
atomic_flag_clear(&f);
assert(f.test_and_set() == 0);
OpenPOWER on IntegriCloud