Rollup of 18 pull requests
Successful merges:
- #54646 (improve documentation on std:🧵:sleep)
- #54933 (Cleanup the rest of codegen_llvm)
- #54964 (Run both lldb and gdb tests)
- #55016 (Deduplicate some code and compile-time values around vtables)
- #55031 (Improve verify_llvm_ir config option)
- #55050 (doc std::fmt: the Python inspiration is already mentioned in precedin…)
- #55077 (rustdoc: Use dyn keyword when rendering dynamic traits)
- #55080 (Detect if access to localStorage is forbidden by the user's browser)
- #55090 (regression test for move out of borrow via pattern)
- #55102 (resolve: Do not skip extern prelude during speculative resolution)
- #55104 (Add test for #34229)
- #55111 ([Rustc Book] Explain --cfg's arguments)
- #55122 (Cleanup mir/borrowck)
- #55127 (Remove HybridBitSet::dummy)
- #55128 (Fix LLVMRustInlineAsmVerify return type mismatch)
- #55142 (miri: layout should not affect CTFE checks (outside of validation))
- #55151 (Cleanup nll)
- #55161 ([librustdoc] Disable spellcheck for search field)
[Rustc Book] Explain --cfg's arguments
I removed this from the reference since it's rustc specific, and noticed it wasn't well documented on the page that should document it well. It does seem to go against the grain of one line per command line flag though.
[librustdoc] Disable spellcheck for search field
This disables spellchecking for the search field in the rustdoc web interface.
As someone who uses Safari to browse through Rust docs, spellchecking gets really annoying.
miri: layout should not affect CTFE checks (outside of validation)
Either the enum has no valid discriminant, then the code later will catch that; or it does, then we shouldn't error out so early (absent enforcing validity).
Interestingly, the miri test suite still passes; my guess is we don't even get here for uninhabited types?
r? @oli-obk
Cleanup mir/borrowck
- remove a redundant `.clone()`
- a few string tweaks
- deduplicate assignments and `return`s
- simplify common patterns
- remove redundant `return`s
regression test for move out of borrow via pattern
regression test for issue #54597.
(We may have other tests that cover this, but I couldn't immediately find them associated with the PR that originally fixed the ICE here.)
Detect if access to localStorage is forbidden by the user's browser
If the user's cookie/persistent storage setting forbid access to `localStorage`, catch the exception and abort the access.
Currently, attempting to use the expand/contract links at the top of the page for structs/consts/etc. fails due to an unhandled error while accessing `localStorage`, if such access is forbidden, as the exception from the failed access propagates all the way out, interrupting the expand/contract. Instead, I would like to degrade gracefully; the access won't happen (the collapse/expand state won't get persisted) but the actual expanding/contracting of the item will go on to succeed.
Fixes#55079
rustdoc: Use dyn keyword when rendering dynamic traits
The dyn keyword has been stable for a while now so rustdoc should start using it.
r? @QuietMisdreavus
Improve verify_llvm_ir config option
LLVM IR verification has been disabled by default in #51230. However, the implementation doesn't quite match what was discussed in the discussion. This patch implements two changes:
* Make `verify_llvm_ir` influence the behavior of the compiled rustc binary, rather than just the rustc build system. That is, if `verify_llvm_ir=true`, even manual invocations of the built rustc will verify LLVM IR.
* Enable verification of LLVM IR in CI, for non-deploy and deploy-alt builds. This is similar to how LLVM assertions are handled.
Run both lldb and gdb tests
Currently lldb tests are run only on macOS, and gdb tests are only run
elsewhere. This patch changes this to run tests depending on what is
available.
One test is changed, as it was previously marked as failing on macOS,
whereas really it is a generic failure with lldb.
Closes#54721
This patch adds a `copysign` function to the float primitive types.
It is an exceptionally useful function for writing efficient numeric
code, as it often avoids branches, is auto-vectorizable, and there
are efficient intrinsics for most platforms.
I think this might work as-is, as the relevant `copysign` intrinsic
is already used internally for the implementation of `signum`. It's
possible that an implementation might be needed in japaric/libm for
portability across all platforms, in which case I'll do that also.
Part of the work towards #55107
NLL: change compare-mode=nll to use borrowck=migrate
Fixes#55118.
This PR is split into two parts:
The first commit is a minor change that fixes a flaw in the existing `borrowck=migrate` implementation whereby a lint that was promoted to an error in the AST borrow checker would result in the same lint from the NLL borrow checker being downgraded to a warning in migrate mode. This PR fixes this by ensuring lints are exempt from buffering in the NLL borrow checker.
The second commit updates `compiletest` to make the NLL compare mode use `-Z borrowck=migrate` rather than `-Z borrowck=mir`. The third commit shows all the test output changes that result from this.
r? @pnkfelix
Add filtering option to `rustc_on_unimplemented` and reword `Iterator` E0277 errors
- Add more targetting filters for arrays to `rustc_on_unimplemented` (Fix#53766)
- Detect one element array of `Range` type, which is potentially a typo:
`for _ in [0..10] {}` where iterating between `0` and `10` was intended.
(Fix#23141)
- Suggest `.bytes()` and `.chars()` for `String`.
- Suggest borrowing or `.iter()` on arrays (Fix#36391)
- Suggest using range literal when iterating on integers (Fix#34353)
- Do not suggest `.iter()` by default (Fix#50773, fix#46806)
- Add regression test (Fix#22872)
reject partial init and reinit of uninitialized data
Reject partial initialization of uninitialized structured types (i.e. structs and tuples) and also reject partial *reinitialization* of such types.
Fix#54986Fix#54499
cc #21232