Add a packed/tagged pointer abstraction and utilize it for ParamEnv
The intent here is mostly just to add the abstraction; I suspect that there are definitely more use cases for it, and we can explore those over time now that there's a (mostly) safe abstraction that can be used in rustc.
This Emscripten version was the first to be cut after the LLVM 11
release branch was created, so it should be the most compatible with
LLVM 11. The old version we were using was incompatible with LLVM 11
because its wasm-ld did not understand all the relocations that LLVM
11 emits.
Rollup of 7 pull requests
Successful merges:
- #75069 (move const param structural match checks to wfcheck)
- #75587 (mir building: fix some comments)
- #75593 (Adjust installation place for compiler docs)
- #75648 (Make OnceCell<T> transparent to dropck)
- #75649 (Fix intra-doc links for inherent impls that are both lang items and not the default impl)
- #75674 (Move to intra doc links for std::io)
- #75696 (Remove `#[cfg(miri)]` from OnceCell tests)
Failed merges:
r? @ghost
Remove `#[cfg(miri)]` from OnceCell tests
They were carried over from once_cell crate, but they are not entirely
correct (as miri now supports more things), and we don't run miri
tests for std, so let's just remove them.
Maybe one day we'll run miri in std, but then we can just re-install
these attributes.
Move to intra doc links for std::io
Helps with #75080.
@rustbot modify labels: T-doc, A-intra-doc-links, T-rustdoc
r? @jyn514
I had no problems with those files so I added some small links here and there.
Fix intra-doc links for inherent impls that are both lang items and not the default impl
I found in https://github.com/rust-lang/rust/pull/75464#issuecomment-675125984 that `str::to_uppercase()` doesn't resolve while `str::trim()` does. The only real difference is that `to_uppercase` is defined in `alloc`, while trim is defined in `core`. It turns out that rustdoc was ignoring `lang_items.str_alloc_impl()` - it saw them in `collect_trait_impls`, but not for intra-doc links.
This uses the same `impls` for all parts of rustdoc, so that there can be no more inconsistency. It does have the slight downside that the matches are no longer exhaustive but it will be very clear if a new lang item is missed because it will panic when you try to document it (and if you don't document it, does rustdoc really need to know about it?).
~~This needs a test case (probably just `str::to_uppercase`).~~ Added.
This is best reviewed commit-by-commit.
r? @GuillaumeGomez
Adjust installation place for compiler docs
This avoids conflicts when installing with rustup; rustup does not currently
support overlapping installations.
r? @matthiaskrgr
move const param structural match checks to wfcheck
fixes#75047fixes#74950
We currently check for structural match violations inside of `type_of`.
As we need to check the array length when checking if `[NonEq; arr_len]` is structural match, we potentially require the variance of an expression. Computing the variance requires `type_of` for all types though, resulting in a cycle error.
r? @varkor @eddyb
Doc alias checks: ensure only items appearing in search index can use it
Following the discussion in #73721, I added checks to ensure that only items appearing in the search are allowed to have doc alias.
r? @ollie27
Improve codegen for `align_offset`
In this PR the `align_offset` implementation is changed/improved to produce better code in certain scenarios such as when pointer type is has a stride of 1 or when building for low optimisation levels.
While these changes do not achieve the "ideal" codegen referenced in #75579, it gets significantly closer to it. I’m not actually sure if the codegen can actually be much better with this function returning the offset, rather than the aligned pointer.
See the descriptions for separate commits for further information.
They were carried over from once_cell crate, but they are not entirely
correct (as miri now supports more things), and we don't run miri
tests for std, so let's just remove them.
Maybe one day we'll run miri in std, but then we can just re-install
these attributes.
Rollup of 9 pull requests
Successful merges:
- #75038 (See also X-Link mem::{swap, take, replace})
- #75049 (docs(marker/copy): provide example for `&T` being `Copy`)
- #75499 (Fix documentation error)
- #75554 (Fix clashing_extern_declarations stack overflow for recursive types.)
- #75646 (Move to intra doc links for keyword documentation)
- #75652 (Resolve true and false as booleans)
- #75658 (Don't emit "is not a logical operator" error outside of associative expressions)
- #75665 (Add doc examples coverage)
- #75685 (Switch to intra-doc links in /src/sys/unix/ext/*.rs)
Failed merges:
r? @ghost
Switch to intra-doc links in /src/sys/unix/ext/*.rs
Partial fix for #75080
@rustbot modify labels: T-doc, A-intra-doc-links, T-rustdoc
r? @jyn514
These two links are not resolving to either `crate::fs::File...` or `fs::File...`
```
# unix/ext/fs.rs
27: /// [`File::read`]: ../../../../std/fs/struct.File.html#method.read
130: /// [`File::write`]: ../../../../std/fs/struct.File.html#method.write
```
Don't emit "is not a logical operator" error outside of associative expressions
Avoid showing this error where it doesn't make sense by not assuming
"and" and "or" were intended to mean "&&" and "||" until after we decide
to continue parsing input as an associative expression.
Note that the decision of whether or not to continue parsing input as an
associative expression doesn't actually depend on this assumption.
Fixes#75599
---
First time contributor! Let me know if there are any conventions or policies I should be following that I missed here. Thanks :)
Fix clashing_extern_declarations stack overflow for recursive types.
Fixes#75512.
Adds a seen set to `structurally_same_type` to avoid recursing indefinitely for types which contain values of the same type through a pointer or reference.