Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tweak and stabilize AtomicN::fetch_update #71843

Merged
merged 2 commits into from
May 29, 2020

Conversation

sfackler
Copy link
Member

@sfackler sfackler commented May 3, 2020

The fetch_update method implements a compare-and-swap loop to update the value in an atomic to an arbitrary value computed by a closure.

I've applied a few tweaks suggested by @mystor in this comment on the tracking issue: #48655 (comment). Specifically, the load and store ordering arguments have been swapped to match with the orderings of compare_exchange, and the closure has been moved from the first to last argument.

Moving the closure to the last argument is a change away from other methods on the atomic types which place the ordering(s) last, but matches with the broad convention that closure arguments come last in functions. In particular, rustfmt style lays calls with multi-line closures out more cleanly when the closure comes last.

@sfackler sfackler added the T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. label May 3, 2020
@rust-highfive
Copy link
Collaborator

r? @shepmaster

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label May 3, 2020
@sfackler
Copy link
Member Author

sfackler commented May 3, 2020

@rfcbot fcp merge

@rfcbot
Copy link

rfcbot commented May 3, 2020

Team member @sfackler has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

@rfcbot rfcbot added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. labels May 3, 2020
@jonas-schievink jonas-schievink added the relnotes Marks issues that should be documented in the release notes of the next release. label May 3, 2020
@jonas-schievink jonas-schievink added this to the 1.45 milestone May 3, 2020
@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
========================== Starting Command Output ===========================
[command]/bin/bash --noprofile --norc /home/vsts/work/_temp/0012ab3e-1442-4f26-9a7c-d303a67707fa.sh

##[section]Finishing: Disable git automatic line ending conversion
##[section]Starting: Checkout rust-lang/rust@refs/pull/71843/merge to s
Task         : Get sources
Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
Version      : 1.0.0
Author       : Microsoft
---
##[command]git remote add origin https://github.com/rust-lang/rust
##[command]git config gc.auto 0
##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
##[command]git config --get-all http.proxy
##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/71843/merge:refs/remotes/pull/71843/merge
---
 ---> f7353ccad5b1
Step 6/7 : ENV RUN_CHECK_WITH_PARALLEL_QUERIES 1
 ---> Using cache
 ---> ed38efbaa060
Step 7/7 : ENV SCRIPT python3 ../x.py test src/tools/expand-yaml-anchors &&            python3 ../x.py check --target=i686-pc-windows-gnu --host=i686-pc-windows-gnu &&            python3 ../x.py build --stage 0 src/tools/build-manifest &&            python3 ../x.py test --stage 0 src/tools/compiletest &&            python3 ../x.py test src/tools/tidy &&            /scripts/validate-toolstate.sh
 ---> c5008ef7ae8e
Successfully built c5008ef7ae8e
Successfully tagged rust-ci:latest
Built container sha256:c5008ef7ae8e94d7ef502e3cef26e61208e14ebdb36913f3a8bb86291bd6430b
---
Checking clippy artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
Checking std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
   Compiling cc v1.0.50
    Checking core v0.0.0 (/checkout/src/libcore)
