about summary refs log tree commit diff
diff options
context:
space:
mode:
authorlcnr <rust@lcnr.de>2025-01-06 07:37:52 +0100
committerlcnr <rust@lcnr.de>2025-01-06 07:37:52 +0100
commitae6a3313cfe1df34cebd6613423581d75567c526 (patch)
tree77ae2d523d41456701cbf7bc519e6aa86d9a5926
parent56f9e6f935f9b0d6e83092a0f86d4dbeb878f17d (diff)
downloadrust-ae6a3313cfe1df34cebd6613423581d75567c526.tar.gz
rust-ae6a3313cfe1df34cebd6613423581d75567c526.zip
footnote to ordinary comment
-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`.