+2011-12-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/atomic_base.h (__calculate_memory_order): Rename to...
+ (__cmpexch_failure_order): This, and rewrite as constexpr function.
+ (compare_exchange_strong, compare_exchange_weak): Use it.
+ * include/std/atomic (compare_exchange_strong, compare_exchange_weak):
+ Likewise.
+
2011-12-07 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/51386
memory_order_seq_cst
} memory_order;
- inline memory_order
- __calculate_memory_order(memory_order __m) noexcept
+ // Drop release ordering as per [atomics.types.operations.req]/21
+ constexpr memory_order
+ __cmpexch_failure_order(memory_order __m) noexcept
{
- const bool __cond1 = __m == memory_order_release;
- const bool __cond2 = __m == memory_order_acq_rel;
- memory_order __mo1(__cond1 ? memory_order_relaxed : __m);
- memory_order __mo2(__cond2 ? memory_order_acquire : __mo1);
- return __mo2;
+ return __m == memory_order_acq_rel ? memory_order_acquire
+ : __m == memory_order_release ? memory_order_relaxed : __m;
}
inline void
memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_weak(__i1, __i2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_weak(__i1, __i2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_strong(__i1, __i2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_strong(__i1, __i2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
__int_type
memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_weak(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_weak(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
memory_order __m = memory_order_seq_cst) noexcept
{
return _M_b.compare_exchange_strong(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
bool
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return _M_b.compare_exchange_strong(__p1, __p2, __m,
- __calculate_memory_order(__m));
+ __cmpexch_failure_order(__m));
}
__pointer_type