rust/tests/debuginfo/rc_arc.rs
Martin Nordholts 5b57d02e9f compiletest: Use //@ prefixes also for debuginfo test directives
So that when we later add support for revisions we can use the same
syntax for revisions as elsewhere.

This also prevents people from making typos for commands since
`src/tools/compiletest/src/directives/directive_names.rs` will catch such
typos now.

Note that we one FIXME for a non-trivial change for later:
```
// FIXME(148097): Change `// cdb-checksimple_closure` to `//@ cdb-check:simple_closure`
```
2025-11-25 06:13:45 +01:00

145 lines
5.9 KiB
Rust

//@ ignore-windows-gnu: #128981
//@ compile-flags:-g
//@ min-cdb-version: 10.0.18317.1001
//@ ignore-backends: gcc
// === GDB TESTS ==================================================================================
//@ gdb-command:run
//@ gdb-command:print rc
//@ gdb-check:[...]$1 = Rc(strong=11, weak=1) = {value = 111, strong = 11, weak = 1}
//@ gdb-command:print arc
//@ gdb-check:[...]$2 = Arc(strong=21, weak=1) = {value = 222, strong = 21, weak = 1}
// === LLDB TESTS ==================================================================================
//@ lldb-command:run
//@ lldb-command:v rc
//@ lldb-check:[...] strong=11, weak=1 { value = 111 }
//@ lldb-command:v arc
//@ lldb-check:[...] strong=21, weak=1 { data = 222 }
// === CDB TESTS ==================================================================================
//@ cdb-command:g
//@ cdb-command:dx rc,d
//@ cdb-check:rc,d : 111 [Type: alloc::rc::Rc<i32,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 11 [Type: core::cell::Cell<usize>]
//@ cdb-check: [Weak reference count] : 2 [Type: core::cell::Cell<usize>]
//@ cdb-command:dx weak_rc,d
//@ cdb-check:weak_rc,d : 111 [Type: alloc::rc::Weak<i32,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 11 [Type: core::cell::Cell<usize>]
//@ cdb-check: [Weak reference count] : 2 [Type: core::cell::Cell<usize>]
//@ cdb-command:dx arc,d
//@ cdb-check:arc,d : 222 [Type: alloc::sync::Arc<i32,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 21 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [Weak reference count] : 2 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-command:dx weak_arc,d
//@ cdb-check:weak_arc,d : 222 [Type: alloc::sync::Weak<i32,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 21 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [Weak reference count] : 2 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-command:dx dyn_rc,d
//@ cdb-check:dyn_rc,d [Type: alloc::rc::Rc<dyn$<core::fmt::Debug>,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 31 [Type: core::cell::Cell<usize>]
//@ cdb-check: [Weak reference count] : 2 [Type: core::cell::Cell<usize>]
//@ cdb-command:dx dyn_rc_weak,d
//@ cdb-check:dyn_rc_weak,d [Type: alloc::rc::Weak<dyn$<core::fmt::Debug>,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 31 [Type: core::cell::Cell<usize>]
//@ cdb-check: [Weak reference count] : 2 [Type: core::cell::Cell<usize>]
//@ cdb-command:dx slice_rc,d
//@ cdb-check:slice_rc,d : { len=3 } [Type: alloc::rc::Rc<slice2$<u32>,alloc::alloc::Global>]
//@ cdb-check: [Length] : 3 [Type: [...]]
//@ cdb-check: [Reference count] : 41 [Type: core::cell::Cell<usize>]
//@ cdb-check: [Weak reference count] : 2 [Type: core::cell::Cell<usize>]
//@ cdb-check: [0] : 1 [Type: u32]
//@ cdb-check: [1] : 2 [Type: u32]
//@ cdb-check: [2] : 3 [Type: u32]
//@ cdb-command:dx slice_rc_weak,d
//@ cdb-check:slice_rc_weak,d : { len=3 } [Type: alloc::rc::Weak<slice2$<u32>,alloc::alloc::Global>]
//@ cdb-check: [Length] : 3 [Type: [...]]
//@ cdb-check: [Reference count] : 41 [Type: core::cell::Cell<usize>]
//@ cdb-check: [Weak reference count] : 2 [Type: core::cell::Cell<usize>]
//@ cdb-check: [0] : 1 [Type: u32]
//@ cdb-check: [1] : 2 [Type: u32]
//@ cdb-check: [2] : 3 [Type: u32]
//@ cdb-command:dx dyn_arc,d
//@ cdb-check:dyn_arc,d [Type: alloc::sync::Arc<dyn$<core::fmt::Debug>,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 51 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [Weak reference count] : 2 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-command:dx dyn_arc_weak,d
//@ cdb-check:dyn_arc_weak,d [Type: alloc::sync::Weak<dyn$<core::fmt::Debug>,alloc::alloc::Global>]
//@ cdb-check: [Reference count] : 51 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [Weak reference count] : 2 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-command:dx slice_arc,d
//@ cdb-check:slice_arc,d : { len=3 } [Type: alloc::sync::Arc<slice2$<u32>,alloc::alloc::Global>]
//@ cdb-check: [Length] : 3 [Type: [...]]
//@ cdb-check: [Reference count] : 61 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [Weak reference count] : 2 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [0] : 4 [Type: u32]
//@ cdb-check: [1] : 5 [Type: u32]
//@ cdb-check: [2] : 6 [Type: u32]
//@ cdb-command:dx slice_arc_weak,d
//@ cdb-check:slice_arc_weak,d : { len=3 } [Type: alloc::sync::Weak<slice2$<u32>,alloc::alloc::Global>]
//@ cdb-check: [Length] : 3 [Type: [...]]
//@ cdb-check: [Reference count] : 61 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [Weak reference count] : 2 [Type: core::sync::atomic::AtomicUsize]
//@ cdb-check: [0] : 4 [Type: u32]
//@ cdb-check: [1] : 5 [Type: u32]
//@ cdb-check: [2] : 6 [Type: u32]
use std::fmt::Debug;
use std::rc::Rc;
use std::sync::Arc;
fn main() {
let rc = Rc::new(111);
inc_ref_count(&rc, 10);
let weak_rc = Rc::downgrade(&rc);
let arc = Arc::new(222);
inc_ref_count(&arc, 20);
let weak_arc = Arc::downgrade(&arc);
let dyn_rc: Rc<dyn Debug> = Rc::new(333);
inc_ref_count(&dyn_rc, 30);
let dyn_rc_weak = Rc::downgrade(&dyn_rc);
let slice_rc: Rc<[u32]> = Rc::from(vec![1, 2, 3]);
inc_ref_count(&slice_rc, 40);
let slice_rc_weak = Rc::downgrade(&slice_rc);
let dyn_arc: Arc<dyn Debug> = Arc::new(444);
inc_ref_count(&dyn_arc, 50);
let dyn_arc_weak = Arc::downgrade(&dyn_arc);
let slice_arc: Arc<[u32]> = Arc::from(vec![4, 5, 6]);
inc_ref_count(&slice_arc, 60);
let slice_arc_weak = Arc::downgrade(&slice_arc);
zzz(); // #break
}
fn inc_ref_count<T: Clone>(rc: &T, count: usize) {
for _ in 0..count {
std::mem::forget(rc.clone());
}
}
fn zzz() {
()
}