summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorDavid Chisnall <csdavec@swan.ac.uk>2012-04-05 13:48:16 +0000
committerDavid Chisnall <csdavec@swan.ac.uk>2012-04-05 13:48:16 +0000
commit4fa71de024644bad1a90132a830dd027471e2d4b (patch)
tree14c16f2525a3c5e97e4f3c3ce95d811de3edb457 /libcxx
parentca917f5342a4cac973a423763c59ac55276387a5 (diff)
downloadbcm5719-llvm-4fa71de024644bad1a90132a830dd027471e2d4b.tar.gz
bcm5719-llvm-4fa71de024644bad1a90132a830dd027471e2d4b.zip
Fix the remaining atomic tests, all of which were wrong for the case where a
compare-and-exchange failed (it should update the expected value to the current value, and the tests were checking that it didn't...). Results of the atomics part of the test suite on FreeBSD with clang trunk and the atomic.c from compiler-rt (currently kludged into the test, not installed properly): **************************************************** Results for /root/libc++/test/atomics: using clang version 3.1 (trunk 153415) Target: x86_64-unknown-freebsd10.0 Thread model: posix with -std=c++0x -stdlib=libc++ -pthread /tmp/atomic.o ---------------------------------------------------- sections without tests : 0 sections with failures : 0 sections without failures: 14 + ---- total number of sections : 14 ---------------------------------------------------- number of tests failed : 0 number of tests passed : 52 + ---- total number of tests : 52 **************************************************** Yay! llvm-svn: 154095
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/test/atomics/atomics.types.generic/address.pass.cpp4
-rw-r--r--libcxx/test/atomics/atomics.types.generic/bool.pass.cpp10
-rw-r--r--libcxx/test/atomics/atomics.types.generic/integral.pass.cpp4
-rw-r--r--libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp4
-rw-r--r--libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp4
-rw-r--r--libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp4
-rw-r--r--libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp4
7 files changed, 18 insertions, 16 deletions
diff --git a/libcxx/test/atomics/atomics.types.generic/address.pass.cpp b/libcxx/test/atomics/atomics.types.generic/address.pass.cpp
index bf82ac4b3b6..b43959b4d57 100644
--- a/libcxx/test/atomics/atomics.types.generic/address.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.generic/address.pass.cpp
@@ -96,14 +96,14 @@ do_test()
assert(x == T(3));
assert(obj.compare_exchange_weak(x, T(1)) == false);
assert(obj == T(2));
- assert(x == T(1));
+ assert(x == T(2));
x = T(2);
assert(obj.compare_exchange_strong(x, T(1)) == true);
assert(obj == T(1));
assert(x == T(2));
assert(obj.compare_exchange_strong(x, T(0)) == false);
assert(obj == T(1));
- assert(x == T(0));
+ assert(x == T(1));
assert((obj = T(0)) == T(0));
assert(obj == T(0));
obj = T(2*sizeof(X));
diff --git a/libcxx/test/atomics/atomics.types.generic/bool.pass.cpp b/libcxx/test/atomics/atomics.types.generic/bool.pass.cpp
index c1465546f1d..a9002ea48de 100644
--- a/libcxx/test/atomics/atomics.types.generic/bool.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.generic/bool.pass.cpp
@@ -78,8 +78,9 @@ int main()
assert(obj.compare_exchange_weak(x, true,
std::memory_order_seq_cst) == false);
assert(obj == false);
- assert(x == true);
+ assert(x == false);
obj.store(true);
+ x = true;
assert(obj.compare_exchange_weak(x, false,
std::memory_order_seq_cst,
std::memory_order_seq_cst) == true);
@@ -93,7 +94,7 @@ int main()
assert(obj.compare_exchange_strong(x, true,
std::memory_order_seq_cst) == false);
assert(obj == false);
- assert(x == true);
+ assert(x == false);
x = true;
obj.store(true);
assert(obj.compare_exchange_strong(x, false,
@@ -132,8 +133,9 @@ int main()
assert(obj.compare_exchange_weak(x, true,
std::memory_order_seq_cst) == false);
assert(obj == false);
- assert(x == true);
+ assert(x == false);
obj.store(true);
+ x = true;
assert(obj.compare_exchange_weak(x, false,
std::memory_order_seq_cst,
std::memory_order_seq_cst) == true);
@@ -147,7 +149,7 @@ int main()
assert(obj.compare_exchange_strong(x, true,
std::memory_order_seq_cst) == false);
assert(obj == false);
- assert(x == true);
+ assert(x == false);
x = true;
obj.store(true);
assert(obj.compare_exchange_strong(x, false,
diff --git a/libcxx/test/atomics/atomics.types.generic/integral.pass.cpp b/libcxx/test/atomics/atomics.types.generic/integral.pass.cpp
index ff204ee6179..fc678bcfae4 100644
--- a/libcxx/test/atomics/atomics.types.generic/integral.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.generic/integral.pass.cpp
@@ -114,14 +114,14 @@ do_test()
assert(x == T(3));
assert(obj.compare_exchange_weak(x, T(1)) == false);
assert(obj == T(2));
- assert(x == T(1));
+ assert(x == T(2));
x = T(2);
assert(obj.compare_exchange_strong(x, T(1)) == true);
assert(obj == T(1));
assert(x == T(2));
assert(obj.compare_exchange_strong(x, T(0)) == false);
assert(obj == T(1));
- assert(x == T(0));
+ assert(x == T(1));
assert((obj = T(0)) == T(0));
assert(obj == T(0));
assert(obj++ == T(0));
diff --git a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
index ee78eb22b96..2223de15511 100644
--- a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
@@ -34,7 +34,7 @@ test()
assert(t == T(1));
assert(std::atomic_compare_exchange_strong(&a, &t, T(3)) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
{
typedef std::atomic<T> A;
@@ -46,7 +46,7 @@ test()
assert(t == T(1));
assert(std::atomic_compare_exchange_strong(&a, &t, T(3)) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
}
diff --git a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
index d7da071ece4..bc37ac45b9a 100644
--- a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
@@ -39,7 +39,7 @@ test()
assert(std::atomic_compare_exchange_strong_explicit(&a, &t, T(3),
std::memory_order_seq_cst, std::memory_order_seq_cst) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
{
typedef std::atomic<T> A;
@@ -53,7 +53,7 @@ test()
assert(std::atomic_compare_exchange_strong_explicit(&a, &t, T(3),
std::memory_order_seq_cst, std::memory_order_seq_cst) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
}
diff --git a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
index b8757042333..56ba572b7aa 100644
--- a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
@@ -34,7 +34,7 @@ test()
assert(t == T(1));
assert(std::atomic_compare_exchange_weak(&a, &t, T(3)) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
{
typedef std::atomic<T> A;
@@ -46,7 +46,7 @@ test()
assert(t == T(1));
assert(std::atomic_compare_exchange_weak(&a, &t, T(3)) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
}
diff --git a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
index 39582e789d8..b3a804b7d1d 100644
--- a/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
+++ b/libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
@@ -39,7 +39,7 @@ test()
assert(std::atomic_compare_exchange_weak_explicit(&a, &t, T(3),
std::memory_order_seq_cst, std::memory_order_seq_cst) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
{
typedef std::atomic<T> A;
@@ -53,7 +53,7 @@ test()
assert(std::atomic_compare_exchange_weak_explicit(&a, &t, T(3),
std::memory_order_seq_cst, std::memory_order_seq_cst) == false);
assert(a == T(2));
- assert(t == T(3));
+ assert(t == T(2));
}
}
OpenPOWER on IntegriCloud