mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
Fix panic in displaying const trait objects
This commit is contained in:
parent
2796851961
commit
6fbf6ef514
3 changed files with 52 additions and 5 deletions
|
@ -536,6 +536,22 @@ fn render_const_scalar(
|
|||
}
|
||||
f.write_str("]")
|
||||
}
|
||||
TyKind::Dyn(_) => {
|
||||
let addr = usize::from_le_bytes(b[0..b.len() / 2].try_into().unwrap());
|
||||
let ty_id = usize::from_le_bytes(b[b.len() / 2..].try_into().unwrap());
|
||||
let Ok(t) = memory_map.vtable.ty(ty_id) else {
|
||||
return f.write_str("<ty-missing-in-vtable-map>");
|
||||
};
|
||||
let Ok(layout) = f.db.layout_of_ty(t.clone(), krate) else {
|
||||
return f.write_str("<layout-error>");
|
||||
};
|
||||
let size = layout.size.bytes_usize();
|
||||
let Some(bytes) = memory_map.get(addr, size) else {
|
||||
return f.write_str("<ref-data-not-available>");
|
||||
};
|
||||
f.write_str("&")?;
|
||||
render_const_scalar(f, bytes, memory_map, t)
|
||||
}
|
||||
_ => {
|
||||
let addr = usize::from_le_bytes(b.try_into().unwrap());
|
||||
let Ok(layout) = f.db.layout_of_ty(t.clone(), krate) else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue