Add regression test for linking issue with start-group / end-group
This commit is contained in:
parent
3ab596514a
commit
44dba79124
18
src/test/run-make-fulldeps/issue-69368/Makefile
Normal file
18
src/test/run-make-fulldeps/issue-69368/Makefile
Normal file
@ -0,0 +1,18 @@
|
||||
-include ../tools.mk
|
||||
|
||||
# Test that previously triggered a linker failure with root cause
|
||||
# similar to one found in the issue #69368.
|
||||
#
|
||||
# The crate that provides oom lang item is missing some other lang
|
||||
# items. Necessary to prevent the use of start-group / end-group.
|
||||
#
|
||||
# The weak lang items are defined in a separate compilation units,
|
||||
# so that linker could omit them if not used.
|
||||
#
|
||||
# The crates that need those weak lang items are dependencies of
|
||||
# crates that provide them.
|
||||
|
||||
all:
|
||||
$(RUSTC) a.rs
|
||||
$(RUSTC) b.rs
|
||||
$(RUSTC) c.rs
|
16
src/test/run-make-fulldeps/issue-69368/a.rs
Normal file
16
src/test/run-make-fulldeps/issue-69368/a.rs
Normal file
@ -0,0 +1,16 @@
|
||||
#![crate_type = "rlib"]
|
||||
#![feature(lang_items)]
|
||||
#![feature(panic_unwind)]
|
||||
#![no_std]
|
||||
|
||||
extern crate panic_unwind;
|
||||
|
||||
#[panic_handler]
|
||||
pub fn panic_handler(_: &core::panic::PanicInfo) -> ! {
|
||||
loop {}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
extern "C" fn __rust_drop_panic() -> ! {
|
||||
loop {}
|
||||
}
|
8
src/test/run-make-fulldeps/issue-69368/b.rs
Normal file
8
src/test/run-make-fulldeps/issue-69368/b.rs
Normal file
@ -0,0 +1,8 @@
|
||||
#![crate_type = "rlib"]
|
||||
#![feature(alloc_error_handler)]
|
||||
#![no_std]
|
||||
|
||||
#[alloc_error_handler]
|
||||
pub fn error_handler(_: core::alloc::Layout) -> ! {
|
||||
panic!();
|
||||
}
|
34
src/test/run-make-fulldeps/issue-69368/c.rs
Normal file
34
src/test/run-make-fulldeps/issue-69368/c.rs
Normal file
@ -0,0 +1,34 @@
|
||||
#![crate_type = "bin"]
|
||||
#![feature(start)]
|
||||
#![no_std]
|
||||
|
||||
extern crate alloc;
|
||||
extern crate a;
|
||||
extern crate b;
|
||||
|
||||
use alloc::vec::Vec;
|
||||
use core::alloc::*;
|
||||
|
||||
struct Allocator;
|
||||
|
||||
unsafe impl GlobalAlloc for Allocator {
|
||||
unsafe fn alloc(&self, _: Layout) -> *mut u8 {
|
||||
loop {}
|
||||
}
|
||||
|
||||
unsafe fn dealloc(&self, _: *mut u8, _: Layout) {
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
|
||||
#[global_allocator]
|
||||
static ALLOCATOR: Allocator = Allocator;
|
||||
|
||||
#[start]
|
||||
fn main(argc: isize, _argv: *const *const u8) -> isize {
|
||||
let mut v = Vec::new();
|
||||
for i in 0..argc {
|
||||
v.push(i);
|
||||
}
|
||||
v.iter().sum()
|
||||
}
|
Loading…
Reference in New Issue
Block a user