about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2023-09-22 22:41:01 -0700
committerMichael Howell <michael@notriddle.com>2023-09-22 22:41:01 -0700
commit58ef3a0ec9a3e2151a103964683b5d00932304d8 (patch)
treec614260ad79e4e05ceae83d28a3ce2780da058b3
parent3799af3337d748647ca6c4abbad63975275a7a37 (diff)
downloadrust-58ef3a0ec9a3e2151a103964683b5d00932304d8.tar.gz
rust-58ef3a0ec9a3e2151a103964683b5d00932304d8.zip
diagnostics: simpler 83556 handling by bailing out
-rw-r--r--compiler/rustc_hir_analysis/src/check/wfcheck.rs11
-rw-r--r--tests/ui/generics/issue-83556.rs1
-rw-r--r--tests/ui/generics/issue-83556.stderr12
3 files changed, 4 insertions, 20 deletions
diff --git a/compiler/rustc_hir_analysis/src/check/wfcheck.rs b/compiler/rustc_hir_analysis/src/check/wfcheck.rs
index 412b03b3be3..00a684f2963 100644
--- a/compiler/rustc_hir_analysis/src/check/wfcheck.rs
+++ b/compiler/rustc_hir_analysis/src/check/wfcheck.rs
@@ -1765,9 +1765,9 @@ fn check_variances_for_type_defn<'tcx>(
         }
 
         let ty_param = &ty_generics.params[index];
-        let mut hir_param = &hir_generics.params[index];
+        let hir_param = &hir_generics.params[index];
 
-        if ty_param.name != hir_param.name.ident().name {
+        if ty_param.def_id != hir_param.def_id.into() {
             // valid programs always have lifetimes before types in the generic parameter list
             // ty_generics are normalized to be in this required order, and variances are built
             // from ty generics, not from hir generics. but we need hir generics to get
@@ -1777,12 +1777,7 @@ fn check_variances_for_type_defn<'tcx>(
             // got an error about it (or I'm wrong about this)
             tcx.sess
                 .delay_span_bug(hir_param.span, "hir generics and ty generics in different order");
-            for hp in hir_generics.params {
-                if hp.name.ident().name == ty_param.name {
-                    hir_param = hp;
-                    break;
-                }
-            }
+            continue;
         }
 
         match hir_param.name {
diff --git a/tests/ui/generics/issue-83556.rs b/tests/ui/generics/issue-83556.rs
index 21f801d9d10..7cea1c8631f 100644
--- a/tests/ui/generics/issue-83556.rs
+++ b/tests/ui/generics/issue-83556.rs
@@ -1,5 +1,4 @@
 struct Foo<T, 'a>(&'a ());
 //~^ ERROR lifetime parameters must be declared prior to
-//~| ERROR parameter `T` is never used
 
 fn main() {}
diff --git a/tests/ui/generics/issue-83556.stderr b/tests/ui/generics/issue-83556.stderr
index 2ed999510eb..93affaffe60 100644
--- a/tests/ui/generics/issue-83556.stderr
+++ b/tests/ui/generics/issue-83556.stderr
@@ -4,15 +4,5 @@ error: lifetime parameters must be declared prior to type and const parameters
 LL | struct Foo<T, 'a>(&'a ());
    |           ----^^- help: reorder the parameters: lifetimes, then consts and types: `<'a, T>`
 
-error[E0392]: parameter `T` is never used
-  --> $DIR/issue-83556.rs:1:12
-   |
-LL | struct Foo<T, 'a>(&'a ());
-   |            ^ unused parameter
-   |
-   = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
-   = help: if you intended `T` to be a const parameter, use `const T: usize` instead
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
-For more information about this error, try `rustc --explain E0392`.