aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@adacore.com>2024-04-18 08:00:59 -0300
committerAlexandre Oliva <oliva@gnu.org>2024-04-18 08:03:56 -0300
commitdcf0bd14cda706be8d0c18963812beefca51df39 (patch)
tree093826a0b0fbfa272c7b9d39c2787ced278f21e3
parent5b178179e85ace01a97def40531e915c180aaeca (diff)
downloadgcc-dcf0bd14cda706be8d0c18963812beefca51df39.zip
gcc-dcf0bd14cda706be8d0c18963812beefca51df39.tar.gz
gcc-dcf0bd14cda706be8d0c18963812beefca51df39.tar.bz2
[libstdc++] [testsuite] disable SRA for compare_exchange_padding
On arm-vx7r2, the uses of as.load() as initializer get SRAed, so the padding bits in the tests are not what we might expect from full-word struct copies. I tried adding a function to perform bitwise copying, but even taking the as.load() argument by const&, we'd still construct a temporary with SRAed field-wise copying. Unable to find another way to ensure we wouldn't get a temporary, I went for disabling SRA. for libstdc++-v3/ChangeLog * testsuite/29_atomics/atomic/compare_exchange_padding.cc: Disable SRA.
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc b/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc
index 2f18d42..a608196 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc
@@ -1,6 +1,7 @@
// { dg-do run { target c++20 } }
// { dg-require-atomic-cmpxchg-word "" }
// { dg-add-options libatomic }
+// { dg-additional-options "-fno-tree-sra" }
#include <atomic>
#include <cstring>
@@ -26,10 +27,10 @@ main ()
s.s = 42;
std::atomic<S> as{ s };
- auto ts = as.load();
+ auto ts = as.load(); // SRA might prevent copying of padding bits here.
VERIFY( !compare_struct(s, ts) ); // padding cleared on construction
as.exchange(s);
- auto es = as.load();
+ auto es = as.load(); // SRA might prevent copying of padding bits here.
VERIFY( compare_struct(ts, es) ); // padding cleared on exchange
S n;