diff options
author | Alexandre Oliva <oliva@adacore.com> | 2024-04-18 08:00:59 -0300 |
---|---|---|
committer | Alexandre Oliva <oliva@gnu.org> | 2024-04-18 08:03:56 -0300 |
commit | dcf0bd14cda706be8d0c18963812beefca51df39 (patch) | |
tree | 093826a0b0fbfa272c7b9d39c2787ced278f21e3 | |
parent | 5b178179e85ace01a97def40531e915c180aaeca (diff) | |
download | gcc-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.cc | 5 |
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; |