Skip to content

Commit dfa6111

Browse files
committed
Remove the explicit box_free type check
Because box_free is now passed a pointer instead of a Box, we can stop relying on TypeChecked::check_box_free_inputs, because TypeChecker::check_call_inputs should be enough, like for all other function calls. It seems it was not actually reached anyways in cases where it would have made a difference. (issue #50071)
1 parent 43b24c6 commit dfa6111

File tree

1 file changed

+1
-69
lines changed
  • src/librustc_mir/borrow_check/nll/type_check

1 file changed

+1
-69
lines changed

src/librustc_mir/borrow_check/nll/type_check/mod.rs

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -918,11 +918,7 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
918918
));
919919
}
920920

921-
if self.is_box_free(func) {
922-
self.check_box_free_inputs(mir, term, &sig, args, term_location);
923-
} else {
924-
self.check_call_inputs(mir, term, &sig, args, term_location);
925-
}
921+
self.check_call_inputs(mir, term, &sig, args, term_location);
926922
}
927923
TerminatorKind::Assert {
928924
ref cond, ref msg, ..
@@ -1026,70 +1022,6 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
10261022
}
10271023
}
10281024

1029-
fn is_box_free(&self, operand: &Operand<'tcx>) -> bool {
1030-
match *operand {
1031-
Operand::Constant(ref c) => match c.ty.sty {
1032-
ty::TyFnDef(ty_def_id, _) => {
1033-
Some(ty_def_id) == self.tcx().lang_items().box_free_fn()
1034-
}
1035-
_ => false,
1036-
},
1037-
_ => false,
1038-
}
1039-
}
1040-
1041-
fn check_box_free_inputs(
1042-
&mut self,
1043-
mir: &Mir<'tcx>,
1044-
term: &Terminator<'tcx>,
1045-
sig: &ty::FnSig<'tcx>,
1046-
args: &[Operand<'tcx>],
1047-
term_location: Location,
1048-
) {
1049-
debug!("check_box_free_inputs");
1050-
1051-
// box_free takes a Box as a pointer. Allow for that.
1052-
1053-
if sig.inputs().len() != 1 {
1054-
span_mirbug!(self, term, "box_free should take 1 argument");
1055-
return;
1056-
}
1057-
1058-
let pointee_ty = match sig.inputs()[0].sty {
1059-
ty::TyRawPtr(mt) => mt.ty,
1060-
_ => {
1061-
span_mirbug!(self, term, "box_free should take a raw ptr");
1062-
return;
1063-
}
1064-
};
1065-
1066-
if args.len() != 1 {
1067-
span_mirbug!(self, term, "box_free called with wrong # of args");
1068-
return;
1069-
}
1070-
1071-
let ty = args[0].ty(mir, self.tcx());
1072-
let arg_ty = match ty.sty {
1073-
ty::TyRawPtr(mt) => mt.ty,
1074-
ty::TyAdt(def, _) if def.is_box() => ty.boxed_ty(),
1075-
_ => {
1076-
span_mirbug!(self, term, "box_free called with bad arg ty");
1077-
return;
1078-
}
1079-
};
1080-
1081-
if let Err(terr) = self.sub_types(arg_ty, pointee_ty, term_location.at_self()) {
1082-
span_mirbug!(
1083-
self,
1084-
term,
1085-
"bad box_free arg ({:?} <- {:?}): {:?}",
1086-
pointee_ty,
1087-
arg_ty,
1088-
terr
1089-
);
1090-
}
1091-
}
1092-
10931025
fn check_iscleanup(&mut self, mir: &Mir<'tcx>, block_data: &BasicBlockData<'tcx>) {
10941026
let is_cleanup = block_data.is_cleanup;
10951027
self.last_span = block_data.terminator().source_info.span;

0 commit comments

Comments
 (0)