tests: Move run-pass tests without naming conflicts to ui

This commit is contained in:
Vadim Petrochenkov 2019-07-27 01:33:01 +03:00
parent ca9faa52f5
commit 9be35f82c1
3226 changed files with 64 additions and 196 deletions

View file

@ -0,0 +1,8 @@
// run-pass
// compile-flags: -Clto=thin
// no-prefer-dynamic
fn main() {
println!("hello!");
}

View file

@ -0,0 +1,6 @@
// compile-flags: -Z thinlto -C codegen-units=8
#[inline]
pub fn foo(b: u8) {
b.to_string();
}

View file

@ -0,0 +1,11 @@
// no-prefer-dynamic
// compile-flags: -Z thinlto -C codegen-units=8 -C prefer-dynamic
#![crate_type = "rlib"]
#![crate_type = "dylib"]
pub static A: u32 = 43;
pub mod a {
pub static A: u32 = 43;
}

View file

@ -0,0 +1,7 @@
// no-prefer-dynamic
#![crate_type = "rlib"]
pub fn bar() -> u32 {
3
}

View file

@ -0,0 +1,9 @@
// run-pass
// aux-build:dylib.rs
extern crate dylib;
fn main() {
dylib::foo(1);
}

View file

@ -0,0 +1,22 @@
// run-pass
// aux-build:msvc-imp-present.rs
// compile-flags: -Z thinlto -C codegen-units=8
// no-prefer-dynamic
// On MSVC we have a "hack" where we emit symbols that look like `_imp_$name`
// for all exported statics. This is done because we apply `dllimport` to all
// imported constants and this allows everything to actually link correctly.
//
// The ThinLTO passes aggressively remove symbols if they can, and this test
// asserts that the ThinLTO passes don't remove these compiler-generated
// `_imp_*` symbols. The external library that we link in here is compiled with
// ThinLTO and multiple codegen units and has a few exported constants. Note
// that we also namely compile the library as both a dylib and an rlib, but we
// link the rlib to ensure that we assert those generated symbols exist.
extern crate msvc_imp_present as bar;
fn main() {
println!("{}", bar::A);
}

View file

@ -0,0 +1,30 @@
// run-pass
// compile-flags: -Z thinlto -C codegen-units=8 -O
// ignore-emscripten can't inspect instructions on emscripten
// We want to assert here that ThinLTO will inline across codegen units. There's
// not really a great way to do that in general so we sort of hack around it by
// praying two functions go into separate codegen units and then assuming that
// if inlining *doesn't* happen the first byte of the functions will differ.
pub fn foo() -> u32 {
bar::bar()
}
mod bar {
pub fn bar() -> u32 {
3
}
}
fn main() {
println!("{} {}", foo(), bar::bar());
unsafe {
let foo = foo as usize as *const u8;
let bar = bar::bar as usize as *const u8;
assert_eq!(*foo, *bar);
}
}

View file

@ -0,0 +1,28 @@
// run-pass
// compile-flags: -C codegen-units=8 -O -C lto=thin
// aux-build:thin-lto-inlines-aux.rs
// no-prefer-dynamic
// ignore-emscripten can't inspect instructions on emscripten
// We want to assert here that ThinLTO will inline across codegen units. There's
// not really a great way to do that in general so we sort of hack around it by
// praying two functions go into separate codegen units and then assuming that
// if inlining *doesn't* happen the first byte of the functions will differ.
extern crate thin_lto_inlines_aux as bar;
pub fn foo() -> u32 {
bar::bar()
}
fn main() {
println!("{} {}", foo(), bar::bar());
unsafe {
let foo = foo as usize as *const u8;
let bar = bar::bar as usize as *const u8;
assert_eq!(*foo, *bar);
}
}

View file

@ -0,0 +1,28 @@
// run-pass
// compile-flags: -C codegen-units=8 -Z thinlto
// ignore-windows
#![feature(linkage)]
pub mod foo {
#[linkage = "weak"]
#[no_mangle]
pub extern "C" fn FOO() -> i32 {
0
}
}
mod bar {
extern "C" {
fn FOO() -> i32;
}
pub fn bar() -> i32 {
unsafe { FOO() }
}
}
fn main() {
bar::bar();
}