diff options
| author | Michael Goulet <michael@errs.io> | 2022-09-29 22:03:03 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-10-04 03:20:49 +0000 |
| commit | 8c600120e6abd8c25a88443451d190c68142180f (patch) | |
| tree | 21e9a1face2347d9bd40c65a4dd85d5d9988ee11 /compiler/rustc_lint/src/noop_method_call.rs | |
| parent | f83e0266cf7aaa4b41505c49a5fd9c2363166522 (diff) | |
| download | rust-8c600120e6abd8c25a88443451d190c68142180f.tar.gz rust-8c600120e6abd8c25a88443451d190c68142180f.zip | |
Normalize substs before resolving instance in NoopMethodCall lint
Diffstat (limited to 'compiler/rustc_lint/src/noop_method_call.rs')
| -rw-r--r-- | compiler/rustc_lint/src/noop_method_call.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/compiler/rustc_lint/src/noop_method_call.rs b/compiler/rustc_lint/src/noop_method_call.rs index 19188d5c376..2a3ff3a7546 100644 --- a/compiler/rustc_lint/src/noop_method_call.rs +++ b/compiler/rustc_lint/src/noop_method_call.rs @@ -46,7 +46,7 @@ impl<'tcx> LateLintPass<'tcx> for NoopMethodCall { }; // We only care about method calls corresponding to the `Clone`, `Deref` and `Borrow` // traits and ignore any other method call. - let (trait_id, did) = match cx.typeck_results().type_dependent_def(expr.hir_id) { + let did = match cx.typeck_results().type_dependent_def(expr.hir_id) { // Verify we are dealing with a method/associated function. Some((DefKind::AssocFn, did)) => match cx.tcx.trait_of_item(did) { // Check that we're dealing with a trait method for one of the traits we care about. @@ -56,21 +56,22 @@ impl<'tcx> LateLintPass<'tcx> for NoopMethodCall { Some(sym::Borrow | sym::Clone | sym::Deref) ) => { - (trait_id, did) + did } _ => return, }, _ => return, }; - let substs = cx.typeck_results().node_substs(expr.hir_id); + let substs = cx + .tcx + .normalize_erasing_regions(cx.param_env, cx.typeck_results().node_substs(expr.hir_id)); if substs.needs_subst() { // We can't resolve on types that require monomorphization, so we don't handle them if // we need to perform substitution. return; } - let param_env = cx.tcx.param_env(trait_id); // Resolve the trait method instance. - let Ok(Some(i)) = ty::Instance::resolve(cx.tcx, param_env, did, substs) else { + let Ok(Some(i)) = ty::Instance::resolve(cx.tcx, cx.param_env, did, substs) else { return }; // (Re)check that it implements the noop diagnostic. |
