3c8b644d0d
Prior to PR #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 #91205 are reverted.
37 lines
1.2 KiB
Plaintext
37 lines
1.2 KiB
Plaintext
error[E0412]: cannot find type `PhantomData` in this scope
|
|
--> $DIR/ice-6252.rs:8:9
|
|
|
|
|
LL | _n: PhantomData,
|
|
| ^^^^^^^^^^^ not found in this scope
|
|
|
|
|
help: consider importing one of these items
|
|
|
|
|
LL | use core::marker::PhantomData;
|
|
|
|
|
LL | use serde::__private::PhantomData;
|
|
|
|
|
LL | use std::marker::PhantomData;
|
|
|
|
|
|
|
error[E0412]: cannot find type `VAL` in this scope
|
|
--> $DIR/ice-6252.rs:10:63
|
|
|
|
|
LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
|
|
| - ^^^ not found in this scope
|
|
| |
|
|
| help: you might be missing a type parameter: `, VAL`
|
|
|
|
error[E0046]: not all trait items implemented, missing: `VAL`
|
|
--> $DIR/ice-6252.rs:10:1
|
|
|
|
|
LL | const VAL: T;
|
|
| ------------- `VAL` from trait
|
|
...
|
|
LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `VAL` in implementation
|
|
|
|
error: aborting due to 3 previous errors
|
|
|
|
Some errors have detailed explanations: E0046, E0412.
|
|
For more information about an error, try `rustc --explain E0046`.
|