Add regression test for linking issue with start-group / end-group

This commit is contained in:
Tomasz Miąsko 2020-03-03 00:00:00 +00:00
parent 3ab596514a
commit 44dba79124
4 changed files with 76 additions and 0 deletions

View 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

View 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 {}
}

View 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!();
}

View 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()
}