// This test checks that encapsulation symbols are not garbage collected by the linker. // LLD will remove them by default, so this test checks that we pass `-znostart-stop-gc` to LLD // to avoid that behavior. Without that flag, the test should fail. // This test is inspired by the behavior of the linkme crate. // //@ build-pass //@ only-x86_64-unknown-linux-gnu unsafe extern "Rust" { // The __start_ section name is magical for the linker, // It will put link sections named EXTERNFNS after it. #[link_name = "__start_EXTERNFNS"] static SECTION_START: fn(); } #[used] #[unsafe(link_section = "EXTERNFNS")] static EXTERN_FN_LOCAL: fn() = extern_fn; fn extern_fn() {} fn main() { // We need to reference the SECTION_START symbol to avoid it being garbage collected let slice = unsafe { SECTION_START }; }