diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-03-27 08:46:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-27 08:46:55 +0200 |
| commit | 6535e66fa545acaa3c0fe015b83a2e502c10119a (patch) | |
| tree | 8d982b4a968c7447561287a1ad00324ba8f0cf1c /src/tools | |
| parent | 2b7dc94535e2b4f922091ee1834e21a7d18ba4bf (diff) | |
| parent | 1ce4b37900cf0c7f5e146b866b5a8fae2b93f9fc (diff) | |
| download | rust-6535e66fa545acaa3c0fe015b83a2e502c10119a.tar.gz rust-6535e66fa545acaa3c0fe015b83a2e502c10119a.zip | |
Rollup merge of #109641 - compiler-errors:dont-elaborate-non-obl, r=oli-obk
Don't elaborate non-obligations into obligations It's suspicious to elaborate a `PolyTraitRef` or `Predicate` into an `Obligation`, since the former does not have a param-env associated with it, but the latter does. This is a footgun that, while not being misused *currently* in the compiler, easily could be misused by someone less familiar with the elaborator's inner workings. This PR just changes the API -- ideally, the elaborator wouldn't even have to deal with obligations if we're not elaborating obligations, but that would require a bit more abstraction than I could be bothered with today.
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs | 4 | ||||
| -rw-r--r-- | src/tools/clippy/clippy_utils/src/lib.rs | 1 |
2 files changed, 2 insertions, 3 deletions
diff --git a/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs b/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs index 1ab81aee7b8..327e090d38b 100644 --- a/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs +++ b/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs @@ -124,9 +124,9 @@ impl<'tcx> LateLintPass<'tcx> for NeedlessPassByValue { let preds = traits::elaborate_predicates(cx.tcx, cx.param_env.caller_bounds().iter()) .filter(|p| !p.is_global()) - .filter_map(|obligation| { + .filter_map(|pred| { // Note that we do not want to deal with qualified predicates here. - match obligation.predicate.kind().no_bound_vars() { + match pred.kind().no_bound_vars() { Some(ty::PredicateKind::Clause(ty::Clause::Trait(pred))) if pred.def_id() != sized_trait => { Some(pred) }, diff --git a/src/tools/clippy/clippy_utils/src/lib.rs b/src/tools/clippy/clippy_utils/src/lib.rs index 29830557a44..fd06c0b8677 100644 --- a/src/tools/clippy/clippy_utils/src/lib.rs +++ b/src/tools/clippy/clippy_utils/src/lib.rs @@ -2106,7 +2106,6 @@ pub fn fn_has_unsatisfiable_preds(cx: &LateContext<'_>, did: DefId) -> bool { traits::impossible_predicates( cx.tcx, traits::elaborate_predicates(cx.tcx, predicates) - .map(|o| o.predicate) .collect::<Vec<_>>(), ) } |
