[vm/slot] Use seq_cst memory order for failure-branch of compare_exchange.
This fixes flutter engine test failure on Windows where it complained about invalid load memory order for failure branch(default=acq_rel) for this operation.
acq_rel is not allowed for failed comparison test memory order(per https://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange)
TEST=flutter/engine runtime_unittests on Windows
Change-Id: I59dd3aed04f483b2e2a82721e337b78b8e3190d3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175101
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
diff --git a/runtime/platform/atomic.h b/runtime/platform/atomic.h
index 7a966f5..98bc900 100644
--- a/runtime/platform/atomic.h
+++ b/runtime/platform/atomic.h
@@ -100,14 +100,18 @@
bool compare_exchange_weak(
T& expected, // NOLINT
T desired,
- std::memory_order order = std::memory_order_acq_rel) {
- return value_.compare_exchange_weak(expected, desired, order, order);
+ std::memory_order success_order = std::memory_order_acq_rel,
+ std::memory_order failure_order = std::memory_order_seq_cst) {
+ return value_.compare_exchange_weak(expected, desired, success_order,
+ failure_order);
}
bool compare_exchange_strong(
T& expected, // NOLINT
T desired,
- std::memory_order order = std::memory_order_acq_rel) {
- return value_.compare_exchange_strong(expected, desired, order, order);
+ std::memory_order success_order = std::memory_order_acq_rel,
+ std::memory_order failure_order = std::memory_order_seq_cst) {
+ return value_.compare_exchange_strong(expected, desired, success_order,
+ failure_order);
}
// Require explicit loads and stores.