Rollup merge of #126570 - nnethercote:fix-126385, r=lcnr
Convert a `span_bug` to a `span_delayed_bug`. 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. r? `@lcnr`
This commit is contained in:
commit
020c07718f
@ -628,9 +628,7 @@ fn try_match_adt_and_generic_args<'hir>(
|
||||
| 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:?}"),
|
||||
);
|
||||
|
@ -1,10 +0,0 @@
|
||||
//@ known-bug: rust-lang/rust#126385
|
||||
pub struct MyStruct<'field> {
|
||||
field: &'_ [u32],
|
||||
}
|
||||
|
||||
impl MyStruct<'_> {
|
||||
pub fn _<'a>(field: &'a[u32]) -> Self<new> {
|
||||
Self{field}
|
||||
}
|
||||
}
|
14
tests/ui/borrowck/unmatched-arg-and-hir-arg-issue-126385.rs
Normal file
14
tests/ui/borrowck/unmatched-arg-and-hir-arg-issue-126385.rs
Normal file
@ -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() {}
|
@ -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`.
|
Loading…
Reference in New Issue
Block a user