Skip to content

Commit 3c8b644

Browse files
committed
Only check for errors in predicate when skipping impl assembly
Prior to PR rust-lang#91205, checking for errors in the overall obligation would check checking the `ParamEnv`, due to an incorrect `super_visit_with` impl. With this bug fixed, we will now bail out of impl candidate assembly if the `ParamEnv` contains any error types. In practice, this appears to be overly conservative - when an error occurs early in compilation, we end up giving up early for some predicates that we could have successfully evaluated without overflow. By only checking for errors in the predicate itself, we avoid causing additional spurious 'type annotations needed' errors after a 'real' error has already occurred. With this PR, the diagnostic changes caused by PR rust-lang#91205 are reverted.
1 parent 6b997b6 commit 3c8b644

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

tests/ui/crashes/ice-6252.stderr

+8-7
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@ LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
2121
| |
2222
| help: you might be missing a type parameter: `, VAL`
2323

24-
error[E0283]: type annotations needed
25-
--> $DIR/ice-6252.rs:10:12
24+
error[E0046]: not all trait items implemented, missing: `VAL`
25+
--> $DIR/ice-6252.rs:10:1
2626
|
27+
LL | const VAL: T;
28+
| ------------- `VAL` from trait
29+
...
2730
LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
28-
| ^^^^^^^^^^^^^^ cannot infer type for struct `Multiply<N, M>`
29-
|
30-
= note: cannot satisfy `Multiply<N, M>: TypeVal<usize>`
31+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `VAL` in implementation
3132

3233
error: aborting due to 3 previous errors
3334

34-
Some errors have detailed explanations: E0283, E0412.
35-
For more information about an error, try `rustc --explain E0283`.
35+
Some errors have detailed explanations: E0046, E0412.
36+
For more information about an error, try `rustc --explain E0046`.

0 commit comments

Comments
 (0)