about summary refs log tree commit diff
path: root/tests/ui/debuginfo
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-08-26 15:40:29 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-08-26 16:54:28 +0000
commit930b2e72eeabf4cacf59d07999fac565836d05bd (patch)
tree4683351a1efe16973668aca90e2320f7f8710ec0 /tests/ui/debuginfo
parentf49494ecce9015a6b65a2a0c87a414b357e390c7 (diff)
downloadrust-930b2e72eeabf4cacf59d07999fac565836d05bd.tar.gz
rust-930b2e72eeabf4cacf59d07999fac565836d05bd.zip
Do not produce fragment for ZST.
Diffstat (limited to 'tests/ui/debuginfo')
-rw-r--r--tests/ui/debuginfo/sroa-fragment-debuginfo.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/ui/debuginfo/sroa-fragment-debuginfo.rs b/tests/ui/debuginfo/sroa-fragment-debuginfo.rs
new file mode 100644
index 00000000000..9c3c359e395
--- /dev/null
+++ b/tests/ui/debuginfo/sroa-fragment-debuginfo.rs
@@ -0,0 +1,31 @@
+// Verify that we do not trigger a LLVM assertion by creating zero-sized DWARF fragments.
+//
+// build-pass
+// compile-flags: -g -Zmir-opt-level=0 -Zmir-enable-passes=+ScalarReplacementOfAggregates
+// compile-flags: -Cno-prepopulate-passes
+
+#![crate_type = "lib"]
+
+pub struct ExtraSlice<'input> {
+    slice: &'input [u8],
+    extra: u32,
+}
+
+#[no_mangle]
+pub fn extra(s: &[u8]) {
+    let slice = ExtraSlice { slice: s, extra: s.len() as u32 };
+}
+
+struct Zst;
+
+pub struct ZstSlice<'input> {
+    slice: &'input [u8],
+    extra: Zst,
+}
+
+#[no_mangle]
+pub fn zst(s: &[u8]) {
+    // The field `extra` is a ZST. The fragment for the field `slice` encompasses the whole
+    // variable, so is not a fragment. In that case, the variable must have no fragment.
+    let slice = ZstSlice { slice: s, extra: Zst };
+}