summaryrefslogtreecommitdiffstats
path: root/tests/debuginfo/generator-objects.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:58 +0000
commita4b7ed7a42c716ab9f05e351f003d589124fd55d (patch)
treeb620cd3f223850b28716e474e80c58059dca5dd4 /tests/debuginfo/generator-objects.rs
parentAdding upstream version 1.67.1+dfsg1. (diff)
downloadrustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.tar.xz
rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.zip
Adding upstream version 1.68.2+dfsg1.upstream/1.68.2+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/debuginfo/generator-objects.rs')
-rw-r--r--tests/debuginfo/generator-objects.rs98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/debuginfo/generator-objects.rs b/tests/debuginfo/generator-objects.rs
new file mode 100644
index 000000000..11c4ae2f6
--- /dev/null
+++ b/tests/debuginfo/generator-objects.rs
@@ -0,0 +1,98 @@
+// Require a gdb that can read DW_TAG_variant_part.
+// min-gdb-version: 8.2
+
+// LLDB without native Rust support cannot read DW_TAG_variant_part,
+// so it prints nothing for generators. But those tests are kept to
+// ensure that LLDB won't crash at least (like #57822).
+
+// compile-flags:-g
+
+// === GDB TESTS ===================================================================================
+
+// gdb-command:run
+// gdb-command:print b
+// gdb-check:$1 = generator_objects::main::{generator_env#0}::Unresumed{_ref__a: 0x[...]}
+// gdb-command:continue
+// gdb-command:print b
+// gdb-check:$2 = generator_objects::main::{generator_env#0}::Suspend0{c: 6, d: 7, _ref__a: 0x[...]}
+// gdb-command:continue
+// gdb-command:print b
+// gdb-check:$3 = generator_objects::main::{generator_env#0}::Suspend1{c: 7, d: 8, _ref__a: 0x[...]}
+// gdb-command:continue
+// gdb-command:print b
+// gdb-check:$4 = generator_objects::main::{generator_env#0}::Returned{_ref__a: 0x[...]}
+
+// === LLDB TESTS ==================================================================================
+
+// lldb-command:run
+// lldb-command:print b
+// lldbg-check:(generator_objects::main::{generator_env#0}) $0 =
+// lldb-command:continue
+// lldb-command:print b
+// lldbg-check:(generator_objects::main::{generator_env#0}) $1 =
+// lldb-command:continue
+// lldb-command:print b
+// lldbg-check:(generator_objects::main::{generator_env#0}) $2 =
+// lldb-command:continue
+// lldb-command:print b
+// lldbg-check:(generator_objects::main::{generator_env#0}) $3 =
+
+// === CDB TESTS ===================================================================================
+
+// cdb-command: g
+// cdb-command: dx b
+// cdb-check: b : Unresumed [Type: enum2$<generator_objects::main::generator_env$0>]
+// cdb-check: [+0x[...]] _ref__a : 0x[...] : 5 [Type: int *]
+
+// cdb-command: g
+// cdb-command: dx b
+// cdb-check: b : Suspend0 [Type: enum2$<generator_objects::main::generator_env$0>]
+// cdb-check: [+0x[...]] c : 6 [Type: int]
+// cdb-check: [+0x[...]] d : 7 [Type: int]
+// cdb-check: [+0x[...]] _ref__a : 0x[...] : 5 [Type: int *]
+
+// cdb-command: g
+// cdb-command: dx b
+// cdb-check: b : Suspend1 [Type: enum2$<generator_objects::main::generator_env$0>]
+// cdb-check: [+0x[...]] c : 7 [Type: int]
+// cdb-check: [+0x[...]] d : 8 [Type: int]
+// cdb-check: [+0x[...]] _ref__a : 0x[...] : 6 [Type: int *]
+
+// cdb-command: g
+// cdb-command: dx b
+// cdb-check: b : Returned [Type: enum2$<generator_objects::main::generator_env$0>]
+// cdb-check: [+0x[...]] _ref__a : 0x[...] : 6 [Type: int *]
+
+#![feature(omit_gdb_pretty_printer_section, generators, generator_trait)]
+#![omit_gdb_pretty_printer_section]
+
+use std::ops::Generator;
+use std::pin::Pin;
+
+fn main() {
+ let mut a = 5;
+ let mut b = || {
+ let mut c = 6;
+ let mut d = 7;
+
+ yield;
+ a += 1;
+ c += 1;
+ d += 1;
+
+ yield;
+ println!("{} {} {}", a, c, d);
+ };
+ _zzz(); // #break
+ Pin::new(&mut b).resume(());
+ _zzz(); // #break
+ Pin::new(&mut b).resume(());
+ _zzz(); // #break
+ Pin::new(&mut b).resume(());
+ _zzz(); // #break
+}
+
+#[inline(never)]
+fn _zzz() {
+ ()
+}