mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-27 07:00:55 +00:00
Auto merge of #125507 - compiler-errors:type-length-limit, r=lcnr
Re-implement a type-size based limit r? lcnr This PR reintroduces the type length limit added in #37789, which was accidentally made practically useless by the caching changes to `Ty::walk` in #72412, which caused the `walk` function to no longer walk over identical elements. Hitting this length limit is not fatal unless we are in codegen -- so it shouldn't affect passes like the mir inliner which creates potentially very large types (which we observed, for example, when the new trait solver compiles `itertools` in `--release` mode). This also increases the type length limit from `1048576 == 2 ** 20` to `2 ** 24`, which covers all of the code that can be reached with craterbot-check. Individual crates can increase the length limit further if desired. Perf regression is mild and I think we should accept it -- reinstating this limit is important for the new trait solver and to make sure we don't accidentally hit more type-size related regressions in the future. Fixes #125460
This commit is contained in:
commit
b52ac9a89a
2 changed files with 3 additions and 3 deletions
|
@ -103,7 +103,7 @@ fn extract_call<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> Option<
|
||||||
let args = cx.typeck_results().node_args(expr.hir_id);
|
let args = cx.typeck_results().node_args(expr.hir_id);
|
||||||
|
|
||||||
// If we could not resolve the method, don't apply the lint
|
// If we could not resolve the method, don't apply the lint
|
||||||
let Ok(Some(resolved_method)) = Instance::resolve(cx.tcx, cx.param_env, fn_def_id, args) else {
|
let Ok(Some(resolved_method)) = Instance::try_resolve(cx.tcx, cx.param_env, fn_def_id, args) else {
|
||||||
return None;
|
return None;
|
||||||
};
|
};
|
||||||
if is_trait_method(cx, expr, sym::Clone) && path.ident.name == sym::clone {
|
if is_trait_method(cx, expr, sym::Clone) && path.ident.name == sym::clone {
|
||||||
|
@ -119,7 +119,7 @@ fn extract_call<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> Option<
|
||||||
|
|
||||||
// If we could not resolve the method, don't apply the lint
|
// If we could not resolve the method, don't apply the lint
|
||||||
let Ok(Some(resolved_method)) = (match kind {
|
let Ok(Some(resolved_method)) = (match kind {
|
||||||
ty::FnDef(_, args) => Instance::resolve(cx.tcx, cx.param_env, fn_def_id, args),
|
ty::FnDef(_, args) => Instance::try_resolve(cx.tcx, cx.param_env, fn_def_id, args),
|
||||||
_ => Ok(None),
|
_ => Ok(None),
|
||||||
}) else {
|
}) else {
|
||||||
return None;
|
return None;
|
||||||
|
|
|
@ -293,7 +293,7 @@ impl<'tcx> NonCopyConst<'tcx> {
|
||||||
ct: ty::UnevaluatedConst<'tcx>,
|
ct: ty::UnevaluatedConst<'tcx>,
|
||||||
span: Span,
|
span: Span,
|
||||||
) -> EvalToValTreeResult<'tcx> {
|
) -> EvalToValTreeResult<'tcx> {
|
||||||
match ty::Instance::resolve(tcx, param_env, ct.def, ct.args) {
|
match ty::Instance::try_resolve(tcx, param_env, ct.def, ct.args) {
|
||||||
Ok(Some(instance)) => {
|
Ok(Some(instance)) => {
|
||||||
let cid = GlobalId {
|
let cid = GlobalId {
|
||||||
instance,
|
instance,
|
||||||
|
|
Loading…
Reference in a new issue