about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2025-01-06 08:09:07 +0100
committerGitHub <noreply@github.com>2025-01-06 08:09:07 +0100
commitc5c05c2528944e64bea76cb9e07e2aeb4be3cb15 (patch)
tree19c68ecfc7ac1f9a5d13266d5bbe00ba5f4354df
parentee6914a45ba5bad0f93835905e3c63d665029d7c (diff)
parentae6a3313cfe1df34cebd6613423581d75567c526 (diff)
downloadrust-c5c05c2528944e64bea76cb9e07e2aeb4be3cb15.tar.gz
rust-c5c05c2528944e64bea76cb9e07e2aeb4be3cb15.zip
Rollup merge of #135150 - lcnr:unconstrained-lts-comment, r=oli-obk
move footnote to ordinary comment

cc #135057
-rw-r--r--compiler/rustc_hir_analysis/src/impl_wf_check.rs30
1 files changed, 15 insertions, 15 deletions
diff --git a/compiler/rustc_hir_analysis/src/impl_wf_check.rs b/compiler/rustc_hir_analysis/src/impl_wf_check.rs
index bb122009593..42034736ad6 100644
--- a/compiler/rustc_hir_analysis/src/impl_wf_check.rs
+++ b/compiler/rustc_hir_analysis/src/impl_wf_check.rs
@@ -128,21 +128,7 @@ pub(crate) fn enforce_impl_lifetime_params_are_constrained(
     for param in &impl_generics.own_params {
         match param.kind {
             ty::GenericParamDefKind::Lifetime => {
-                let param_lt = cgp::Parameter::from(param.to_early_bound_region_data());
-                if lifetimes_in_associated_types.contains(&param_lt) // (*)
-                    && !input_parameters.contains(&param_lt)
-                {
-                    let mut diag = tcx.dcx().create_err(UnconstrainedGenericParameter {
-                        span: tcx.def_span(param.def_id),
-                        param_name: param.name,
-                        param_def_kind: tcx.def_descr(param.def_id),
-                        const_param_note: false,
-                        const_param_note2: false,
-                    });
-                    diag.code(E0207);
-                    res = Err(diag.emit());
-                }
-                // (*) This is a horrible concession to reality. I think it'd be
+                // This is a horrible concession to reality. I think it'd be
                 // better to just ban unconstrained lifetimes outright, but in
                 // practice people do non-hygienic macros like:
                 //
@@ -160,6 +146,20 @@ pub(crate) fn enforce_impl_lifetime_params_are_constrained(
                 // permit those, so long as the lifetimes aren't used in
                 // associated types. I believe this is sound, because lifetimes
                 // used elsewhere are not projected back out.
+                let param_lt = cgp::Parameter::from(param.to_early_bound_region_data());
+                if lifetimes_in_associated_types.contains(&param_lt)
+                    && !input_parameters.contains(&param_lt)
+                {
+                    let mut diag = tcx.dcx().create_err(UnconstrainedGenericParameter {
+                        span: tcx.def_span(param.def_id),
+                        param_name: param.name,
+                        param_def_kind: tcx.def_descr(param.def_id),
+                        const_param_note: false,
+                        const_param_note2: false,
+                    });
+                    diag.code(E0207);
+                    res = Err(diag.emit());
+                }
             }
             ty::GenericParamDefKind::Type { .. } | ty::GenericParamDefKind::Const { .. } => {
                 // Enforced in `enforce_impl_non_lifetime_params_are_constrained`.