Rollup of 13 pull requests
Successful merges:
- #64581 (Fix unreachable_code warnings for try{} block ok-wrapped expressions)
- #64850 (Remove inlines from DepNode code)
- #64914 (regression test for 64453 borrow check error.)
- #64922 (Use PlaceBuilder to avoid a lot of slice -> vec -> slice convertions)
- #64948 (Improve sidebar styling to make its integration easier)
- #64961 (Make comment about dummy type a bit more clear)
- #64967 (Don't mark borrows of zero-sized arrays as indirectly mutable)
- #64973 (Fix typo while setting `compile-flags` in test)
- #64980 (Enable support for `IndirectlyMutableLocals` in `rustc_peek` )
- #64989 (Fix ICE #64964)
- #64991 ([const-prop] Correctly handle locals that can't be propagated)
- #64995 (Remove rustdoc warning)
- #64997 (rustc book: nitpick SLP vectorization)
Failed merges:
r? @ghost
Remove rustdoc warning
Removes this warning:
```bash
Finished release [optimized] target(s) in 2.62s
Documenting core v0.0.0 (/home/imperio/rust/rust/src/libcore)
Finished release [optimized] target(s) in 15.23s
Documenting std v0.0.0 (/home/imperio/rust/rust/src/libstd)
Finished release [optimized] target(s) in 17.30s
Documenting proc_macro v0.0.0 (/home/imperio/rust/rust/src/libproc_macro)
Finished release [optimized] target(s) in 2.36s
Documenting test v0.0.0 (/home/imperio/rust/rust/src/libtest)
warning: `[0]` cannot be resolved, ignoring it...
--> src/libtest/lib.rs:1112:41
|
1112 | /// supplied channel. Requires argv[0] to exist and point to the binary
| ^ cannot be resolved, ignoring
|
= note: `#[warn(intra_doc_link_resolution_failure)]` on by default
= help: to escape `[` and `]` characters, just add '\' before them like `\[` or `\]`
Finished release [optimized] target(s) in 1.64s
Build completed successfully in 0:02:07
```
[const-prop] Correctly handle locals that can't be propagated
`const_prop()` now handles writing the Rvalue into the Place in the
stack frame for us. So if we're not supposed to propagate that value,
we need to clear it.
r? @oli-obk
Fixes#64970
Enable support for `IndirectlyMutableLocals` in `rustc_peek`
This PR allows `rustc_peek` tests to be written for the `IndirectlyMutableLocals` analysis implemented in #64470. See any of the tests in [`test/ui/mir-dataflow`](https://github.com/rust-lang/rust/blob/master/src/test/ui/mir-dataflow/inits-1.rs) for an example.
Included in this PR is a major rewrite of the `rustc_peek` module. This was motivated by the differences between the `IndirectlyMutableLocals` analysis and the initialized places ones.
To properly test `IndirectlyMutableLocals`, we must pass locals by-value to `rustc_peek`, since any local that is not `Freeze` will be marked as indirectly mutable as soon as a reference to it is taken. Unfortunately, `UnsafeCell` is not `Copy`, so we can only do one `rustc_peek` on each value with interior mutability inside a test. I'm not sure how to deal with this restriction; perhaps I need to special case borrows preceding a call to `rustc_peek` in the analysis itself?
`rustc_peek` also assumed that the analysis was done on move paths and that its transfer function only needed to be applied at assignment statements. This PR removes both of those restrictions by adding a trait, `RustcPeekAt`, that controls how the peeked at `Place` maps to the current dataflow state and using a dataflow cursor to retrieve the state itself.
Finally, this PR adds a test which demonstrates some unsoundness in the `IndirectlyMutableLocals` analysis by converting a reference to a `Freeze` field to a reference to a `!Freeze` field by offsetting a pointer (or in this case transmuting a pointer to a ZST field with the same address as a `!Freeze` field). This does not represent a hole in the language proper, since this analysis is only used to validate `const` bodies, in which the unsound code will only compile with `-Zunleash-the-miri-inside-of-you`. Nevertheless, this should get fixed.
r? @oli-obk
Fix typo while setting `compile-flags` in test
This test is meant to check for an ICE when generating debug info, but didn't actually pass `-g` due to the typo.
I also removed the `FIXME`, since this needs to actually be built (not just checked) to trigger the ICE.
Improve sidebar styling to make its integration easier
Part of https://github.com/rust-lang/docs.rs/issues/417
Setting the height was an error: forcing the element bottom to be at the bottom allows to change to top of the sidebar.
r? @Mark-Simulacrum
`const_prop()` now handles writing the Rvalue into the Place in the
stack frame for us. So if we're not supported to propagate that value,
we need to clear it.
This commit improves the suggestions provided when function parameters
do not have types:
- A new suggestion is added for arbitrary self types, which suggests
adding `self: ` before the type.
- Existing suggestions are now provided when a `<` is found where a `:`
was expected (previously only `,` and `)` or trait items), this gives
suggestions in the case where the unnamed parameter type is generic
in a free function.
- The suggestion that a type name be provided (e.g. `fn foo(HashMap<u32>)`
-> `fn foo(HashMap: TypeName<u32>)`) will no longer occur when a `<` was
found instead of `:`.
- The ident will not be used for recovery when a `<` was found instead
of `:`.
Signed-off-by: David Wood <david@davidtw.co>