| //@ 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(с); |
| } |