Repository navigation
cycle handling: mirror old solver - #163496
Conversation
|
Some changes occurred to the core trait solver cc @rust-lang/initiative-trait-system-refactor |
9ed2cc0 to
14d09db
Compare
This comment has been minimized.
This comment has been minimized.
|
This seems fairly straightforward. The only minor comment: I wonder if it's worth to split this into two commits: one "prep" commit and one that actually changes the behavior. r? jackh726 |
would generally be yeah, rn that would require temporary changes to Also added a regression test for one way the old and new solver diverge wrt cycle handling (found via an llm) @bors r+ rollup |
|
@bors r=jackh726 |
|
This pull request was unapproved. |
|
@bors r=jackh726 rollup |
This comment has been minimized.
This comment has been minimized.
582ece7 to
7238eac
Compare
|
This pull request was unapproved. |
|
@bors r=jackh726 rollup |
7238eac to
654d664
Compare
|
This pull request was unapproved. |
|
@bors r=jackh726 rollup |
…h726 cycle handling: mirror old solver I hate other people being right :< When stabilizing the new solver, we really want to minimize the amount of things we're stabilizing. This far more closely matches the old solver while still being somewhat principled. I do think the approach we had before this PR is closer to the final state we want, but I am far from confident that this is the case and this gives us more room to experiment until then. The rules are as follows: a cycle is coinductive if there's at least one "coinductive trait goal" involved and the only other involved goals are `Projection` goals. r? types cc @jackh726
…h726 cycle handling: mirror old solver I hate other people being right :< When stabilizing the new solver, we really want to minimize the amount of things we're stabilizing. This far more closely matches the old solver while still being somewhat principled. I do think the approach we had before this PR is closer to the final state we want, but I am far from confident that this is the case and this gives us more room to experiment until then. The rules are as follows: a cycle is coinductive if there's at least one "coinductive trait goal" involved and the only other involved goals are `Projection` goals. r? types cc @jackh726
…h726 cycle handling: mirror old solver I hate other people being right :< When stabilizing the new solver, we really want to minimize the amount of things we're stabilizing. This far more closely matches the old solver while still being somewhat principled. I do think the approach we had before this PR is closer to the final state we want, but I am far from confident that this is the case and this gives us more room to experiment until then. The rules are as follows: a cycle is coinductive if there's at least one "coinductive trait goal" involved and the only other involved goals are `Projection` goals. r? types cc @jackh726
…uwer Rollup of 18 pull requests Successful merges: - #163532 (rustc_codegen_cranelift subtree update) - #163534 (miri subtree update) - #163279 (const and NonZero impl for clamp_magnitude()) - #162900 (Some refactorings around metadata encoding) - #163455 (Don't use the metadata based crate_hash for rustdoc runs) - #163483 (Bump bootstrap compiler to 1.100.0 beta) - #159798 (Attribute documentation for cfg_attr) - #163368 (Don't build format string suggestions from `concat!` offsets) - #163375 (Update expect messages in library/std/src/os/unix/net/ following Rust's `expect` guidance) - #163405 (Remove some #[linkage] options) - #163470 (Miscellaneous attr error stuff) - #163489 (expose Rc::is_unique) - #163492 (x86 and x86_64: cleanup some callconv code) - #163496 (cycle handling: mirror old solver) - #163509 (Use more default field values in `Resolver`) - #163519 (Forbid `Reborrow` impls for types with destructors) - #163520 (Cast cleanups) - #163524 (Document `Result` case for the `arena_cache` query modifier) Failed merges: - #163547 ([beta] rustfmt backport)
…h726 cycle handling: mirror old solver I hate other people being right :< When stabilizing the new solver, we really want to minimize the amount of things we're stabilizing. This far more closely matches the old solver while still being somewhat principled. I do think the approach we had before this PR is closer to the final state we want, but I am far from confident that this is the case and this gives us more room to experiment until then. The rules are as follows: a cycle is coinductive if there's at least one "coinductive trait goal" involved and the only other involved goals are `Projection` goals. r? types cc @jackh726
…uwer Rollup of 18 pull requests Successful merges: - #163532 (rustc_codegen_cranelift subtree update) - #163534 (miri subtree update) - #163279 (const and NonZero impl for clamp_magnitude()) - #162900 (Some refactorings around metadata encoding) - #163455 (Don't use the metadata based crate_hash for rustdoc runs) - #159798 (Attribute documentation for cfg_attr) - #162921 (make mips64 `Complex` GCC-compatible) - #163368 (Don't build format string suggestions from `concat!` offsets) - #163375 (Update expect messages in library/std/src/os/unix/net/ following Rust's `expect` guidance) - #163405 (Remove some #[linkage] options) - #163470 (Miscellaneous attr error stuff) - #163489 (expose Rc::is_unique) - #163492 (x86 and x86_64: cleanup some callconv code) - #163496 (cycle handling: mirror old solver) - #163509 (Use more default field values in `Resolver`) - #163519 (Forbid `Reborrow` impls for types with destructors) - #163520 (Cast cleanups) - #163524 (Document `Result` case for the `arena_cache` query modifier)
…uwer Rollup of 18 pull requests Successful merges: - #163532 (rustc_codegen_cranelift subtree update) - #163534 (miri subtree update) - #163279 (const and NonZero impl for clamp_magnitude()) - #162900 (Some refactorings around metadata encoding) - #163455 (Don't use the metadata based crate_hash for rustdoc runs) - #159798 (Attribute documentation for cfg_attr) - #162921 (make mips64 `Complex` GCC-compatible) - #163368 (Don't build format string suggestions from `concat!` offsets) - #163375 (Update expect messages in library/std/src/os/unix/net/ following Rust's `expect` guidance) - #163405 (Remove some #[linkage] options) - #163470 (Miscellaneous attr error stuff) - #163489 (expose Rc::is_unique) - #163492 (x86 and x86_64: cleanup some callconv code) - #163496 (cycle handling: mirror old solver) - #163509 (Use more default field values in `Resolver`) - #163519 (Forbid `Reborrow` impls for types with destructors) - #163520 (Cast cleanups) - #163524 (Document `Result` case for the `arena_cache` query modifier)
Rollup of 20 pull requests Successful merges: - #163279 (const and NonZero impl for clamp_magnitude()) - #163081 (Provide more context on "not general enough" error) - #163455 (Don't use the metadata based crate_hash for rustdoc runs) - #159798 (Attribute documentation for cfg_attr) - #162921 (make mips64 `Complex` GCC-compatible) - #163368 (Don't build format string suggestions from `concat!` offsets) - #163375 (Update expect messages in library/std/src/os/unix/net/ following Rust's `expect` guidance) - #163470 (Miscellaneous attr error stuff) - #163489 (expose Rc::is_unique) - #163492 (x86 and x86_64: cleanup some callconv code) - #163496 (cycle handling: mirror old solver) - #163509 (Use more default field values in `Resolver`) - #163519 (Forbid `Reborrow` impls for types with destructors) - #163520 (Cast cleanups) - #163524 (Document `Result` case for the `arena_cache` query modifier) - #163546 (PassWrapper: adapt for new PassPlugin load method) - #163551 (Add libs-nominated triagebot config) - #163559 (Suggest `#[unsafe(no_mangle)]` for entry points in `no_std` binaries) - #163564 (rustc-dev-guide subtree update) - #163568 (remove dead cfg_select! arm)
Rollup merge of #163496 - lcnr:weaken-cycle-handling, r=jackh726 cycle handling: mirror old solver I hate other people being right :< When stabilizing the new solver, we really want to minimize the amount of things we're stabilizing. This far more closely matches the old solver while still being somewhat principled. I do think the approach we had before this PR is closer to the final state we want, but I am far from confident that this is the case and this gives us more room to experiment until then. The rules are as follows: a cycle is coinductive if there's at least one "coinductive trait goal" involved and the only other involved goals are `Projection` goals. r? types cc @jackh726
Rollup of 20 pull requests Successful merges: - rust-lang/rust#163279 (const and NonZero impl for clamp_magnitude()) - rust-lang/rust#163081 (Provide more context on "not general enough" error) - rust-lang/rust#163455 (Don't use the metadata based crate_hash for rustdoc runs) - rust-lang/rust#159798 (Attribute documentation for cfg_attr) - rust-lang/rust#162921 (make mips64 `Complex` GCC-compatible) - rust-lang/rust#163368 (Don't build format string suggestions from `concat!` offsets) - rust-lang/rust#163375 (Update expect messages in library/std/src/os/unix/net/ following Rust's `expect` guidance) - rust-lang/rust#163470 (Miscellaneous attr error stuff) - rust-lang/rust#163489 (expose Rc::is_unique) - rust-lang/rust#163492 (x86 and x86_64: cleanup some callconv code) - rust-lang/rust#163496 (cycle handling: mirror old solver) - rust-lang/rust#163509 (Use more default field values in `Resolver`) - rust-lang/rust#163519 (Forbid `Reborrow` impls for types with destructors) - rust-lang/rust#163520 (Cast cleanups) - rust-lang/rust#163524 (Document `Result` case for the `arena_cache` query modifier) - rust-lang/rust#163546 (PassWrapper: adapt for new PassPlugin load method) - rust-lang/rust#163551 (Add libs-nominated triagebot config) - rust-lang/rust#163559 (Suggest `#[unsafe(no_mangle)]` for entry points in `no_std` binaries) - rust-lang/rust#163564 (rustc-dev-guide subtree update) - rust-lang/rust#163568 (remove dead cfg_select! arm)
Rollup of 20 pull requests Successful merges: - rust-lang/rust#163279 (const and NonZero impl for clamp_magnitude()) - rust-lang/rust#163081 (Provide more context on "not general enough" error) - rust-lang/rust#163455 (Don't use the metadata based crate_hash for rustdoc runs) - rust-lang/rust#159798 (Attribute documentation for cfg_attr) - rust-lang/rust#162921 (make mips64 `Complex` GCC-compatible) - rust-lang/rust#163368 (Don't build format string suggestions from `concat!` offsets) - rust-lang/rust#163375 (Update expect messages in library/std/src/os/unix/net/ following Rust's `expect` guidance) - rust-lang/rust#163470 (Miscellaneous attr error stuff) - rust-lang/rust#163489 (expose Rc::is_unique) - rust-lang/rust#163492 (x86 and x86_64: cleanup some callconv code) - rust-lang/rust#163496 (cycle handling: mirror old solver) - rust-lang/rust#163509 (Use more default field values in `Resolver`) - rust-lang/rust#163519 (Forbid `Reborrow` impls for types with destructors) - rust-lang/rust#163520 (Cast cleanups) - rust-lang/rust#163524 (Document `Result` case for the `arena_cache` query modifier) - rust-lang/rust#163546 (PassWrapper: adapt for new PassPlugin load method) - rust-lang/rust#163551 (Add libs-nominated triagebot config) - rust-lang/rust#163559 (Suggest `#[unsafe(no_mangle)]` for entry points in `no_std` binaries) - rust-lang/rust#163564 (rustc-dev-guide subtree update) - rust-lang/rust#163568 (remove dead cfg_select! arm)
I hate other people being right :<
When stabilizing the new solver, we really want to minimize the amount of things we're stabilizing. This far more closely matches the old solver while still being somewhat principled. I do think the approach we had before this PR is closer to the final state we want, but I am far from confident that this is the case and this gives us more room to experiment until then.
The rules are as follows: a cycle is coinductive if there's at least one "coinductive trait goal" involved and the only other involved goals are
Projectiongoals.r? types cc @jackh726