| //@ run-pass | |
| //@ ignore-windows-gnu: only statics marked with used can be GC-ed on windows-gnu | |
| // Regression test for <https://github.com/rust-lang/rust/issues/139744>. | |
| // Functions in the binary marked with no_mangle should be GC-ed if they | |
| // are not indirectly referenced by main. | |
| #![feature(used_with_arg)] | |
| #[cfg_attr(windows, link(name = "this_lib_does_not_exist", kind = "raw-dylib"))] | |
| unsafe extern "C" { | |
| unsafe static THIS_SYMBOL_SHOULD_BE_UNDEFINED: usize; | |
| } | |
| #[unsafe(no_mangle)] | |
| pub unsafe fn function_marked_with_no_mangle() { | |
| println!("FUNCTION_MARKED_WITH_NO_MANGLE = {}", unsafe { THIS_SYMBOL_SHOULD_BE_UNDEFINED }); | |
| } | |
| #[used(compiler)] | |
| pub static FUNCTION_MARKED_WITH_USED: unsafe fn() = || { | |
| println!("FUNCTION_MARKED_WITH_USED = {}", unsafe { THIS_SYMBOL_SHOULD_BE_UNDEFINED }); | |
| }; | |
| fn main() { | |
| println!("MAIN"); | |
| } |