summaryrefslogtreecommitdiff
path: root/tests/stdatomic_test.cpp
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2014-08-28 15:21:32 -0700
committerHans Boehm <hboehm@google.com>2014-08-29 17:03:26 -0700
commit32429606bf696d3b2ca555f132a0d60c566d0bd0 (patch)
treea78cacfc6e28d35fdd41b0b4d6682b22b49939f2 /tests/stdatomic_test.cpp
parentbbe06e0da1742e9bdc52d3246ffa9f2ab3ce999a (diff)
Make stdatomic.h work with gcc4.6 host compiler
This is needed to make L work correctly, and bionic tests pass again, after applying the equivalent of commit 00aaea364501b3b0abe58dae461136159df1e356 there. It makes the preexisting code that uses __sync implementations much more useful, although we should no longer be exercising that code in AOSP. Specifically fixes: We were invoking __has_extension and __has_builtin for GCC compilations. They're clang specific. Restructured the tests. The __sync implementation was not defining the LOCK_FREE macros. ATOMIC_VAR_INIT was using named field initializations. These are a C, not C++, feature, that is not supported by g++ 4.6. The stdatomic bionic test still failed with 4.6 and glibc with our questionable LOCK_FREE macro implementation. Don't run that piece with 4.6. In L, this is a prerequisite for fixing: Bug:16880454 Bug:16513433 Change-Id: I9b61e42307f96a114dce7552b6ead4ad1c544eab
Diffstat (limited to 'tests/stdatomic_test.cpp')
-rw-r--r--tests/stdatomic_test.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/tests/stdatomic_test.cpp b/tests/stdatomic_test.cpp
index 222bd9c80..b7fb19b0d 100644
--- a/tests/stdatomic_test.cpp
+++ b/tests/stdatomic_test.cpp
@@ -63,14 +63,17 @@ TEST(stdatomic, atomic_signal_fence) {
TEST(stdatomic, atomic_is_lock_free) {
atomic_char small;
- atomic_intmax_t big;
ASSERT_TRUE(atomic_is_lock_free(&small));
+#if defined(__clang__) || __GNUC_PREREQ(4, 7)
+ // Otherwise stdatomic.h doesn't handle this.
+ atomic_intmax_t big;
// atomic_intmax_t(size = 64) is not lock free on mips32.
#if defined(__mips__) && !defined(__LP64__)
ASSERT_FALSE(atomic_is_lock_free(&big));
#else
ASSERT_TRUE(atomic_is_lock_free(&big));
#endif
+#endif
}
TEST(stdatomic, atomic_flag) {