Skip to content

Commit

Permalink
Convert a span_bug to a span_delayed_bug.
Browse files Browse the repository at this point in the history
PR #121208 converted this from a `span_delayed_bug` to a `span_bug`
because nothing in the test suite caused execution to hit this path. But
now fuzzing has found a test case that does hit it. So this commit
converts it back to `span_delayed_bug` and adds the relevant test.

Fixes #126385.
  • Loading branch information
nnethercote committed Jun 17, 2024
1 parent e794b0f commit bd32c4c
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 13 deletions.
4 changes: 1 addition & 3 deletions compiler/rustc_borrowck/src/diagnostics/region_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -628,9 +628,7 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
| GenericArgKind::Const(_),
_,
) => {
// This was previously a `span_delayed_bug` and could be
// reached by the test for #82126, but no longer.
self.dcx().span_bug(
self.dcx().span_delayed_bug(
hir_arg.span(),
format!("unmatched arg and hir arg: found {kind:?} vs {hir_arg:?}"),
);
Expand Down
10 changes: 0 additions & 10 deletions tests/crashes/126385.rs

This file was deleted.

14 changes: 14 additions & 0 deletions tests/ui/borrowck/unmatched-arg-and-hir-arg-issue-126385.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// This test was triggering a `span_bug` crash, which was then fixed by
// downgrading it to a `span_delayed_bug`.

pub struct MyStruct<'field> {
field: &'field [u32],
}

impl MyStruct<'_> {
pub fn f(field: &[u32]) -> Self<u32> { //~ ERROR type arguments are not allowed on self type
Self { field } //~ ERROR lifetime may not live long enough
}
}

fn main() {}
34 changes: 34 additions & 0 deletions tests/ui/borrowck/unmatched-arg-and-hir-arg-issue-126385.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
error[E0109]: type arguments are not allowed on self type
--> $DIR/unmatched-arg-and-hir-arg-issue-126385.rs:9:37
|
LL | pub fn f(field: &[u32]) -> Self<u32> {
| ---- ^^^ type argument not allowed
| |
| not allowed on self type
|
note: `Self` is of type `MyStruct<'_>`
--> $DIR/unmatched-arg-and-hir-arg-issue-126385.rs:4:12
|
LL | pub struct MyStruct<'field> {
| ^^^^^^^^ `Self` corresponds to this type
...
LL | impl MyStruct<'_> {
| ----------------- `Self` is on type `MyStruct` in this `impl`
help: the `Self` type doesn't accept type parameters, use the concrete type's name `MyStruct` instead if you want to specify its type parameters
|
LL | pub fn f(field: &[u32]) -> MyStruct<u32> {
| ~~~~~~~~

error: lifetime may not live long enough
--> $DIR/unmatched-arg-and-hir-arg-issue-126385.rs:10:9
|
LL | pub fn f(field: &[u32]) -> Self<u32> {
| - --------- return type is MyStruct<'2>
| |
| let's call the lifetime of this reference `'1`
LL | Self { field }
| ^^^^^^^^^^^^^^ associated function was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0109`.

0 comments on commit bd32c4c

Please sign in to comment.