Skip to content

Commit

Permalink
diagnostics: simpler 83556 handling by bailing out
Browse files Browse the repository at this point in the history
  • Loading branch information
notriddle committed Sep 23, 2023
1 parent 3799af3 commit 58ef3a0
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 20 deletions.
11 changes: 3 additions & 8 deletions compiler/rustc_hir_analysis/src/check/wfcheck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 {
Expand Down
1 change: 0 additions & 1 deletion tests/ui/generics/issue-83556.rs
Original file line number Diff line number Diff line change
@@ -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() {}
12 changes: 1 addition & 11 deletions tests/ui/generics/issue-83556.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.

0 comments on commit 58ef3a0

Please sign in to comment.