mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
filter required_consts during inlining
This commit is contained in:
parent
173d1bd36b
commit
8436045e24
@ -245,11 +245,10 @@ impl<'tcx> Const<'tcx> {
|
|||||||
match self {
|
match self {
|
||||||
Const::Ty(c) => match c.kind() {
|
Const::Ty(c) => match c.kind() {
|
||||||
ty::ConstKind::Value(_) => false, // already a value, cannot error
|
ty::ConstKind::Value(_) => false, // already a value, cannot error
|
||||||
ty::ConstKind::Param(_) | ty::ConstKind::Error(_) => true, // these are errors or could be replaced by errors
|
_ => true,
|
||||||
_ => bug!("is_required_const: unexpected ty::ConstKind {:#?}", c),
|
|
||||||
},
|
},
|
||||||
Const::Unevaluated(..) => true,
|
|
||||||
Const::Val(..) => false, // already a value, cannot error
|
Const::Val(..) => false, // already a value, cannot error
|
||||||
|
Const::Unevaluated(..) => true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -720,8 +720,12 @@ impl<'tcx> Inliner<'tcx> {
|
|||||||
kind: TerminatorKind::Goto { target: integrator.map_block(START_BLOCK) },
|
kind: TerminatorKind::Goto { target: integrator.map_block(START_BLOCK) },
|
||||||
});
|
});
|
||||||
|
|
||||||
// Copy required constants from the callee_body into the caller_body.
|
// Copy required constants from the callee_body into the caller_body. Although we are only
|
||||||
caller_body.required_consts.extend(callee_body.required_consts);
|
// pushing unevaluated consts to `required_consts`, here they may have been evaluated
|
||||||
|
// because we are calling `instantiate_and_normalize_erasing_regions` -- so we filter again.
|
||||||
|
caller_body.required_consts.extend(
|
||||||
|
callee_body.required_consts.into_iter().filter(|ct| ct.const_.is_required_const()),
|
||||||
|
);
|
||||||
// Now that we incorporated the callee's `required_consts`, we can remove the callee from
|
// Now that we incorporated the callee's `required_consts`, we can remove the callee from
|
||||||
// `mentioned_items` -- but we have to take their `mentioned_items` in return. This does
|
// `mentioned_items` -- but we have to take their `mentioned_items` in return. This does
|
||||||
// some extra work here to save the monomorphization collector work later. It helps a lot,
|
// some extra work here to save the monomorphization collector work later. It helps a lot,
|
||||||
|
Loading…
Reference in New Issue
Block a user