Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error on incorrect implied bounds in wfcheck except for Bevy dependents #118553

Merged
merged 3 commits into from Jan 18, 2024

Conversation

jackh726
Copy link
Member

@jackh726 jackh726 commented Dec 2, 2023

Rebase of #109763

Additionally, special cases Bevy ParamSet types to not trigger the lint. This is tracked in #119956.

Fixes #109628
Fixes #109799

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Dec 2, 2023
@jackh726
Copy link
Member Author

jackh726 commented Dec 2, 2023

@bors try

@bors
Copy link
Contributor

bors commented Dec 2, 2023

⌛ Trying commit b4485be with merge 1f34c1d...

bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 2, 2023
lint incorrect implied bounds in wfcheck except for Bevy dependents

Rebase of rust-lang#109763

Additionally, special cases Bevy `ParamSet` types to not trigger the lint.

Opening for crater

r? `@ghost`
@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Contributor

bors commented Dec 3, 2023

☀️ Try build successful - checks-actions
Build commit: 1f34c1d (1f34c1de16b990f2dfcb25ad6528e0fbc4c3092a)

@jackh726
Copy link
Member Author

jackh726 commented Dec 3, 2023

@craterbot
Copy link
Collaborator

👌 Experiment pr-118553 created and queued.
🤖 Automatically detected try build 1f34c1d
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Dec 3, 2023
@craterbot
Copy link
Collaborator

🚧 Experiment pr-118553 is now running

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot
Copy link
Collaborator

🎉 Experiment pr-118553 is completed!
📊 33 regressed and 0 fixed (428 total)
📰 Open the full report.

⚠️ If you notice any spurious failure please add them to the blacklist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-crater Status: Waiting on a crater run to be completed. labels Dec 3, 2023
@jackh726
Copy link
Member Author

jackh726 commented Dec 3, 2023

@bors try

@bors
Copy link
Contributor

bors commented Dec 3, 2023

⌛ Trying commit b4e3421 with merge a1ab930...

bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 3, 2023
lint incorrect implied bounds in wfcheck except for Bevy dependents

Rebase of rust-lang#109763

Additionally, special cases Bevy `ParamSet` types to not trigger the lint.

Opening for crater

r? `@ghost`
@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Contributor

bors commented Dec 3, 2023

☀️ Try build successful - checks-actions
Build commit: a1ab930 (a1ab9307c2d2e67595eb3bb22fd707ccd1f71e33)

@jackh726
Copy link
Member Author

jackh726 commented Dec 3, 2023

@craterbot
Copy link
Collaborator

👌 Experiment pr-118553-1 created and queued.
🤖 Automatically detected try build a1ab930
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Dec 3, 2023
@craterbot
Copy link
Collaborator

🚧 Experiment pr-118553-1 is now running

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot
Copy link
Collaborator

🎉 Experiment pr-118553-1 is completed!
📊 0 regressed and 0 fixed (428 total)
📰 Open the full report.

⚠️ If you notice any spurious failure please add them to the blacklist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-crater Status: Waiting on a crater run to be completed. labels Dec 3, 2023
@jackh726
Copy link
Member Author

jackh726 commented Dec 3, 2023

Great, now for everything.

@craterbot check

@craterbot
Copy link
Collaborator

👌 Experiment pr-118553-2 created and queued.
🤖 Automatically detected try build a1ab930
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (a34faab): comparison URL.

Overall result: ❌✅ regressions and improvements - ACTION NEEDED

