rust-highfive · GitHub

Conversation

@Amanieu

@Amanieu

@Amanieu

@Amanieu Amanieu changed the title Reserve Ordering::Consume for future extension Prevent exhaustive matching of Ordering to allow for future extension

Oct 23, 2016

sophiajt pushed a commit to sophiajt/rust that referenced this pull request

Nov 2, 2016

Jonathan Turner

Prevent exhaustive matching of Ordering to allow for future extension
The C++11 atomic memory model defines a `memory_order_consume` ordering which is generally equivalent to `memory_order_acquire` but can allow better code generation by avoiding memory barrier instructions. Most compilers (including LLVM) currently do not implement this ordering directly and instead treat it identically to `memory_order_acquire`, including adding a memory barrier instruction.
There is currently [work](http://open-std.org/Jtc1/sc22/wg21/docs/papers/2016/p0098r1.pdf) to support consume ordering in compilers, and it would be a shame if Rust did not support this. This PR therefore reserves a `__Nonexhaustive` variant in `Ordering` so that adding a new ordering is not a breaking change in the future.
This is a [breaking-change] since it disallows exhaustive matching on `Ordering`, however a search of all Rust code on Github shows that there is no code that does this. This makes sense since `Ordering` is typically only used as a parameter to an atomic operation.

Merged

bors added a commit that referenced this pull request

Nov 2, 2016

@bors

Read the original on github.com ↗