Previously the code below would not be guaranteed to exit when the first
spawned thread took the `return, // already unparked` path because there
was no write to synchronize with a read in `park`.
```
use std::sync::atomic::{AtomicBool, Ordering};
use std:🧵:{current, spawn, park};
static FLAG: AtomicBool = AtomicBool::new(false);
fn main() {
let thread_0 = current();
spawn(move || {
FLAG.store(true, Ordering::Relaxed);
thread_0.unpark();
});
let thread_0 = current();
spawn(move || {
thread_0.unpark();
});
while !FLAG.load(Ordering::Relaxed) {
park();
}
}
```
Rollup of 15 pull requests
Successful merges:
- #52514 (Fix a few AMDGPU related issues)
- #53703 (Document .0 to unpack integer from Wrapping)
- #53777 (Implemented map_or_else for Result<T, E>)
- #54031 (A few cleanups and minor improvements to rustc_passes)
- #54046 (Update documentation for fill_buf in std::io::BufRead)
- #54064 (`&CStr`, not `CStr`, is the counterpart of `&str`)
- #54072 (Stabilization change for mod.rs)
- #54073 (docs: Use dollar sign for all bash prompts)
- #54074 (simplify ordering for Kind)
- #54085 (Remove documentation about proc_macro being bare-bones)
- #54087 (rustdoc: Remove generated blanket impls from trait pages)
- #54106 (Reexport CheckLintNameResult)
- #54107 (Fix typos in libstd hash map)
- #54136 (Update LLVM to fix GlobalISel dbg.declare)
- #54142 (Recover proper regression test for issue #16278.)
Failed merges:
r? @ghost
Fix typos in libstd hash map
modified growth algo description to read "the first table overflows into the second, and the second into the first." plus smaller typos
rustdoc: Remove generated blanket impls from trait pages
#53801 only deduped the generated blanket impls but they shouldn't be displayed at all because the original blanket impl is already in the "Implementors" section. This also removes the impls from the sidebar.
Fixes#53689
r? @QuietMisdreavus
Remove documentation about proc_macro being bare-bones
A large chunk of useful API surface area is stabilizing in Rust 1.29. We no longer have a commitment to expand the API over time as much as implied by these comments.
r? @alexcrichton
docs: Use dollar sign for all bash prompts
Making it consistent across the board, as most of them already use `$`.
Also split one continues bash run into two, to make it easier see
different runs: one with warning and another with error.
Stabilization change for mod.rs
This change is in response to https://github.com/rust-lang/rust/issues/53125.
The patch makes the feature accepted and removes the tests that tested the
non-accepted status of the feature.
Update documentation for fill_buf in std::io::BufRead
Brings the documentation in line with the BufReader implementation.
Fixes#48022.
This is my first PR, and I think the `E-easy` label is very cool, as so is the practice of describing the fix but leaving it for someone else; it really makes it a lot less intimidating to get started with something!
A few cleanups and minor improvements to rustc_passes
- prefer `if let` to `match` when only one branch matters
- prefer equality checks to pattern matching
- prefer `is_empty` to `len() == 0`
- collapse a couple of `if` expressions
- rename `label` to `destination` when destructuring `hir::ExprKind::Continue`
- `derive Copy` for `Promotability`
- `impl BitAndAssign` for `Promotability`
- a few formatting fixes
- a few other minor cleanups
Fix a few AMDGPU related issues
* AMDGPU ignores `noinline` and sadly doesn't clear the attribute when it slaps `alwaysinline` on everything,
* an AMDGPU related load bit range metadata assertion,
* I didn't enable the `amdgpu` component in the `librustc_llvm` build script,
* Add AMDGPU call abi info.
First step towards `u128` instead of `Const` in `PatternKind::Range`
This PR accomplishes two things:
* It adds `ty::Ty` to `PatternKind::Range`. The extra type information will make it easier to remove it from the `hi` and `lo` members.
* It exchanges `Const` for `u128` in `Constructor::ConstantRange`.
support ascription for patterns in NLL
This implements the strategy outlined in [this comment](https://github.com/rust-lang/rust/issues/47184#issuecomment-416669986):
- We first extend the NLL subtyping code so it can handle inference variables and subtyping.
- Then we extend HAIR patterns with type ascription.
- Then we treat the type `T` in `let pat: T = ...` as an ascription.
Before landing, a few things:
- [x] Fix the WF rule bug (filed a FIXME https://github.com/rust-lang/rust/issues/54105)
- [x] Fix an ICE I encountered locally around bound regions, or else file a follow-up
- [x] More tests probably =)
r? @pnkfelix