summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authordianqk <dianqk@dianqk.net>2025-06-28 10:32:08 +0800
committerJosh Stone <jistone@redhat.com>2025-07-10 13:30:37 -0700
commit5ebfeddae5adfe34e1d41091767c807599769215 (patch)
tree74e849d41f1323460fa0652a20acb57855ad3ba7 /tests
parent736f54bb355da1c11e2eaabba70ada55b88e1b01 (diff)
downloadrust-5ebfeddae5adfe34e1d41091767c807599769215.tar.gz
rust-5ebfeddae5adfe34e1d41091767c807599769215.zip
Add a regression test for ld64
(cherry picked from commit 32115c3a1710d1ac98b2ffea23014e0d2ee19c0d)
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/darwin-ld64.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/ui/darwin-ld64.rs b/tests/ui/darwin-ld64.rs
new file mode 100644
index 00000000000..75acc07a002
--- /dev/null
+++ b/tests/ui/darwin-ld64.rs
@@ -0,0 +1,24 @@
+//@ compile-flags: -Copt-level=3 -Ccodegen-units=256 -Clink-arg=-ld_classic
+//@ run-pass
+//@ only-x86_64-apple-darwin
+
+// This is a regression test for https://github.com/rust-lang/rust/issues/140686.
+// Although this is a ld64(ld-classic) bug, we still need to support it
+// due to cross-compilation and support for older Xcode.
+
+fn main() {
+    let dst: Vec<u8> = Vec::new();
+    let len = broken_func(std::hint::black_box(2), dst);
+    assert_eq!(len, 8);
+}
+
+#[inline(never)]
+pub fn broken_func(version: usize, mut dst: Vec<u8>) -> usize {
+    match version {
+        1 => dst.extend_from_slice(b"aaaaaaaa"),
+        2 => dst.extend_from_slice(b"bbbbbbbb"),
+        3 => dst.extend_from_slice(b"bbbbbbbb"),
+        _ => panic!(),
+    }
+    dst.len()
+}