File: debuginfo-cyclic-structure.rs

package info (click to toggle)
rustc 1.91.1%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid
  • size: 943,992 kB
  • sloc: xml: 158,148; javascript: 23,353; sh: 19,314; python: 15,711; ansic: 13,112; cpp: 7,371; asm: 4,376; makefile: 723; lisp: 176; sql: 15
file content (32 lines) | stat: -rw-r--r-- 924 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//@ 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(с);
}