| Age | Commit message (Collapse) | Author | Lines |
|
While working on some other changes in the bridge, I noticed that when
running a nested proc-macro (which is currently only possible using
the unstable `TokenStream::expand_expr`), any symbols held by the
proc-macro client would be invalidated, as the same thread would be used
for the nested macro by default, and the interner doesn't handle nested
use.
After discussing with @eddyb, we decided the best approach might be to
force the use of the cross-thread executor for nested invocations, as it
will never re-use thread-local storage, avoiding the issue. This
shouldn't impact performance, as expand_expr is still unstable, and
infrequently used.
This was chosen rather than making the client symbol interner handle
nested invocations, as that would require replacing the internal
interner `Vec` with a `BTreeMap` (as valid symbol id ranges could now be
disjoint), and the symbol interner is known to be fairly perf-sensitive.
This patch adds checks to the execution strategy to use the cross-thread
executor when doing nested invocations. An alternative implementation
strategy could be to track this information in the `ExtCtxt`, however a
thread-local in the `proc_macro` crate was chosen to add an assertion so
that `rust-analyzer` is aware of the issue if it implements
`expand_expr` in the future.
r? @eddyb
|
|
bump deps
Update few crates to drop old/duplicated versions.
updates pest* crates (no separate changelog, sadly: https://github.com/pest-parser/pest/releases), thiserror, handlebars(https://github.com/sunng87/handlebars-rust/blob/v4.3.3/CHANGELOG.md#433---2022-07-20) to drop old ones:
```
Removing block-buffer v0.7.3
Removing block-padding v0.1.5
Removing byte-tools v0.3.1
Removing byteorder v1.3.4
Removing digest v0.8.1
Removing fake-simd v0.1.2
Removing generic-array v0.12.4
Updating handlebars v4.1.0 -> v4.3.3
Removing opaque-debug v0.2.3
Updating pest v2.1.3 -> v2.3.0
Updating pest_derive v2.1.0 -> v2.3.0
Updating pest_generator v2.1.3 -> v2.3.0
Updating pest_meta v2.1.3 -> v2.3.0
Removing quick-error v2.0.0
Removing sha-1 v0.8.2
Updating thiserror v1.0.30 -> v1.0.33
Updating thiserror-impl v1.0.30 -> v1.0.33
```
combine v4.6.3 -> v4.6.6: drops `use_std` features, addressed this comment:
https://github.com/rust-lang/rust/blob/4fd4de7ea358ad6fc28c5780533ea8ccc09e1006/src/tools/rustc-workspace-hack/Cargo.toml#L80-L82
im-rc v15.0.0 -> v15.1.0 to drop rand_xoshiro duplicated version
```
Updating im-rc v15.0.0 -> v15.1.0
Removing rand_xoshiro v0.4.0
```
|
|
safe transmute: use `Assume` struct to provide analysis options
This task was left as a TODO in #92268; resolving it brings [`BikeshedIntrinsicFrom`](https://doc.rust-lang.org/nightly/core/mem/trait.BikeshedIntrinsicFrom.html) more in line with the API defined in [MCP411](https://github.com/rust-lang/compiler-team/issues/411).
**Before:**
```rust
pub unsafe trait BikeshedIntrinsicFrom<
Src,
Context,
const ASSUME_ALIGNMENT: bool,
const ASSUME_LIFETIMES: bool,
const ASSUME_VALIDITY: bool,
const ASSUME_VISIBILITY: bool,
> where
Src: ?Sized,
{}
```
**After:**
```rust
pub unsafe trait BikeshedIntrinsicFrom<Src, Context, const ASSUME: Assume = { Assume::NOTHING }>
where
Src: ?Sized,
{}
```
`Assume::visibility` has also been renamed to `Assume::safety`, as library safety invariants are what's actually being assumed; visibility is just the mechanism by which it is currently checked (and that may change).
r? `@oli-obk`
---
Related:
- https://github.com/rust-lang/compiler-team/issues/411
- https://github.com/rust-lang/rust/issues/99571
|
|
Update LLVM submodule
This updates to the current 15.x branch plus one cherry-pick.
Fixes #100834.
Fixes #101121.
|
|
Rollup of 4 pull requests
Successful merges:
- #100302 (Suggest associated method on deref types when path syntax method fails)
- #100647 ( Make trait bound not satisfied specify kind)
- #101349 (rustdoc: remove `.impl-items { flex-basis }` CSS, not in flex container)
- #101369 (Fix `global_asm` macro pretty printing)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Fix `global_asm` macro pretty printing
Fixes #101051
Fixes #101047
|
|
rustdoc: remove `.impl-items { flex-basis }` CSS, not in flex container
Added in 34bd2b845b3acd84c5a9bddae3ff8081c19ec5e9
For this to actually do anything, [according to MDN] (and Firefox Dev Tools), it must be a "flex item", which only happens if its a direct child of a node with `display: flex` on it. It seems like it could not have worked at the time when this rule was added, because the only items in `rustdoc.css` with `display: flex` active were:
* `#help`
This should not contain anything like this.
* `.impl-items h4, h4.impl, h3.impl`
These are all headers, so they shouldn't contain `.impl-items` either.
* `.content .impl-items .method, .content .impl-items > .type, .impl-items > .associatedconstant`
Associated constants and methods definitely shouldn't contain a list of impl items, and the `.type` class seems to refer to type aliases, which, when shown inside of an impl, only show a link to the aliased type.
[according to MDN]: https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis
Nowadays, `display: flex` is a lot more prolific, but `.impl-items` still seems to only be used in plain block parents:
* If it's not a trait impl, then it's nested below a `<div>` with an id but no class, added in a5216cf67d93de97091b41ecba85de2e08f39863. This will be `display: block`, probably. For example, [vec deref]
* Inherent impls also get a `<div>` tag, for example [vec impl], and they are also wrapped by their own non-flexbox `<details>` tag.
* If it's a tait implementation, then it's also nested below a `<details>` container, like [deref cstring].
[vec impl]: https://doc.rust-lang.org/1.63.0/std/vec/struct.Vec.html#impl
[vec deref]: https://doc.rust-lang.org/1.63.0/std/vec/struct.Vec.html#deref-methods-%5BT%5D
[deref cstring]: https://doc.rust-lang.org/1.63.0/std/ops/trait.Deref.html#impl-Deref
Also, this would imply that trait items ought to take up as much space as possible, pushing everything else to the edge of the screen. If this is nested directly below the `.rustdoc` container, which has a row basis, that would be bad.
|
|
Make trait bound not satisfied specify kind
Closes #99875
|
|
Suggest associated method on deref types when path syntax method fails
Fixes #100278
|
|
Added in 34bd2b845b3acd84c5a9bddae3ff8081c19ec5e9
For this to actually do anything, [according to MDN] (and Firefox Dev Tools),
it must be a "flex item", which only happens if its a direct child of a node
with `display: flex` on it. It seems like it could not have worked at the time
when this rule was added, because the only items in `rustdoc.css` with
`display: flex` active were:
* `#help`
This should not contain anything like this.
* `.impl-items h4, h4.impl, h3.impl`
These are all headers, so they shouldn't contain `.impl-items` either.
* `.content .impl-items .method, .content .impl-items > .type, .impl-items > .associatedconstant`
Associated constants and methods definitely shouldn't contain a list of impl
items, and the `.type` class seems to refer to type aliases, which, when
shown inside of an impl, only show a link to the aliased type.
[according to MDN]: https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis
Nowadays, `display: flex` is a lot more prolific, but `.impl-items` still
seems to only be used in plain block parents:
* If it's not a trait impl, then it's nested below a `<div>` with an id but no
class, added in a5216cf67d93de97091b41ecba85de2e08f39863. This will be
`display: block`, probably. For example, [vec deref]
* Inherent impls also get a `<div>` tag, for example [vec impl], and they are
also wrapped by their own non-flexbox `<details>` tag.
* If it's a tait implementation, then it's also nested below a `<details>`
container, like [deref cstring].
[vec impl]: https://doc.rust-lang.org/1.63.0/std/vec/struct.Vec.html#impl
[vec deref]: https://doc.rust-lang.org/1.63.0/std/vec/struct.Vec.html#deref-methods-%5BT%5D
[deref cstring]: https://doc.rust-lang.org/1.63.0/std/ops/trait.Deref.html#impl-Deref
Also, this would imply that trait items ought to take up as much space as
possible, pushing everything else to the edge of the screen. If this is nested
directly below the `.rustdoc` container, which has a row basis, that would
be bad.
|
|
Do not call object_lifetime_default on lifetime params.
Small cleanup to avoid unnecessary query invocations in trivial cases.
|
|
|
|
Update backtrace
Most notably, this pulls in https://github.com/rust-lang/backtrace-rs/commit/ebc9a85466506e4fd0ba9cb72b15c42e320a0867, which is both a bugfix and a significant performance improvement for Miri, since fixing the bug makes `RUST_BACKTRACE=1` backtraces much smaller: https://github.com/rust-lang/miri/issues/2273, https://github.com/rust-lang/miri-test-libstd/issues/8
This also pulls in other commits which turn the backtrace-rs CI green. That's nice.
|
|
Rollup of 4 pull requests
Successful merges:
- #101335 (rustdoc: remove old CSS selector that causes weird spacing)
- #101347 (ffx component run should provide a collection)
- #101364 (Shrink suggestion span of argument mismatch error)
- #101365 (remove redundant clones)
Failed merges:
- #101349 (rustdoc: remove `.impl-items { flex-basis }` CSS, not in flex container)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
remove redundant clones
|
|
Shrink suggestion span of argument mismatch error
This doesn't really help with #101242, but I wanted to put this up while I work on other fixes.
|
|
ffx component run should provide a collection
In the future,`ffx component run` will not default to the using the `/core/ffx-laboratory` collection. Updated the run commands to include this.
|
|
rustdoc: remove old CSS selector that causes weird spacing
It was added with e08a84a0c18739417a50c3e46917ced5037244eb (actually, it was called `.methods > .stability` at the time) and was directly nested that way.
**EDIT**: It is technically reachable code still, but it seems wrong.
## With the old CSS rule still present
https://notriddle.com/notriddle-rustdoc-test/weird-spacing/lib/struct.Foo.html

## Version 2 (an older version of this PR)
https://notriddle.com/notriddle-rustdoc-test/normal-spacing-2/lib/struct.Foo.html

## Version 3 (with alignment fix for mobile)
https://notriddle.com/notriddle-rustdoc-test/normal-spacing-3/lib/struct.Foo.html

|
|
Add warning against unexpected --cfg with --check-cfg
This PR adds a warning when an unexpected `--cfg` is specified but not in the specified list of `--check-cfg`.
This is the follow-up PR I mentioned in https://github.com/rust-lang/rust/pull/99519.
r? `@petrochenkov`
|
|
interpret: fix unnecessary allocation in validation visitor
Should fix the perf regression introduced by https://github.com/rust-lang/rust/pull/100043.
r? `@oli-obk`
|
|
|
|
|
|
Rollup of 7 pull requests
Successful merges:
- #99736 (Partially stabilize `bound_as_ref` by stabilizing `Bound::as_ref`)
- #100928 (Migrate rustc_metadata to SessionDiagnostics)
- #101217 ([drop tracking] Use parent expression for scope, not parent node )
- #101325 (Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default)
- #101330 (Fix `std::collections::HashSet::drain` documentation)
- #101338 (Fix unsupported syntax in .manifest file)
- #101348 (Cleanup css theme)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
|
|
|
|
Cleanup css theme
Follow-up of https://github.com/rust-lang/rust/pull/100494.
The change for the border color of the search input in the dark mode was actually a weird case: the search input border was unique, it didn't share the same variable with other items with borders. This weird case being unique to the dark theme, I removed it, hence the modification in the GUI test.
Live demo is [here](https://rustdoc.crud.net/imperio/cleanup-css-theme/std/index.html).
cc `@jsha`
r? `@notriddle`
|
|
Fix unsupported syntax in .manifest file
Fuchsia .manifest files do not support a `#` comment syntax. Because of this, if you copy and paste the current example code for this file, and then remove the line you don't need, you still see an error. To make this a bit easier to follow, split this into two code blocks, one for rustc, and one for cargo.
|
|
Fix `std::collections::HashSet::drain` documentation
Hi!
`std::collections::HashSet::drain` contains small typo in the docstring.
I didn't read too much about the model of contributing to Rust, so merge this PR or close and fix the typo the right way :)
Thanks for Rust!
|
|
Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default
This only changes a small amount of actual code, the rest is documentation outlining the history of this module as I feel it will be relevant to any future issues that might crop up.
The code change is to use the `BCRYPT_RNG_ALG_HANDLE` [pseudo-handle](https://docs.microsoft.com/en-us/windows/win32/seccng/cng-algorithm-pseudo-handles) by default, which simply uses the default RNG. Previously we used `BCRYPT_USE_SYSTEM_PREFERRED_RNG` which has to load the system configuration and then find and load that RNG. I suspect this was the cause of failures on some systems (e.g. due to corrupted config). However, this is admittedly speculation as I can't reproduce the issue myself (and it does seem quite rare even in the wild). Still, removing a possible point of failure is likely worthwhile in any case.
r? libs
|
|
[drop tracking] Use parent expression for scope, not parent node
Previously we were just using the parent node as the scope for a temporary value, but it turns out this is too narrow. For example, in an expression like
Foo {
b: &42,
a: async { 0 }.await,
}
the scope for the &42 was set to the ExprField node for `b: &42`, when we actually want to use the Foo struct expression.
We fix this by recursively searching through parent nodes until we find a Node::Expr. It may be that we don't find one, and if so that's okay, we will just fall back on the enclosing temporary scope which is always sufficient.
Helps with #97331
r? ``@jyn514``
|
|
Migrate rustc_metadata to SessionDiagnostics
Migrate rustc_metadata to SessionDiagnostics.
Part of https://github.com/rust-lang/rust/issues/100717
|
|
lopopolo:lopopolo/gh-80996-partial-stabilization-bounds-as-ref, r=dtolnay
Partially stabilize `bound_as_ref` by stabilizing `Bound::as_ref`
Stabilizing `Bound::as_ref` will simplify the implementation for `RangeBounds<usize>` for custom range types:
```rust
impl RangeBounds<usize> for Region {
fn start_bound(&self) -> Bound<&usize> {
// TODO: Use `self.start.as_ref()` when upstream `std` stabilizes:
// https://github.com/rust-lang/rust/issues/80996
match self.start {
Bound::Included(ref bound) => Bound::Included(bound),
Bound::Excluded(ref bound) => Bound::Excluded(bound),
Bound::Unbounded => Bound::Unbounded,
}
}
fn end_bound(&self) -> Bound<&usize> {
// TODO: Use `self.end.as_ref()` when upstream `std` stabilizes:
// https://github.com/rust-lang/rust/issues/80996
match self.end {
Bound::Included(ref bound) => Bound::Included(bound),
Bound::Excluded(ref bound) => Bound::Excluded(bound),
Bound::Unbounded => Bound::Unbounded,
}
}
}
```
See:
- #80996
- https://github.com/rust-lang/rust/issues/80996#issuecomment-1194575470
cc `@yaahc` who suggested partial stabilization.
|
|
Shrink `thir::Pat`
r? `@cjgillot`
|
|
r=pnkfelix
Revert "Remove deferred sized checks"
cc: https://github.com/rust-lang/rust/pull/100652#issuecomment-1225798572
I'm okay with reverting this for now, and I will look into the diagnostic regressions.
This reverts commit 33212bf7f527798a8cfa2bbb38781742f4ca718a.
r? `@pnkfelix`
----
EDIT: This _also_ fixes #101066, a regression in method selection logic/coercion(?) due to the early registering of a `Sized` bound.
|
|
In the future,`ffx component run` will not default to the using the `/core/ffx-laboratory` collection. Updated the run commands to include this.
|
|
|
|
|
|
Support `#[unix_sigpipe = "inherit|sig_dfl"]` on `fn main()` to prevent ignoring `SIGPIPE`
When enabled, programs don't have to explicitly handle `ErrorKind::BrokenPipe` any longer. Currently, the program
```rust
fn main() { loop { println!("hello world"); } }
```
will print an error if used with a short-lived pipe, e.g.
% ./main | head -n 1
hello world
thread 'main' panicked at 'failed printing to stdout: Broken pipe (os error 32)', library/std/src/io/stdio.rs:1016:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
by enabling `#[unix_sigpipe = "sig_dfl"]` like this
```rust
#![feature(unix_sigpipe)]
#[unix_sigpipe = "sig_dfl"]
fn main() { loop { println!("hello world"); } }
```
there is no error, because `SIGPIPE` will not be ignored and thus the program will be killed appropriately:
% ./main | head -n 1
hello world
The current libstd behaviour of ignoring `SIGPIPE` before `fn main()` can be explicitly requested by using `#[unix_sigpipe = "sig_ign"]`.
With `#[unix_sigpipe = "inherit"]`, no change at all is made to `SIGPIPE`, which typically means the behaviour will be the same as `#[unix_sigpipe = "sig_dfl"]`.
See https://github.com/rust-lang/rust/issues/62569 and referenced issues for discussions regarding the `SIGPIPE` problem itself
See the [this](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/Proposal.3A.20First.20step.20towards.20solving.20the.20SIGPIPE.20problem) Zulip topic for more discussions, including about this PR.
Tracking issue: https://github.com/rust-lang/rust/issues/97889
|
|
|
|
|
|
|
|
It was added with e08a84a0c18739417a50c3e46917ced5037244eb
(actually, it was called `.methods > .stability` at the time) and was
directly nested that way.
But with the switch to `<details>`, the code has changed drastically out from
under it, to the point where you have to go out of your way to actually get
it to render this way, and the result looks overly-tight and weird alongside
the normal version where this code is not reachable.
|
|
Rollup of 6 pull requests
Successful merges:
- #100121 (Try normalizing types without RevealAll in ParamEnv in MIR validation)
- #100200 (Change implementation of `-Z gcc-ld` and `lld-wrapper` again)
- #100814 ( Porting 'compiler/rustc_trait_selection' to translatable diagnostics - Part 1)
- #101215 (Also replace the version placeholder in rustc_attr)
- #101260 (Use `FILE_ATTRIBUTE_TAG_INFO` to get reparse tag)
- #101323 (Remove unused .toggle-label CSS rule)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Fuchsia .manifest files do not support a `#` comment syntax. Because of this, if you copy and paste the current example code for this file, and then remove the line you don't need, you still see an error. To make this a bit easier to follow, split this into two code blocks, one for rustc, and one for cargo.
|
|
Remove unused .toggle-label CSS rule
It was added in https://github.com/rust-lang/rust/pull/44192 but since we moved to `<details>`, we don't use this rule any more.
r? `@notriddle`
|
|
Use `FILE_ATTRIBUTE_TAG_INFO` to get reparse tag
I've been looking at this code recently and it just occurred to me we don't actually use the full reparse data at this point, only the tag. [`GetFileInformationByHandleEx`](https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getfileinformationbyhandleex) can do exactly that by filling a [`FILE_ATTRIBUTE_TAG_INFO`](https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_attribute_tag_info) struct.
r? ```````@thomcc``````` since you've made changes here recently (which is why I have this code on my mind atm)
|
|
Also replace the version placeholder in rustc_attr
Replace the version placeholder with the current version in the rustc_attr crate too so that users won't see the placeholder but instead the explicit version. This especially fixes the bug for rustdoc not showing it but instead the placeholder.
Originally reported [here](https://rust-lang.zulipchat.com/#narrow/stream/241545-t-release/topic/libs.20stabilization.20placeholder/near/296057188).
cc #100591

|
|
r=davidtwco
Porting 'compiler/rustc_trait_selection' to translatable diagnostics - Part 1
``@rustbot`` label +A-translation
r? rust-lang/diagnostics
cc #100717
|
|
Change implementation of `-Z gcc-ld` and `lld-wrapper` again
This PR partially reverts https://github.com/rust-lang/rust/pull/97375 and uses the strategy described in https://github.com/rust-lang/rust/issues/97402#issuecomment-1147404520 instead, thus fixes https://github.com/rust-lang/rust/issues/97755.
|
|
Try normalizing types without RevealAll in ParamEnv in MIR validation
Before, the MIR validator used RevealAll in its ParamEnv for type
checking. This could cause false negatives in some cases due to
RevealAll ParamEnvs not always use all predicates as expected here.
Since some MIR passes like inlining use RevealAll as well, keep using
it in the MIR validator too, but when it fails usign RevealAll, also
try the check without it, to stop false negatives.
Fixes #99866
cc ````````@compiler-errors```````` who nicely helped me on zulip
|