mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Auto merge of #129714 - saethlin:half-a-recursion, r=compiler-errors
Use a reduced recursion limit in the MIR inliner's cycle breaker This probably papers over https://github.com/rust-lang/rust/issues/128887, but primarily I'm opening this PR because multiple compiler people have thought about making this change which probably means it's a good idea. r? compiler-errors
This commit is contained in:
commit
784d444733
@ -135,6 +135,14 @@ pub(crate) fn mir_callgraph_reachable<'tcx>(
|
||||
}
|
||||
false
|
||||
}
|
||||
// FIXME(-Znext-solver): Remove this hack when trait solver overflow can return an error.
|
||||
// In code like that pointed out in #128887, the type complexity we ask the solver to deal with
|
||||
// grows as we recurse into the call graph. If we use the same recursion limit here and in the
|
||||
// solver, the solver hits the limit first and emits a fatal error. But if we use a reduced
|
||||
// limit, we will hit the limit first and give up on looking for inlining. And in any case,
|
||||
// the default recursion limits are quite generous for us. If we need to recurse 64 times
|
||||
// into the call graph, we're probably not going to find any useful MIR inlining.
|
||||
let recursion_limit = tcx.recursion_limit() / 2;
|
||||
process(
|
||||
tcx,
|
||||
param_env,
|
||||
@ -143,7 +151,7 @@ pub(crate) fn mir_callgraph_reachable<'tcx>(
|
||||
&mut Vec::new(),
|
||||
&mut FxHashSet::default(),
|
||||
&mut FxHashMap::default(),
|
||||
tcx.recursion_limit(),
|
||||
recursion_limit,
|
||||
)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user