Avoid manually instantiating some binders in error reporting with -Znext-solver - #162262
Conversation
|
Some changes occurred to the core trait solver cc @rust-lang/initiative-trait-system-refactor |
|
r? @fee1-dead rustbot has assigned @fee1-dead. Use Why was this reviewer chosen?The reviewer was selected based on:
|
|
@rustbot reroll |
This comment was marked as resolved.
This comment was marked as resolved.
| | -----^----- | ||
| | | | | ||
| | | the trait solver is unable to infer the generic types that should be inferred from this argument | ||
| | add turbofish arguments to this call to specify the types manually, even if it's redundant |
There was a problem hiding this comment.
This is kind of a diagnostics regression, since before, we called ocx.normalize on the obligation before registering it, whereas now it doesn't seem like we can handle the unnormalized <Self as ATC<'a>>::Type inside the binder if it's not normalized beforehand.
|
@rustbot reroll |
There was a problem hiding this comment.
We used to normalize the predicate here. Don't we need it anymore?
|
@rustbot reroll |
Avoid manually instantiating some binders in error reporting with `-Znext-solver` If we call `enter_forall` on a binder before passing it to the new solver, the placeholders that come from instantiation get canonicalized before solving happens. This can be a problem if we end up equating one variable whose universe can't name another variable's, since the equate will succeed in the solver since canonicalization sets all universe indices to the root universe but fail when we actually construct the response with fresh vars at the correct universes, which causes an ICE. We now just hand the unopened binder to the trait solver directly, since (I believe) both solvers are able to handle that just fine. This came up while I was looking at https://rust-lang.zulipchat.com/#narrow/channel/618216-t-types.2Fcall-for-participation/topic/next-solver.20UI.20test.20triage/with/612965995, and the `universe-error-host-effect.rs`/`poly_select` change was basically the same type of ICE that I found while investigating the first one.
Avoid manually instantiating some binders in error reporting with `-Znext-solver` If we call `enter_forall` on a binder before passing it to the new solver, the placeholders that come from instantiation get canonicalized before solving happens. This can be a problem if we end up equating one variable whose universe can't name another variable's, since the equate will succeed in the solver since canonicalization sets all universe indices to the root universe but fail when we actually construct the response with fresh vars at the correct universes, which causes an ICE. We now just hand the unopened binder to the trait solver directly, since (I believe) both solvers are able to handle that just fine. This came up while I was looking at https://rust-lang.zulipchat.com/#narrow/channel/618216-t-types.2Fcall-for-participation/topic/next-solver.20UI.20test.20triage/with/612965995, and the `universe-error-host-effect.rs`/`poly_select` change was basically the same type of ICE that I found while investigating the first one.
Rollup of 27 pull requests Successful merges: - #159074 ([PAC] FnAbi, llvm.ptrauth.resign and Session API change (2/8)) - #159792 (A more readable debug map for IndexMaps) - #160745 (make closures act like MaybeDangling) - #161940 (Promote `wasm32-wasip3` to a tier 2 target) - #162030 (Prevent `--test` to be used in `rustdoc-html` testsuite) - #162072 (Add new Tier-3 target: `powerpc64-sony-ps3`) - #162179 (type system const items via direct rhs) - #162262 (Avoid manually instantiating some binders in error reporting with `-Znext-solver`) - #162277 (Introduce `rustc_middle::middel::resolve`) - #162285 (box: fixup map/try_map deallocate calls) - #162286 (string: don't unwind prematurely) - #162289 (alloc: a bunch of safety comments) - #162290 (abby test DSL: AliasTyOutlivesViaEnv) - #162292 (Update `askama` version to `0.16.1`) - #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`) - #160906 (Suggest usize instead of placeholder type for array length constants) - #160936 (traits: Represent live alias arguments as bitsets) - #161400 (Improve diagnostics for references to closures) - #161656 (Suggest mutable references for FnMut closure arguments) - #161711 (Add more splat fn type tests) - #161786 (Make `tcx.def_id_partial_cmp` public) - #161953 (sanitizers: Implicitly disable mutually exclusive sanitizers) - #162155 (add suggestion for `rustc_allowed_through_unstable_modules` attribute) - #162212 (Implement `Rng` for `Box`) - #162246 (Fix incorrect meta span) - #162266 (std: fix typo) - #162291 (Add regression test from 1.98.1)
…uwer Rollup of 25 pull requests Successful merges: - #162072 (Add new Tier-3 target: `powerpc64-sony-ps3`) - #162179 (type system const items via direct rhs) - #162255 (let people change rustc-dev-guide in-tree) - #162262 (Avoid manually instantiating some binders in error reporting with `-Znext-solver`) - #162277 (Introduce `rustc_middle::middel::resolve`) - #162285 (box: fixup map/try_map deallocate calls) - #162286 (string: don't unwind prematurely) - #162289 (alloc: a bunch of safety comments) - #162290 (abby test DSL: AliasTyOutlivesViaEnv) - #162292 (Update `askama` version to `0.16.1`) - #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`) - #160906 (Suggest usize instead of placeholder type for array length constants) - #160936 (traits: Represent live alias arguments as bitsets) - #161394 (fix `is_homogeneous_aggregate`: use unit size, not total size ) - #161400 (Improve diagnostics for references to closures) - #161656 (Suggest mutable references for FnMut closure arguments) - #161711 (Add more splat fn type tests) - #161786 (Make `tcx.def_id_partial_cmp` public) - #161953 (sanitizers: Implicitly disable mutually exclusive sanitizers) - #162155 (add suggestion for `rustc_allowed_through_unstable_modules` attribute) - #162212 (Implement `Rng` for `Box`) - #162246 (Fix incorrect meta span) - #162266 (std: fix typo) - #162291 (Add regression test from 1.98.1) - #162303 (Fix a minor spelling error in `library/std/src/sys/fs/unix.rs`)
…uwer Rollup of 25 pull requests Successful merges: - #162072 (Add new Tier-3 target: `powerpc64-sony-ps3`) - #162179 (type system const items via direct rhs) - #162255 (let people change rustc-dev-guide in-tree) - #162262 (Avoid manually instantiating some binders in error reporting with `-Znext-solver`) - #162277 (Introduce `rustc_middle::middel::resolve`) - #162285 (box: fixup map/try_map deallocate calls) - #162286 (string: don't unwind prematurely) - #162289 (alloc: a bunch of safety comments) - #162290 (abby test DSL: AliasTyOutlivesViaEnv) - #162292 (Update `askama` version to `0.16.1`) - #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`) - #160906 (Suggest usize instead of placeholder type for array length constants) - #160936 (traits: Represent live alias arguments as bitsets) - #161394 (fix `is_homogeneous_aggregate`: use unit size, not total size ) - #161400 (Improve diagnostics for references to closures) - #161656 (Suggest mutable references for FnMut closure arguments) - #161711 (Add more splat fn type tests) - #161786 (Make `tcx.def_id_partial_cmp` public) - #161953 (sanitizers: Implicitly disable mutually exclusive sanitizers) - #162155 (add suggestion for `rustc_allowed_through_unstable_modules` attribute) - #162212 (Implement `Rng` for `Box`) - #162246 (Fix incorrect meta span) - #162266 (std: fix typo) - #162291 (Add regression test from 1.98.1) - #162303 (Fix a minor spelling error in `library/std/src/sys/fs/unix.rs`)
Rollup merge of #162262 - sjwang05:forall-binder-ice, r=BoxyUwU Avoid manually instantiating some binders in error reporting with `-Znext-solver` If we call `enter_forall` on a binder before passing it to the new solver, the placeholders that come from instantiation get canonicalized before solving happens. This can be a problem if we end up equating one variable whose universe can't name another variable's, since the equate will succeed in the solver since canonicalization sets all universe indices to the root universe but fail when we actually construct the response with fresh vars at the correct universes, which causes an ICE. We now just hand the unopened binder to the trait solver directly, since (I believe) both solvers are able to handle that just fine. This came up while I was looking at https://rust-lang.zulipchat.com/#narrow/channel/618216-t-types.2Fcall-for-participation/topic/next-solver.20UI.20test.20triage/with/612965995, and the `universe-error-host-effect.rs`/`poly_select` change was basically the same type of ICE that I found while investigating the first one.
|
Note This PR was benchmarked as part of triage of its containing rollup: triage URL. Finished benchmarking commit (08587d4): comparison URL. Overall result: no relevant changes - no action needed@rustbot label: -perf-regression Instruction countThis perf run didn't have relevant results for this metric. Max RSS (memory usage)Results (primary -2.5%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesThis perf run didn't have relevant results for this metric. Binary sizeThis perf run didn't have relevant results for this metric. Bootstrap: missing data |
If we call
enter_forallon a binder before passing it to the new solver, the placeholders that come from instantiation get canonicalized before solving happens. This can be a problem if we end up equating one variable whose universe can't name another variable's, since the equate will succeed in the solver since canonicalization sets all universe indices to the root universe but fail when we actually construct the response with fresh vars at the correct universes, which causes an ICE. We now just hand the unopened binder to the trait solver directly, since (I believe) both solvers are able to handle that just fine.This came up while I was looking at https://rust-lang.zulipchat.com/#narrow/channel/618216-t-types.2Fcall-for-participation/topic/next-solver.20UI.20test.20triage/with/612965995, and the
universe-error-host-effect.rs/poly_selectchange was basically the same type of ICE that I found while investigating the first one.