only emit pointer-like metadata for BZST-allocator Box
This commit is contained in:
parent
67b3e81838
commit
307ee94a8a
3 changed files with 27 additions and 2 deletions
|
@ -617,7 +617,9 @@ pub fn type_metadata<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll
|
|||
ty::RawPtr(ty::TypeAndMut { ty: pointee_type, .. }) | ty::Ref(_, pointee_type, _) => {
|
||||
pointer_or_reference_metadata(cx, t, pointee_type, unique_type_id)
|
||||
}
|
||||
ty::Adt(def, _) if def.is_box() => {
|
||||
// Box<T, A> may have a non-ZST allocator A. In that case, we
|
||||
// cannot treat Box<T, A> as just an owned alias of `*mut T`.
|
||||
ty::Adt(def, substs) if def.is_box() && cx.layout_of(substs.type_at(1)).is_zst() => {
|
||||
pointer_or_reference_metadata(cx, t, t.boxed_ty(), unique_type_id)
|
||||
}
|
||||
ty::FnDef(..) | ty::FnPtr(_) => subroutine_type_metadata(cx, unique_type_id),
|
||||
|
|
23
src/test/ui/debuginfo/debuginfo-box-with-large-allocator.rs
Normal file
23
src/test/ui/debuginfo/debuginfo-box-with-large-allocator.rs
Normal file
|
@ -0,0 +1,23 @@
|
|||
// build-pass
|
||||
// compile-flags: -Cdebuginfo=2
|
||||
// fixes issue #94725
|
||||
|
||||
#![feature(allocator_api)]
|
||||
|
||||
use std::alloc::{AllocError, Allocator, Layout};
|
||||
use std::ptr::NonNull;
|
||||
|
||||
struct ZST;
|
||||
|
||||
unsafe impl Allocator for &ZST {
|
||||
fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
|
||||
todo!()
|
||||
}
|
||||
unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _ = Box::<i32, &ZST>::new_in(43, &ZST);
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
// check-pass
|
||||
// build-pass
|
||||
// compile-flags: -Cdebuginfo=2
|
||||
// fixes issue #94149
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue