GCC allows arithmetic on void pointers so std::atomic<void*> does too, but the VERIFY checks in this test were commented out, probably because they failed due to using sizeof(void*) when they should have used sizeof(void), which is 1.
2013-10-30 Jonathan Wakely <jwakely....@gmail.com> * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: Fix and enable VERIFY tests. Tested x86_64-linux, committed to trunk.
commit 0224e88cccd5a4d4bf1f972a292bfc9e58d57382 Author: Jonathan Wakely <jwakely....@gmail.com> Date: Wed Oct 30 17:57:50 2013 +0000 * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: Fix and enable VERIFY tests. diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc index fa936a1..3a4377f 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc @@ -42,28 +42,28 @@ int main(void) a++; void* vp3(a); dist = reinterpret_cast<char*>(vp2) - reinterpret_cast<char*>(vp3); - // VERIFY ( std::abs(dist) == sizeof(void*)); + VERIFY ( std::abs(dist) == 1 ); // operator-- void* vp4(a); a--; void* vp5(a); dist = reinterpret_cast<char*>(vp4) - reinterpret_cast<char*>(vp5); - // VERIFY ( std::abs(dist) == sizeof(void*)); + VERIFY ( std::abs(dist) == 1 ); // operator+= void* vp6(a); a+=n; void* vp7(a); dist = reinterpret_cast<char*>(vp6) - reinterpret_cast<char*>(vp7); - // VERIFY ( std::abs(dist) == sizeof(void*) * n); + VERIFY ( std::abs(dist) == n ); // operator-= void* vp8(a); a-=n; void* vp9(a); dist = reinterpret_cast<char*>(vp8) - reinterpret_cast<char*>(vp9); - //VERIFY ( std::abs(dist) == sizeof(void*) * n); + VERIFY ( std::abs(dist) == n ); return 0; }