Next Steps: If you can justify the regressions found in this perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please open an issue or create a new PR that fixes the regressions, add a comment linking to the newly created issue or PR, and then add the perf-regression-triaged label to this PR.

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.7% [0.2%, 1.6%] 30
Regressions ❌
(secondary)
0.4% [0.2%, 0.6%] 13
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.0% [-1.2%, -0.8%] 6
All ❌✅ (primary) 0.7% [0.2%, 1.6%] 30

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
2.9% [0.5%, 7.2%] 3
Regressions ❌
(secondary)
0.8% [0.8%, 0.8%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 2.9% [0.5%, 7.2%] 3

Cycles

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
1.1% [1.0%, 1.3%] 2
Regressions ❌
(secondary)
2.1% [2.1%, 2.2%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 1.1% [1.0%, 1.3%] 2

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 665.735s -> 666.175s (0.07%)
Artifact size: 308.27 MiB -> 308.36 MiB (0.03%)

@rustbot rustbot added the perf-regression Performance regression. label Jan 18, 2024
@jackh726 jackh726 deleted the lint-implied-bounds branch January 18, 2024 18:53
@alice-i-cecile
Copy link

FYI, MIRI runs just started failing for us after this was merged:

https://github.com/bevyengine/bevy/actions/runs/7578583138/job/20641401467

We'll turn it off as a mandatory CI check for now, and look at prioritizing a fix (but probably not backporting).

@jackh726
Copy link
Member Author

Interesting, an MCVE would be good. I'll try to look into it.

@jackh726
Copy link
Member Author

I unsuccessfully tried to reproduce the CI error:

pub trait WorldQuery {}
impl<T> WorldQuery for &T {}

impl<T> WorldQuery for & mut T {}

pub struct Query<Q: WorldQuery>(Q);

pub trait SystemParam {
   type State;
}
impl<Q: WorldQuery + 'static> SystemParam for Query<Q> {
   type State = ();
}


impl<P0, P1> SystemParam for (P0, P1)
where
   P0: SystemParam,
   P1: SystemParam,
{
   type State = (<P0 as SystemParam>::State, <P1 as SystemParam>::State);
}

pub struct ParamSet<T: SystemParam>(T) where T::State: Sized;

struct A;

fn sys(mut _set: ParamSet<(Query<&mut A>, Query<&A>)>) {}

fn main() {}

@jackh726
Copy link
Member Author

I'm guessing it has to do with the rest of the test function.

reference for later:

run_system

impl IntoSystem<...> for F where F: SystemParamFunction<...>

impl SystemParamFunction<...> for Func

Probably need to pull out those impls into the test.

github-merge-queue bot pushed a commit to bevyengine/bevy that referenced this pull request Jan 19, 2024
…version (#11421)

# Objective

- rust-lang/rust#118553 seems to have broken
miri test

## Solution

- Pin nightly to before it was merged
@lcnr
Copy link
Contributor

lcnr commented Jan 19, 2024

pub trait WorldQuery {}
impl<T> WorldQuery for &T {}

impl<T> WorldQuery for & mut T {}

pub struct Query<Q: WorldQuery>(Q);

pub trait SystemParam {
   type State;
}
impl<Q: WorldQuery + 'static> SystemParam for Query<Q> {
   type State = ();
}


impl<P0, P1> SystemParam for (P0, P1)
where
   P0: SystemParam,
   P1: SystemParam,
{
   type State = (<P0 as SystemParam>::State, <P1 as SystemParam>::State);
}

pub struct ParamSet<T: SystemParam>(T) where T::State: Sized;

struct A;

fn sys(_set1: ParamSet<(Query<&mut A>, Query<&A>)>) {
    let _: ParamSet<_> = _set1;
}

fn main() {}

I think the error happens because MIR borrowck uses the new implied bounds computation instead of the old one. So while WF check passes, MIR borrowck does not.

bors added a commit to rust-lang-ci/rust that referenced this pull request Jan 19, 2024
use implied bounds compat mode in MIR borrowck

cc
- rust-lang#119956
- rust-lang#118553

This should hopefully fix bevy 🤔 `cargo test` ends up freezing my computer though, cargo build went from err to ok however 😁

r? `@jackh726`
@alice-i-cecile
Copy link

alice-i-cecile commented Jan 19, 2024

We're getting new users reporting that this error is surfacing in clean builds of Bevy on nightly. Swapping back to stable fixed it.

I can reproduce it both when building Bevy itself, and in an empty project with a dependency on Bevy 0.12.1, with:

rustc 1.77.0-nightly (25f8d01fd 2024-01-18)
binary: rustc
commit-hash: 25f8d01fd8bda339612d0c0a8844173a09205f7c
commit-date: 2024-01-18
host: x86_64-pc-windows-msvc
release: 1.77.0-nightly
LLVM version: 17.0.6

The error:

   Compiling bevy_transform v0.12.1
error: lifetime may not live long enough
  --> C:\Users\alice\.cargo\registry\src\index.crates.io-6f17d22bba15001f\bevy_transform-0.12.1\src\systems.rs:14:1
   |
14 | / pub fn sync_simple_transforms(
15 | |     mut query: ParamSet<(
16 | |         Query<
17 | |             (&Transform, &mut GlobalTransform),
   | |              - let's call the lifetime of this reference `'1`
...  |
26 | |     mut orphaned: RemovedComponents<Parent>,
27 | | ) {
   | |_^ requires that `'1` must outlive `'static`

error: lifetime may not live long enough
  --> C:\Users\alice\.cargo\registry\src\index.crates.io-6f17d22bba15001f\bevy_transform-0.12.1\src\systems.rs:14:1
   |
14 | / pub fn sync_simple_transforms(
15 | |     mut query: ParamSet<(
16 | |         Query<
17 | |             (&Transform, &mut GlobalTransform),
   | |                          - let's call the lifetime of this reference `'2`
...  |
26 | |     mut orphaned: RemovedComponents<Parent>,
27 | | ) {
   | |_^ requires that `'2` must outlive `'static`

error: lifetime may not live long enough
  --> C:\Users\alice\.cargo\registry\src\index.crates.io-6f17d22bba15001f\bevy_transform-0.12.1\src\systems.rs:14:1
   |
14 | / pub fn sync_simple_transforms(
15 | |     mut query: ParamSet<(
   | |     --------- has type `ParamSet<'_, '_, (Query<'_, '_, (&transform::Transform, &mut global_transform::GlobalTransform), (Or<(Changed<transform::Transform>, Added<global_transform::GlobalTransform>)>, Without<Parent>, Without<Children>)>, Query<'_, '_, (bevy_ecs::change_detection::Ref<'3, transform::Transform>, &mut global_transform::GlobalTransform), (Without<Parent>, Without<Children>)>)>`
16 | |         Query<
17 | |             (&Transform, &mut GlobalTransform),
...  |
26 | |     mut orphaned: RemovedComponents<Parent>,
27 | | ) {
   | |_^ requires that `'3` must outlive `'static`

error: lifetime may not live long enough
  --> C:\Users\alice\.cargo\registry\src\index.crates.io-6f17d22bba15001f\bevy_transform-0.12.1\src\systems.rs:14:1
   |
14 | / pub fn sync_simple_transforms(
15 | |     mut query: ParamSet<(
16 | |         Query<
17 | |             (&Transform, &mut GlobalTransform),
...  |
24 | |         Query<(Ref<Transform>, &mut GlobalTransform), (Without<Parent>, Without<Children>)>,
   | |                                - let's call the lifetime of this reference `'4`
25 | |     )>,
26 | |     mut orphaned: RemovedComponents<Parent>,
27 | | ) {
   | |_^ requires that `'4` must outlive `'static`

error: could not compile `bevy_transform` (lib) due to 4 previous errors

@BoxyUwU
Copy link
Member

BoxyUwU commented Jan 19, 2024

I don't understand how this wasn't caught. did nobody try to compile bevy with this PR to make sure nothing broke?

@jackh726
Copy link
Member Author

It was missed because the Bevy test that was previously added didn't adequately cover this. I made changes (to move MIR borrowck to non-compat) after the crater run, and that's what caused the regression.

This happens and is why we have nightly.

@jackh726
Copy link
Member Author

The problem will be fixed after #120123 lands (which should be in the next few hours).

bors added a commit to rust-lang-ci/rust that referenced this pull request Jan 19, 2024
use implied bounds compat mode in MIR borrowck

cc
- rust-lang#119956
- rust-lang#118553

This should hopefully fix bevy 🤔 `cargo test` ends up freezing my computer though, cargo build went from err to ok however 😁

r? `@jackh726`
@nnethercote
Copy link
Contributor

@jackh726, @lcnr: some non-trivial perf regressions occurred. Were they expected? Can they be mitigated?

@jackh726
Copy link
Member Author

If I had to guess, between this and #120123, perf is a bit of a wash.

@Kobzol
Copy link
Contributor

Kobzol commented Jan 23, 2024

On diesel, this mostly just undone the wins from #120123:
image

The other regressions look genuine, but since this was a correctness fix, I'll go ahead and mark this as triaged.

@rustbot label: +perf-regression-triaged

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Jan 23, 2024
@apiraino apiraino removed the to-announce Announce this issue on triage meeting label Jan 25, 2024
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Mar 29, 2024
Pkgsrc changes:
 * Adapt checksums and patches.

Upstream chnages:

Version 1.77.0 (2024-03-21)
==========================

- [Reveal opaque types within the defining body for exhaustiveness checking.]
  (rust-lang/rust#116821)
- [Stabilize C-string literals.]
  (rust-lang/rust#117472)
- [Stabilize THIR unsafeck.]
  (rust-lang/rust#117673)
- [Add lint `static_mut_refs` to warn on references to mutable statics.]
  (rust-lang/rust#117556)
- [Support async recursive calls (as long as they have indirection).]
  (rust-lang/rust#117703)
- [Undeprecate lint `unstable_features` and make use of it in the compiler.]
  (rust-lang/rust#118639)
- [Make inductive cycles in coherence ambiguous always.]
  (rust-lang/rust#118649)
- [Get rid of type-driven traversal in const-eval interning]
  (rust-lang/rust#119044),
  only as a [future compatiblity lint]
  (rust-lang/rust#122204) for now.
- [Deny braced macro invocations in let-else.]
  (rust-lang/rust#119062)

Compiler
--------

- [Include lint `soft_unstable` in future breakage reports.]
  (rust-lang/rust#116274)
- [Make `i128` and `u128` 16-byte aligned on x86-based targets.]
  (rust-lang/rust#116672)
- [Use `--verbose` in diagnostic output.]
  (rust-lang/rust#119129)
- [Improve spacing between printed tokens.]
  (rust-lang/rust#120227)
- [Merge the `unused_tuple_struct_fields` lint into `dead_code`.]
  (rust-lang/rust#118297)
- [Error on incorrect implied bounds in well-formedness check]
  (rust-lang/rust#118553),
  with a temporary exception for Bevy.
- [Fix coverage instrumentation/reports for non-ASCII source code.]
  (rust-lang/rust#119033)
- [Fix `fn`/`const` items implied bounds and well-formedness check.]
  (rust-lang/rust#120019)
- [Promote `riscv32{im|imafc}-unknown-none-elf` targets to tier 2.]
  (rust-lang/rust#118704)
- Add several new tier 3 targets:
  - [`aarch64-unknown-illumos`]
    (rust-lang/rust#112936)
  - [`hexagon-unknown-none-elf`]
    (rust-lang/rust#117601)
  - [`riscv32imafc-esp-espidf`]
    (rust-lang/rust#119738)
  - [`riscv32im-risc0-zkvm-elf`]
    (rust-lang/rust#117958)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

Libraries
---------

- [Implement `From<&[T; N]>` for `Cow<[T]>`.]
  (rust-lang/rust#113489)
- [Remove special-case handling of `vec.split_off
  (0)`.](rust-lang/rust#119917)

Stabilized APIs
---------------

- [`array::each_ref`]
  (https://doc.rust-lang.org/stable/std/primitive.array.html#method.each_ref)
- [`array::each_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.array.html#method.each_mut)
- [`core::net`]
  (https://doc.rust-lang.org/stable/core/net/index.html)
- [`f32::round_ties_even`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round_ties_even)
- [`f64::round_ties_even`]
  (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round_ties_even)
- [`mem::offset_of!`]
  (https://doc.rust-lang.org/stable/std/mem/macro.offset_of.html)
- [`slice::first_chunk`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.first_chunk)
- [`slice::first_chunk_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.first_chunk_mut)
- [`slice::split_first_chunk`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_first_chunk)
- [`slice::split_first_chunk_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_first_chunk_mut)
- [`slice::last_chunk`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.last_chunk)
- [`slice::last_chunk_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.last_chunk_mut)
- [`slice::split_last_chunk`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_last_chunk)
- [`slice::split_last_chunk_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_last_chunk_mut)
- [`slice::chunk_by`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.chunk_by)
- [`slice::chunk_by_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.chunk_by_mut)
- [`Bound::map`]
  (https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.map)
- [`File::create_new`]
  (https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.create_new)
- [`Mutex::clear_poison`]
  (https://doc.rust-lang.org/stable/std/sync/struct.Mutex.html#method.clear_poison)
- [`RwLock::clear_poison`]
  (https://doc.rust-lang.org/stable/std/sync/struct.RwLock.html#method.clear_poison)

Cargo
-----

- [Extend the build directive syntax with `cargo::`.]
  (rust-lang/cargo#12201)
- [Stabilize metadata `id` format as `PackageIDSpec`.]
  (rust-lang/cargo#12914)
- [Pull out as `cargo-util-schemas` as a crate.]
  (rust-lang/cargo#13178)
- [Strip all debuginfo when debuginfo is not requested.]
  (rust-lang/cargo#13257)
- [Inherit jobserver from env for all kinds of runners.]
  (rust-lang/cargo#12776)
- [Deprecate rustc plugin support in cargo.]
  (rust-lang/cargo#13248)

Rustdoc
-----

- [Allows links in markdown headings.]
  (rust-lang/rust#117662)
- [Search for tuples and unit by type with `()`.]
  (rust-lang/rust#118194)
- [Clean up the source sidebar's hide button.]
  (rust-lang/rust#119066)
- [Prevent JS injection from `localStorage`.]
  (rust-lang/rust#120250)

Misc
----

- [Recommend version-sorting for all sorting in style guide.]
  (rust-lang/rust#115046)

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

- [Add more weirdness to `weird-exprs.rs`.]
  (rust-lang/rust#119028)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. perf-regression-triaged The performance regression has been triaged. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. S-waiting-on-fcp Status: PR is in FCP and is awaiting for FCP to complete. T-types Relevant to the types team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

bounds on trait impls are used in implied bounds incomplete normalization in implied bounds