forked from OSchip/llvm-project
[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:
parent
1e86d637eb
commit
f668a84b58
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue