]> git.lizzy.rs Git - rust.git/commitdiff
Normalize function signature in function casting check
authorDonough Liu <ldm2993593805@163.com>
Fri, 10 Apr 2020 10:14:55 +0000 (18:14 +0800)
committerDonough Liu <ldm2993593805@163.com>
Fri, 10 Apr 2020 10:14:55 +0000 (18:14 +0800)
src/librustc_typeck/check/cast.rs
src/test/ui/issues/issue-54094.rs [new file with mode: 0644]

index 5de0184f2bba9d48d6b0e6d47d5d78401eed63ff..38d0c42e1588baaaccf48df7a14301f36e6b5324 100644 (file)
@@ -536,7 +536,10 @@ fn do_check(&self, fcx: &FnCtxt<'a, 'tcx>) -> Result<CastKind, CastError> {
                 match self.expr_ty.kind {
                     ty::FnDef(..) => {
                         // Attempt a coercion to a fn pointer type.
-                        let f = self.expr_ty.fn_sig(fcx.tcx);
+                        let f = fcx.normalize_associated_types_in(
+                            self.expr.span,
+                            &self.expr_ty.fn_sig(fcx.tcx),
+                        );
                         let res = fcx.try_coerce(
                             self.expr,
                             self.expr_ty,
diff --git a/src/test/ui/issues/issue-54094.rs b/src/test/ui/issues/issue-54094.rs
new file mode 100644 (file)
index 0000000..5738482
--- /dev/null
@@ -0,0 +1,14 @@
+// check-pass
+trait Zoo {
+    type X;
+}
+
+impl Zoo for u16 {
+    type X = usize;
+}
+
+fn foo(abc: <u16 as Zoo>::X) {}
+
+fn main() {
+    let x: *const u8 = foo as _;
+}
\ No newline at end of file