33 lines
924 B
Rust
33 lines
924 B
Rust
|
|
//@ compile-flags:-g -Copt-level=0 -C panic=abort
|
|||
|
|
|
|||
|
|
// Check that debug information exists for structures containing loops (cyclic references).
|
|||
|
|
// Previously it may incorrectly prune member information during recursive type inference check.
|
|||
|
|
|
|||
|
|
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "Arc<debuginfo_cyclic_structure::Inner<alloc::sync::Arc<debuginfo_cyclic_structure::Handle{{.*}}elements: ![[FIELDS:[0-9]+]]
|
|||
|
|
// CHECK: ![[FIELDS]] = !{!{{.*}}}
|
|||
|
|
// CHECK-NOT: ![[FIELDS]] = !{}
|
|||
|
|
|
|||
|
|
#![crate_type = "lib"]
|
|||
|
|
|
|||
|
|
use std::mem::MaybeUninit;
|
|||
|
|
use std::sync::Arc;
|
|||
|
|
|
|||
|
|
struct Inner<T> {
|
|||
|
|
buffer: Box<MaybeUninit<T>>,
|
|||
|
|
}
|
|||
|
|
struct Shared {
|
|||
|
|
shared: Arc<Inner<Arc<Handle>>>,
|
|||
|
|
}
|
|||
|
|
struct Handle {
|
|||
|
|
shared: Shared,
|
|||
|
|
}
|
|||
|
|
struct Core {
|
|||
|
|
inner: Arc<Inner<Arc<Handle>>>,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#[no_mangle]
|
|||
|
|
extern "C" fn test() {
|
|||
|
|
let с = Core { inner: Arc::new(Inner { buffer: Box::new(MaybeUninit::uninit()) }) };
|
|||
|
|
std::hint::black_box(с);
|
|||
|
|
}
|