Skip to content
Merged
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/linking/no-gc-encapsulation-symbols.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// 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 };
}
Loading