mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-14 17:07:17 +00:00
Directly construct Inherited.
This commit is contained in:
parent
27910cbcbd
commit
5c85cd9fee
2 changed files with 32 additions and 33 deletions
|
@ -369,10 +369,10 @@ fn can_change_type<'a>(cx: &LateContext<'a>, mut expr: &'a Expr<'a>, mut ty: Ty<
|
||||||
Node::Item(item) => {
|
Node::Item(item) => {
|
||||||
if let ItemKind::Fn(_, _, body_id) = &item.kind
|
if let ItemKind::Fn(_, _, body_id) = &item.kind
|
||||||
&& let output_ty = return_ty(cx, item.owner_id)
|
&& let output_ty = return_ty(cx, item.owner_id)
|
||||||
&& Inherited::build(cx.tcx, item.owner_id.def_id).enter(|inherited| {
|
&& let inherited = Inherited::new(cx.tcx, item.owner_id.def_id)
|
||||||
let fn_ctxt = FnCtxt::new(inherited, cx.param_env, item.owner_id.def_id);
|
&& let fn_ctxt = FnCtxt::new(&inherited, cx.param_env, item.owner_id.def_id)
|
||||||
fn_ctxt.can_coerce(ty, output_ty)
|
&& fn_ctxt.can_coerce(ty, output_ty)
|
||||||
}) {
|
{
|
||||||
if has_lifetime(output_ty) && has_lifetime(ty) {
|
if has_lifetime(output_ty) && has_lifetime(ty) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,38 +33,37 @@ pub(super) fn check_cast<'tcx>(
|
||||||
let hir_id = e.hir_id;
|
let hir_id = e.hir_id;
|
||||||
let local_def_id = hir_id.owner.def_id;
|
let local_def_id = hir_id.owner.def_id;
|
||||||
|
|
||||||
Inherited::build(cx.tcx, local_def_id).enter(|inherited| {
|
let inherited = Inherited::new(cx.tcx, local_def_id);
|
||||||
let fn_ctxt = FnCtxt::new(inherited, cx.param_env, local_def_id);
|
let fn_ctxt = FnCtxt::new(&inherited, cx.param_env, local_def_id);
|
||||||
|
|
||||||
// If we already have errors, we can't be sure we can pointer cast.
|
// If we already have errors, we can't be sure we can pointer cast.
|
||||||
|
assert!(
|
||||||
|
!fn_ctxt.errors_reported_since_creation(),
|
||||||
|
"Newly created FnCtxt contained errors"
|
||||||
|
);
|
||||||
|
|
||||||
|
if let Ok(check) = cast::CastCheck::new(
|
||||||
|
&fn_ctxt,
|
||||||
|
e,
|
||||||
|
from_ty,
|
||||||
|
to_ty,
|
||||||
|
// We won't show any error to the user, so we don't care what the span is here.
|
||||||
|
DUMMY_SP,
|
||||||
|
DUMMY_SP,
|
||||||
|
hir::Constness::NotConst,
|
||||||
|
) {
|
||||||
|
let res = check.do_check(&fn_ctxt);
|
||||||
|
|
||||||
|
// do_check's documentation says that it might return Ok and create
|
||||||
|
// errors in the fcx instead of returning Err in some cases. Those cases
|
||||||
|
// should be filtered out before getting here.
|
||||||
assert!(
|
assert!(
|
||||||
!fn_ctxt.errors_reported_since_creation(),
|
!fn_ctxt.errors_reported_since_creation(),
|
||||||
"Newly created FnCtxt contained errors"
|
"`fn_ctxt` contained errors after cast check!"
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Ok(check) = cast::CastCheck::new(
|
res.ok()
|
||||||
&fn_ctxt,
|
} else {
|
||||||
e,
|
None
|
||||||
from_ty,
|
}
|
||||||
to_ty,
|
|
||||||
// We won't show any error to the user, so we don't care what the span is here.
|
|
||||||
DUMMY_SP,
|
|
||||||
DUMMY_SP,
|
|
||||||
hir::Constness::NotConst,
|
|
||||||
) {
|
|
||||||
let res = check.do_check(&fn_ctxt);
|
|
||||||
|
|
||||||
// do_check's documentation says that it might return Ok and create
|
|
||||||
// errors in the fcx instead of returning Err in some cases. Those cases
|
|
||||||
// should be filtered out before getting here.
|
|
||||||
assert!(
|
|
||||||
!fn_ctxt.errors_reported_since_creation(),
|
|
||||||
"`fn_ctxt` contained errors after cast check!"
|
|
||||||
);
|
|
||||||
|
|
||||||
res.ok()
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue