Skip to content

Commit f9a6ab8

Browse files
committed
when reifying a safe fn as an unsafe fn ptr, insert two casts
Otherwise, `run-pass/typeck-fn-to-unsafe-fn-ptr.rs` fails the MIR type checker.
1 parent db2f214 commit f9a6ab8

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/librustc_typeck/check/coercion.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,18 @@ impl<'f, 'gcx, 'tcx> Coerce<'f, 'gcx, 'tcx> {
638638
self.normalize_associated_types_in_as_infer_ok(self.cause.span, &a_sig);
639639

640640
let a_fn_pointer = self.tcx.mk_fn_ptr(a_sig);
641-
let InferOk { value, obligations: o2 } =
642-
self.coerce_from_safe_fn(a_fn_pointer, a_sig, b,
643-
simple(Adjust::ReifyFnPointer), simple(Adjust::ReifyFnPointer))?;
641+
let InferOk { value, obligations: o2 } = self.coerce_from_safe_fn(
642+
a_fn_pointer,
643+
a_sig,
644+
b,
645+
|unsafe_ty| {
646+
vec![
647+
Adjustment { kind: Adjust::ReifyFnPointer, target: a_fn_pointer },
648+
Adjustment { kind: Adjust::UnsafeFnPointer, target: unsafe_ty },
649+
]
650+
},
651+
simple(Adjust::ReifyFnPointer)
652+
)?;
644653

645654
obligations.extend(o2);
646655
Ok(InferOk { value, obligations })

0 commit comments

Comments
 (0)