mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Use a reduced recursion limit in the MIR inliner's cycle breaker
(cherry picked from commit 950437a035)
This commit is contained in:
@@ -137,6 +137,14 @@ fn process<'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,
|
||||
@@ -145,7 +153,7 @@ fn process<'tcx>(
|
||||
&mut Vec::new(),
|
||||
&mut FxHashSet::default(),
|
||||
&mut FxHashMap::default(),
|
||||
tcx.recursion_limit(),
|
||||
recursion_limit,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user