about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-01-10 05:08:02 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2020-01-20 07:06:27 +0900
commit2ecc48ffa17d55ec02f3beb5bb17c718cb439202 (patch)
tree1e3d45f8eecb520e288f523cd5389b5187c13a46 /src
parentc0e02ad724f05f73b957b3d6f6314a9a2e5c284e (diff)
downloadrust-2ecc48ffa17d55ec02f3beb5bb17c718cb439202.tar.gz
rust-2ecc48ffa17d55ec02f3beb5bb17c718cb439202.zip
Fix ICE #68025
Diffstat (limited to 'src')
-rw-r--r--src/librustc_typeck/expr_use_visitor.rs4
-rw-r--r--src/test/ui/closures/issue-68025.rs12
2 files changed, 14 insertions, 2 deletions
diff --git a/src/librustc_typeck/expr_use_visitor.rs b/src/librustc_typeck/expr_use_visitor.rs
index be00c57763a..47635209b08 100644
--- a/src/librustc_typeck/expr_use_visitor.rs
+++ b/src/librustc_typeck/expr_use_visitor.rs
@@ -327,10 +327,10 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
     }
 
     fn walk_callee(&mut self, call: &hir::Expr<'_>, callee: &hir::Expr<'_>) {
-        let callee_ty = return_if_err!(self.mc.expr_ty_adjusted(callee));
+        let callee_ty = self.mc.tables.expr_ty_adjusted(callee);
         debug!("walk_callee: callee={:?} callee_ty={:?}", callee, callee_ty);
         match callee_ty.kind {
-            ty::FnDef(..) | ty::FnPtr(_) => {
+            ty::FnDef(..) | ty::FnPtr(_) | ty::Closure(..) => {
                 self.consume_expr(callee);
             }
             ty::Error => {}
diff --git a/src/test/ui/closures/issue-68025.rs b/src/test/ui/closures/issue-68025.rs
new file mode 100644
index 00000000000..261bfd60aae
--- /dev/null
+++ b/src/test/ui/closures/issue-68025.rs
@@ -0,0 +1,12 @@
+// check-pass
+
+fn foo<F, G>(_: G, _: Box<F>)
+where
+    F: Fn(),
+    G: Fn(Box<F>),
+{
+}
+
+fn main() {
+    foo(|f| (*f)(), Box::new(|| {}));
+}