error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2009 | / atomic_int! {
2010 | |     cfg(target_has_atomic = "8"),
2011 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2012 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2024 | |     i8 AtomicI8 ATOMIC_I8_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2027 | / atomic_int! {
2028 | |     cfg(target_has_atomic = "8"),
2029 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2030 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2042 | |     u8 AtomicU8 ATOMIC_U8_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2045 | / atomic_int! {
2046 | |     cfg(target_has_atomic = "16"),
2047 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2048 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2060 | |     i16 AtomicI16 ATOMIC_I16_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2063 | / atomic_int! {
2064 | |     cfg(target_has_atomic = "16"),
2065 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2066 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2078 | |     u16 AtomicU16 ATOMIC_U16_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2081 | / atomic_int! {
2082 | |     cfg(target_has_atomic = "32"),
2083 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2084 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2096 | |     i32 AtomicI32 ATOMIC_I32_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2099 | / atomic_int! {
2100 | |     cfg(target_has_atomic = "32"),
2101 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2102 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2114 | |     u32 AtomicU32 ATOMIC_U32_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2117 | / atomic_int! {
2118 | |     cfg(target_has_atomic = "64"),
2119 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2120 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2132 | |     i64 AtomicI64 ATOMIC_I64_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2135 | / atomic_int! {
2136 | |     cfg(target_has_atomic = "64"),
2137 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
2138 | |     stable(feature = "integer_atomics_stable", since = "1.34.0"),
...    |
2150 | |     u64 AtomicU64 ATOMIC_U64_INIT
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2210 | / atomic_int! {
2211 | |     cfg(target_has_atomic = "ptr"),
2212 | |     stable(feature = "rust1", since = "1.0.0"),
2213 | |     stable(feature = "extended_compare_and_swap", since = "1.10.0"),
2225 | |     isize AtomicIsize ATOMIC_ISIZE_INIT
2226 | | }
     | |_- in this macro invocation


error: expected one of `!`, `(`, `)`, `+`, `,`, `::`, or `<`, found `fetch_order`
    --> src/libcore/sync/atomic.rs:1846:40
1199 | / macro_rules! atomic_int {
1199 | / macro_rules! atomic_int {
1200 | |     ($cfg_cas:meta,
1201 | |      $stable:meta,
1202 | |      $stable_cxchg:meta,
1845 | |                                        set_order: Ordering
     | |                                                           -
     | |                                                           |
     | |                                                           expected one of 7 possible tokens
---
2005 | |     }
2006 | | }
     | |_- in this expansion of `atomic_int!`
...
2228 | / atomic_int! {
2229 | |     cfg(target_has_atomic = "ptr"),
2230 | |     stable(feature = "rust1", since = "1.0.0"),
2231 | |     stable(feature = "extended_compare_and_swap", since = "1.10.0"),
2243 | |     usize AtomicUsize ATOMIC_USIZE_INIT
2244 | | }
     | |_- in this macro invocation

---
  local time: Sun May  3 13:35:35 UTC 2020
  network time: Sun, 03 May 2020 13:35:36 GMT
== end clock drift check ==

##[error]Bash exited with code '1'.
##[section]Finishing: Run build
##[section]Starting: Checkout rust-lang/rust@refs/pull/71843/merge to s
Task         : Get sources
Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
Version      : 1.0.0
Author       : Microsoft
Author       : Microsoft
Help         : [More Information](https://go.microsoft.com/fwlink/?LinkId=798199)
==============================================================================
Cleaning any cached credential from repository: rust-lang/rust (GitHub)
##[section]Finishing: Checkout rust-lang/rust@refs/pull/71843/merge to s
Cleaning up task key
Start cleaning up orphan processes.
Terminate orphan process: pid (6119) (python)
##[section]Finishing: Finalize Job

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @rust-lang/infra. (Feature Requests)

@sfackler sfackler force-pushed the cas-loop-cleanup branch 2 times, most recently from b6a8492 to 49d1fee Compare May 3, 2020 13:43
@cormacrelf
Copy link
Contributor

Don’t forget adding fetch_update to AtomicPtr and AtomicBool. As it stands you can’t use it for a queue!

@Amanieu
Copy link
Member

Amanieu commented May 3, 2020

fetch_min and fetch_max are also tracked by #48655. I think it would make sense to stabilize them too. Some architectures (ARMv8.1 LSE and RISC-V) have dedicated instructions for atomic min/max.

src/libcore/sync/atomic.rs Outdated Show resolved Hide resolved
Co-authored-by: Ralf Jung <post@ralfj.de>
@rfcbot rfcbot added the final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. label May 8, 2020
@rfcbot
Copy link

rfcbot commented May 8, 2020

🔔 This is now entering its final comment period, as per the review above. 🔔

@rfcbot rfcbot removed the proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. label May 8, 2020
@Amanieu
Copy link
Member

Amanieu commented May 9, 2020

@sfackler Could you stabilize fetch_min and fetch_max as well in this PR?

@sfackler
Copy link
Member Author

sfackler commented May 9, 2020

The FCP was for fetch_update specifically. I think it makes the most sense to split min/max out to a separate PR. I've updated the top comment so this won't close the tracking issue.

@withoutboats
Copy link
Contributor

withoutboats commented May 16, 2020

Haha I went just now to look at the tracking issue to suggest exactly this action be taken (including the API change)! Glad we'll be stabilizing this, its always the answer to my problems :)

@rfcbot rfcbot added the finished-final-comment-period The final comment period is finished for this PR / Issue. label May 18, 2020
@rfcbot
Copy link

rfcbot commented May 18, 2020

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

The RFC will be merged soon.

@rfcbot rfcbot removed the final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. label May 18, 2020
@Elinvynia Elinvynia removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label May 27, 2020
@dtolnay
Copy link
Member

dtolnay commented May 28, 2020

@bors r+

@bors
Copy link
Contributor

bors commented May 28, 2020

📌 Commit 31c8205 has been approved by dtolnay

@bors bors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label May 28, 2020
JohnTitor added a commit to JohnTitor/rust that referenced this pull request May 28, 2020
Tweak and stabilize AtomicN::fetch_update

The fetch_update method implements a compare-and-swap loop to update the value in an atomic to an arbitrary value computed by a closure.

I've applied a few tweaks suggested by @mystor in this comment on the tracking issue: rust-lang#48655 (comment). Specifically, the load and store ordering arguments have been swapped to match with the orderings of `compare_exchange`, and the closure has been moved from the first to last argument.

Moving the closure to the last argument is a change away from other methods on the atomic types which place the ordering(s) last, but matches with the broad convention that closure arguments come last in functions. In particular, rustfmt style lays calls with multi-line closures out more cleanly when the closure comes last.
bors added a commit to rust-lang-ci/rust that referenced this pull request May 29, 2020
Rollup of 11 pull requests

Successful merges:

 - rust-lang#71633 (Impl Error for Infallible)
 - rust-lang#71843 (Tweak and stabilize AtomicN::fetch_update)
 - rust-lang#72288 (Stabilization of weak-into-raw)
 - rust-lang#72324 (Stabilize AtomicN::fetch_min and AtomicN::fetch_max)
 - rust-lang#72452 (Clarified the documentation for Formatter::precision)
 - rust-lang#72495 (Improve E0601 explanation)
 - rust-lang#72534 (Improve missing `@` in slice binding pattern diagnostics)
 - rust-lang#72547 (Added a codegen test for a recent optimization for overflow-checks=on)
 - rust-lang#72711 (remove redundant `mk_const`)
 - rust-lang#72713 (Whitelist #[allow_internal_unstable])
 - rust-lang#72720 (Clarify the documentation of `take`)

Failed merges:

r? @ghost
@bors bors merged commit ea5848d into rust-lang:master May 29, 2020
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Aug 6, 2020
While here clean up all pkglint warnings.  Changes since 1.44.1:

Version 1.45.2 (2020-08-03)
==========================

* [Fix bindings in tuple struct patterns][74954]
* [Fix track_caller integration with trait objects][74784]

[74954]: rust-lang/rust#74954
[74784]: rust-lang/rust#74784

Version 1.45.1 (2020-07-30)
==========================

* [Fix const propagation with references.][73613]
* [rustfmt accepts rustfmt_skip in cfg_attr again.][73078]
* [Avoid spurious implicit region bound.][74509]
* [Install clippy on x.py install][74457]

[73613]: rust-lang/rust#73613
[73078]: rust-lang/rust#73078
[74509]: rust-lang/rust#74509
[74457]: rust-lang/rust#74457

Version 1.45.0 (2020-07-16)
==========================

Language
--------
- [Out of range float to int conversions using `as` has been defined as a saturating
  conversion.][71269] This was previously undefined behaviour, but you can use the
   `{f64, f32}::to_int_unchecked` methods to continue using the current behaviour, which
   may be desirable in rare performance sensitive situations.
- [`mem::Discriminant<T>` now uses `T`'s discriminant type instead of always
  using `u64`.][70705]
- [Function like procedural macros can now be used in expression, pattern, and  statement
  positions.][68717] This means you can now use a function-like procedural macro
  anywhere you can use a declarative (`macro_rules!`) macro.

Compiler
--------
- [You can now override individual target features through the `target-feature`
  flag.][72094] E.g. `-C target-feature=+avx2 -C target-feature=+fma` is now
  equivalent to `-C target-feature=+avx2,+fma`.
- [Added the `force-unwind-tables` flag.][69984] This option allows
  rustc to always generate unwind tables regardless of panic strategy.
- [Added the `embed-bitcode` flag.][71716] This codegen flag allows rustc
  to include LLVM bitcode into generated `rlib`s (this is on by default).
- [Added the `tiny` value to the `code-model` codegen flag.][72397]
- [Added tier 3 support\* for the `mipsel-sony-psp` target.][72062]
- [Added tier 3 support for the `thumbv7a-uwp-windows-msvc` target.][72133]

\* Refer to Rust's [platform support page][forge-platform-support] for more
information on Rust's tiered platform support.


Libraries
---------
- [`net::{SocketAddr, SocketAddrV4, SocketAddrV6}` now implements `PartialOrd`
  and `Ord`.][72239]
- [`proc_macro::TokenStream` now implements `Default`.][72234]
- [You can now use `char` with
  `ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}` to iterate over
  a range of codepoints.][72413] E.g.
  you can now write the following;
  ```rust
  for ch in 'a'..='z' {
      print!("{}", ch);
  }
  println!();
  // Prints "abcdefghijklmnopqrstuvwxyz"
  ```
- [`OsString` now implements `FromStr`.][71662]
- [The `saturating_neg` method as been added to all signed integer primitive
  types, and the `saturating_abs` method has been added for all integer
  primitive types.][71886]
- [`Arc<T>`, `Rc<T>` now implement  `From<Cow<'_, T>>`, and `Box` now
  implements `From<Cow>` when `T` is `[T: Copy]`, `str`, `CStr`, `OsStr`,
  or `Path`.][71447]
- [`Box<[T]>` now implements `From<[T; N]>`.][71095]
- [`BitOr` and `BitOrAssign` are implemented for all `NonZero`
  integer types.][69813]
- [The `fetch_min`, and `fetch_max` methods have been added to all atomic
  integer types.][72324]
- [The `fetch_update` method has been added to all atomic integer types.][71843]

Stabilized APIs
---------------
- [`Arc::as_ptr`]
- [`BTreeMap::remove_entry`]
- [`Rc::as_ptr`]
- [`rc::Weak::as_ptr`]
- [`rc::Weak::from_raw`]
- [`rc::Weak::into_raw`]
- [`str::strip_prefix`]
- [`str::strip_suffix`]
- [`sync::Weak::as_ptr`]
- [`sync::Weak::from_raw`]
- [`sync::Weak::into_raw`]
- [`char::UNICODE_VERSION`]
- [`Span::resolved_at`]
- [`Span::located_at`]
- [`Span::mixed_site`]
- [`unix::process::CommandExt::arg0`]

Cargo
-----

Misc
----
- [Rustdoc now supports strikethrough text in Markdown.][71928] E.g.
  `~~outdated information~~` becomes "~~outdated information~~".
- [Added an emoji to Rustdoc's deprecated API message.][72014]

Compatibility Notes
-------------------
- [Trying to self initialize a static value (that is creating a value using
  itself) is unsound and now causes a compile error.][71140]
- [`{f32, f64}::powi` now returns a slightly different value on Windows.][73420]
  This is due to changes in LLVM's intrinsics which `{f32, f64}::powi` uses.
- [Rustdoc's CLI's extra error exit codes have been removed.][71900] These were
  previously undocumented and not intended for public use. Rustdoc still provides
  a non-zero exit code on errors.

Internals Only
--------------
- [Make clippy a git subtree instead of a git submodule][70655]
- [Unify the undo log of all snapshot types][69464]

[73420]: rust-lang/rust#73420
[72324]: rust-lang/rust#72324
[71843]: rust-lang/rust#71843
[71886]: rust-lang/rust#71886
[72234]: rust-lang/rust#72234
[72239]: rust-lang/rust#72239
[72397]: rust-lang/rust#72397
[72413]: rust-lang/rust#72413
[72014]: rust-lang/rust#72014
[72062]: rust-lang/rust#72062
[72094]: rust-lang/rust#72094
[72133]: rust-lang/rust#72133
[71900]: rust-lang/rust#71900
[71928]: rust-lang/rust#71928
[71662]: rust-lang/rust#71662
[71716]: rust-lang/rust#71716
[71447]: rust-lang/rust#71447
[71269]: rust-lang/rust#71269
[71095]: rust-lang/rust#71095
[71140]: rust-lang/rust#71140
[70655]: rust-lang/rust#70655
[70705]: rust-lang/rust#70705
[69984]: rust-lang/rust#69984
[69813]: rust-lang/rust#69813
[69464]: rust-lang/rust#69464
[68717]: rust-lang/rust#68717
[`Arc::as_ptr`]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.as_ptr
[`BTreeMap::remove_entry`]: https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.remove_entry
[`Rc::as_ptr`]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.as_ptr
[`rc::Weak::as_ptr`]: https://doc.rust-lang.org/stable/std/rc/struct.Weak.html#method.as_ptr
[`rc::Weak::from_raw`]: https://doc.rust-lang.org/stable/std/rc/struct.Weak.html#method.from_raw
[`rc::Weak::into_raw`]: https://doc.rust-lang.org/stable/std/rc/struct.Weak.html#method.into_raw
[`sync::Weak::as_ptr`]: https://doc.rust-lang.org/stable/std/sync/struct.Weak.html#method.as_ptr
[`sync::Weak::from_raw`]: https://doc.rust-lang.org/stable/std/sync/struct.Weak.html#method.from_raw
[`sync::Weak::into_raw`]: https://doc.rust-lang.org/stable/std/sync/struct.Weak.html#method.into_raw
[`str::strip_prefix`]: https://doc.rust-lang.org/stable/std/primitive.str.html#method.strip_prefix
[`str::strip_suffix`]: https://doc.rust-lang.org/stable/std/primitive.str.html#method.strip_suffix
[`char::UNICODE_VERSION`]: https://doc.rust-lang.org/stable/std/char/constant.UNICODE_VERSION.html
[`Span::resolved_at`]: https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.resolved_at
[`Span::located_at`]: https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.located_at
[`Span::mixed_site`]: https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.mixed_site
[`unix::process::CommandExt::arg0`]: https://doc.rust-lang.org/std/os/unix/process/trait.CommandExt.html#tymethod.arg0
mystor added a commit to mystor/rust that referenced this pull request Nov 1, 2020
These methods were stabilized for the integer atomics in rust-lang#71843, but the methods
were not added for the non-integer atomics `AtomicBool` and `AtomicPtr`.
m-ou-se added a commit to m-ou-se/rust that referenced this pull request Nov 1, 2020
Add fetch_update methods to AtomicBool and AtomicPtr

These methods were stabilized for the integer atomics in rust-lang#71843, but the methods were not added for the non-integer atomics `AtomicBool` and `AtomicPtr`.
JohnTitor added a commit to JohnTitor/rust that referenced this pull request Nov 2, 2020
Add fetch_update methods to AtomicBool and AtomicPtr

These methods were stabilized for the integer atomics in rust-lang#71843, but the methods were not added for the non-integer atomics `AtomicBool` and `AtomicPtr`.
@dtolnay dtolnay assigned dtolnay and unassigned shepmaster Mar 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet