Rollup merge of #98329 - oli-obk:fast_path_ice, r=cjgillot

Avoid an ICE and instead let the compiler report a useful error

Fixes #98299
This commit is contained in:
Yuki Okushi 2022-06-21 20:08:16 +09:00 committed by GitHub
commit 1b48f09536
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 1 deletions

View File

@ -662,7 +662,11 @@ where
match b.kind() {
ty::ConstKind::Infer(InferConst::Var(_)) if D::forbid_inference_vars() => {
// Forbid inference variables in the RHS.
bug!("unexpected inference var {:?}", b)
self.infcx.tcx.sess.delay_span_bug(
self.delegate.span(),
format!("unexpected inference var {:?}", b,),
);
Ok(a)
}
// FIXME(invariance): see the related FIXME above.
_ => self.infcx.super_combine_consts(self, a, b),

View File

@ -0,0 +1,18 @@
use std::convert::TryFrom;
pub fn test_usage(p: ()) {
SmallCString::try_from(p).map(|cstr| cstr);
//~^ ERROR: type annotations needed
}
pub struct SmallCString<const N: usize> {}
impl<const N: usize> TryFrom<()> for SmallCString<N> {
type Error = ();
fn try_from(path: ()) -> Result<Self, Self::Error> {
unimplemented!();
}
}
fn main() {}

View File

@ -0,0 +1,9 @@
error[E0282]: type annotations needed
--> $DIR/issue-98299.rs:4:5
|
LL | SmallCString::try_from(p).map(|cstr| cstr);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for enum `Result<SmallCString<{_: usize}>, ()>`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0282`.