mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-02 10:18:25 +00:00
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(с);
|
||
}
|