mirror of
https://github.com/intel/llvm.git
synced 2026-02-06 06:31:50 +08:00
[scudo][standalone] Remove unused atomic_compare_exchange_weak
`atomic_compare_exchange_weak` is unused in Scudo, and its associated
test is actually wrong since the weak variant is allowed to fail
spuriously (thanks Roland).
This lead to flakes such as:
```
[ RUN ] ScudoAtomicTest.AtomicCompareExchangeTest
../../zircon/third_party/scudo/src/tests/atomic_test.cpp:98: Failure: Expected atomic_compare_exchange_weak(reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed) is true.
Expected: true
Which is: 01
Actual : atomic_compare_exchange_weak(reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed)
Which is: 00
../../zircon/third_party/scudo/src/tests/atomic_test.cpp💯 Failure: Expected atomic_compare_exchange_weak( reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed) is false.
Expected: false
Which is: 00
Actual : atomic_compare_exchange_weak( reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed)
Which is: 01
../../zircon/third_party/scudo/src/tests/atomic_test.cpp:101: Failure: Expected OldVal == NewVal.
Expected: NewVal
Which is: 24
Actual : OldVal
Which is: 42
[ FAILED ] ScudoAtomicTest.AtomicCompareExchangeTest (0 ms)
[----------] 2 tests from ScudoAtomicTest (1 ms total)
```
So I am removing this, if someone ever needs the weak variant, feel
free to add it back with a test that is not as terrible. This test was
initially ported from sanitizer_common, but their weak version calls
the strong version, so it works for them.
Differential Revision: https://reviews.llvm.org/D88443
This commit is contained in:
@@ -106,14 +106,6 @@ inline bool atomic_compare_exchange_strong(volatile T *A, typename T::Type *Cmp,
|
||||
__ATOMIC_RELAXED);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool atomic_compare_exchange_weak(volatile T *A, typename T::Type *Cmp,
|
||||
typename T::Type Xchg,
|
||||
memory_order MO) {
|
||||
return __atomic_compare_exchange(&A->ValDoNotUse, Cmp, &Xchg, true, MO,
|
||||
__ATOMIC_RELAXED);
|
||||
}
|
||||
|
||||
// Clutter-reducing helpers.
|
||||
|
||||
template <typename T>
|
||||
|
||||
@@ -80,26 +80,14 @@ TEST(ScudoAtomicTest, AtomicStoreLoad) {
|
||||
|
||||
template <typename T> void checkAtomicCompareExchange() {
|
||||
typedef typename T::Type Type;
|
||||
{
|
||||
Type OldVal = 42;
|
||||
Type NewVal = 24;
|
||||
Type V = OldVal;
|
||||
EXPECT_TRUE(atomic_compare_exchange_strong(
|
||||
reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed));
|
||||
EXPECT_FALSE(atomic_compare_exchange_strong(
|
||||
reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed));
|
||||
EXPECT_EQ(NewVal, OldVal);
|
||||
}
|
||||
{
|
||||
Type OldVal = 42;
|
||||
Type NewVal = 24;
|
||||
Type V = OldVal;
|
||||
EXPECT_TRUE(atomic_compare_exchange_weak(reinterpret_cast<T *>(&V), &OldVal,
|
||||
Type OldVal = 42;
|
||||
Type NewVal = 24;
|
||||
Type V = OldVal;
|
||||
EXPECT_TRUE(atomic_compare_exchange_strong(reinterpret_cast<T *>(&V), &OldVal,
|
||||
NewVal, memory_order_relaxed));
|
||||
EXPECT_FALSE(atomic_compare_exchange_weak(
|
||||
reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed));
|
||||
EXPECT_EQ(NewVal, OldVal);
|
||||
}
|
||||
EXPECT_FALSE(atomic_compare_exchange_strong(
|
||||
reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed));
|
||||
EXPECT_EQ(NewVal, OldVal);
|
||||
}
|
||||
|
||||
TEST(ScudoAtomicTest, AtomicCompareExchangeTest) {
|
||||
|
||||
Reference in New Issue
Block a user