diff options
| author | bors <bors@rust-lang.org> | 2024-08-09 20:18:10 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-08-09 20:18:10 +0000 |
| commit | ca5d25e2c41f5a6b4ce65c681bf2f94c7ead1f14 (patch) | |
| tree | 7ceaf760714e1f1716fa4abd8c2b5731b8eb266b /compiler/rustc_codegen_cranelift/example | |
| parent | 19ebdcedf1f5619f8f06c546c7541bb9b54aecda (diff) | |
| parent | 57dd967e7122b55f14027122828cdd8b60a86ad4 (diff) | |
| download | rust-ca5d25e2c41f5a6b4ce65c681bf2f94c7ead1f14.tar.gz rust-ca5d25e2c41f5a6b4ce65c681bf2f94c7ead1f14.zip | |
Auto merge of #128896 - bjorn3:sync_cg_clif-2024-08-09, r=bjorn3
Subtree sync for rustc_codegen_cranelift The main highlight this time is support for raw-dylib on Windows thanks to `@dpaoliello.` Compiling the ring crate for arm64 macOS has been fixed too. r? `@ghost` `@rustbot` label +A-codegen +A-cranelift +T-compiler
Diffstat (limited to 'compiler/rustc_codegen_cranelift/example')
| -rw-r--r-- | compiler/rustc_codegen_cranelift/example/raw-dylib.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_cranelift/example/raw-dylib.rs b/compiler/rustc_codegen_cranelift/example/raw-dylib.rs new file mode 100644 index 00000000000..4711884f76a --- /dev/null +++ b/compiler/rustc_codegen_cranelift/example/raw-dylib.rs @@ -0,0 +1,31 @@ +// Tests the raw-dylib feature for Windows. +// https://doc.rust-lang.org/reference/items/external-blocks.html#the-link-attribute + +fn main() { + #[cfg(windows)] + { + #[link(name = "kernel32", kind = "raw-dylib")] + extern "C" { + fn GetModuleFileNameA( + module: *mut std::ffi::c_void, + filename: *mut u8, + size: u32, + ) -> u32; + } + + // Get the filename of the current executable.... + let mut buffer = [0u8; 1024]; + let size = unsafe { + GetModuleFileNameA(core::ptr::null_mut(), buffer.as_mut_ptr(), buffer.len() as u32) + }; + if size == 0 { + eprintln!("failed to get module file name: {}", std::io::Error::last_os_error()); + return; + } else { + // ...and make sure that it matches the test name. + let filename = + std::ffi::CStr::from_bytes_with_nul(&buffer[..size as usize + 1]).unwrap(); + assert!(filename.to_str().unwrap().ends_with("raw-dylib.exe")); + } + } +} |
