mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-26 11:59:49 +00:00
Auto merge of #13840 - lowr:fix/hir-callable-sig-escaping-boundvars, r=lowr
fix: handle lifetime variables in `CallableSig` query Fixes #13838 The problem is similar to #13223: we've been skipping non-empty binders, letting lifetime bound variables escape. I ended up refactoring `hir_ty::callable_sig_from_fnonce()`. Like #13223, I chose to make use of `InferenceTable` which is capable of handling variables (I feel we should always use it when we solve trait-related stuff instead of manually building obligations/queries). I couldn't make up a test that crashes without this patch (since the function I'm fixing is only used *outside* `hir-ty`, simple `hir-ty` test wouldn't cause crash), but at least I tested with my local build and made sure it doesn't crash with the code in the original issue. I'd appreciate any help to find a regression test.
This commit is contained in:
commit
74ae2dd303
2 changed files with 42 additions and 42 deletions
|
@ -1028,6 +1028,26 @@ macro_rules! test {}
|
|||
let _ = analysis.highlight(HL_CONFIG, file_id).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn highlight_callable_no_crash() {
|
||||
// regression test for #13838.
|
||||
let (analysis, file_id) = fixture::file(
|
||||
r#"
|
||||
//- minicore: fn, sized
|
||||
impl<A, F: ?Sized> FnOnce<A> for &F
|
||||
where
|
||||
F: Fn<A>,
|
||||
{
|
||||
type Output = F::Output;
|
||||
}
|
||||
|
||||
trait Trait {}
|
||||
fn foo(x: &fn(&dyn Trait)) {}
|
||||
"#,
|
||||
);
|
||||
let _ = analysis.highlight(HL_CONFIG, file_id).unwrap();
|
||||
}
|
||||
|
||||
/// Highlights the code given by the `ra_fixture` argument, renders the
|
||||
/// result as HTML, and compares it with the HTML file given as `snapshot`.
|
||||
/// Note that the `snapshot` file is overwritten by the rendered HTML.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue