Skip to content

Commit

Permalink
Fix ICE while building MIR with type errors
Browse files Browse the repository at this point in the history
Fixes #74047.
  • Loading branch information
tmandry committed Jul 24, 2020
1 parent 8ad7bc3 commit 62e75a1
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
5 changes: 0 additions & 5 deletions src/librustc_mir_build/hair/pattern/mod.rs
Expand Up @@ -509,11 +509,6 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
fn lower_pattern_unadjusted(&mut self, pat: &'tcx hir::Pat<'tcx>) -> Pat<'tcx> {
let mut ty = self.typeck_results.node_type(pat.hir_id);

if let ty::Error(_) = ty.kind {
// Avoid ICEs (e.g., #50577 and #50585).
return Pat { span: pat.span, ty, kind: Box::new(PatKind::Wild) };
}

let kind = match pat.kind {
hir::PatKind::Wild => PatKind::Wild,

Expand Down
17 changes: 17 additions & 0 deletions src/test/ui/issue-74047.rs
@@ -0,0 +1,17 @@
// edition:2018

use std::convert::{TryFrom, TryInto};
use std::io;

pub struct MyStream;
pub struct OtherStream;

pub async fn connect() -> io::Result<MyStream> {
let stream: MyStream = OtherStream.try_into()?;
Ok(stream)
}

impl TryFrom<OtherStream> for MyStream {}
//~^ ERROR: missing

fn main() {}
12 changes: 12 additions & 0 deletions src/test/ui/issue-74047.stderr
@@ -0,0 +1,12 @@
error[E0046]: not all trait items implemented, missing: `Error`, `try_from`
--> $DIR/issue-74047.rs:14:1
|
LL | impl TryFrom<OtherStream> for MyStream {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `Error`, `try_from` in implementation
|
= help: implement the missing item: `type Error = Type;`
= help: implement the missing item: `fn try_from(_: T) -> std::result::Result<Self, <Self as std::convert::TryFrom<T>>::Error> { todo!() }`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0046`.

0 comments on commit 62e75a1

Please sign in to comment.