Skip to content

Add a regression test for ld64 #143126

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions tests/ui/darwin-ld64.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//@ compile-flags: -Copt-level=3 -Ccodegen-units=256 -Clink-arg=-ld_classic --target x86_64-apple-darwin
//@ run-pass
//@ only-macos
//@ needs-llvm-components: x86

// 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.
Comment on lines +6 to +8
Copy link
Member

@jieyouxu jieyouxu Jun 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: do we know if ld-classic will ever be removed in newer Xcode versions?

(EDIT: actually probably nevermind, we'll then either drop this test and/or need to bump our min baseline versions anyway.)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nobody knows. Even after removing it, we might still need a long time to get rid of the test. :(

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps we could wait for new updates from Apple first, such as a fix for the ld64 bug, or the release of new linker source code.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh for the test I'm not too worried even if somehow say a macos image bumps the xcode version and then this test blocks full CI, in that situation this test can be disabled or removed easily.

I was just musing if ld-classic might be gone.


fn main() {
let dst: Vec<u8> = Vec::new();
let len = broken_func(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()
}
Loading