summaryrefslogtreecommitdiffstats
path: root/tests/ui/lto/auxiliary
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/lto/auxiliary')
-rw-r--r--tests/ui/lto/auxiliary/debuginfo-lto-aux.rs29
-rw-r--r--tests/ui/lto/auxiliary/dylib.rs6
-rw-r--r--tests/ui/lto/auxiliary/lto-duplicate-symbols1.rs6
-rw-r--r--tests/ui/lto/auxiliary/lto-duplicate-symbols2.rs6
-rw-r--r--tests/ui/lto/auxiliary/lto-rustc-loads-linker-plugin.rs6
-rw-r--r--tests/ui/lto/auxiliary/msvc-imp-present.rs11
-rw-r--r--tests/ui/lto/auxiliary/thin-lto-inlines-aux.rs7
-rw-r--r--tests/ui/lto/auxiliary/thinlto-dylib.rs23
8 files changed, 94 insertions, 0 deletions
diff --git a/tests/ui/lto/auxiliary/debuginfo-lto-aux.rs b/tests/ui/lto/auxiliary/debuginfo-lto-aux.rs
new file mode 100644
index 000000000..dd471154b
--- /dev/null
+++ b/tests/ui/lto/auxiliary/debuginfo-lto-aux.rs
@@ -0,0 +1,29 @@
+// compile-flags: -g --crate-type=rlib
+
+pub struct StructWithLifetime<'a>(&'a i32);
+pub fn mk_struct_with_lt<'a>(x: &'a i32) -> StructWithLifetime<'a> {
+ StructWithLifetime(x)
+}
+
+pub struct RegularStruct(u32);
+pub fn mk_regular_struct(x: u32) -> RegularStruct {
+ RegularStruct(x)
+}
+
+pub fn take_fn(f: fn(i32) -> i32, x: i32) -> i32 {
+ f(x)
+}
+
+pub fn with_closure(x: i32) -> i32 {
+ let closure = |i| { x + i };
+
+ closure(1) + closure(2)
+}
+
+pub fn generic_fn<T>(x: T) -> (T, u32) {
+ (x, 1)
+}
+
+pub fn user_of_generic_fn(x: f32) -> (f32, u32) {
+ generic_fn(x)
+}
diff --git a/tests/ui/lto/auxiliary/dylib.rs b/tests/ui/lto/auxiliary/dylib.rs
new file mode 100644
index 000000000..e8b7f8f9f
--- /dev/null
+++ b/tests/ui/lto/auxiliary/dylib.rs
@@ -0,0 +1,6 @@
+// compile-flags: -Z thinlto -C codegen-units=8
+
+#[inline]
+pub fn foo(b: u8) {
+ b.to_string();
+}
diff --git a/tests/ui/lto/auxiliary/lto-duplicate-symbols1.rs b/tests/ui/lto/auxiliary/lto-duplicate-symbols1.rs
new file mode 100644
index 000000000..ec6d05603
--- /dev/null
+++ b/tests/ui/lto/auxiliary/lto-duplicate-symbols1.rs
@@ -0,0 +1,6 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+
+#[no_mangle]
+pub extern "C" fn foo() {}
diff --git a/tests/ui/lto/auxiliary/lto-duplicate-symbols2.rs b/tests/ui/lto/auxiliary/lto-duplicate-symbols2.rs
new file mode 100644
index 000000000..ec6d05603
--- /dev/null
+++ b/tests/ui/lto/auxiliary/lto-duplicate-symbols2.rs
@@ -0,0 +1,6 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+
+#[no_mangle]
+pub extern "C" fn foo() {}
diff --git a/tests/ui/lto/auxiliary/lto-rustc-loads-linker-plugin.rs b/tests/ui/lto/auxiliary/lto-rustc-loads-linker-plugin.rs
new file mode 100644
index 000000000..d24375b2d
--- /dev/null
+++ b/tests/ui/lto/auxiliary/lto-rustc-loads-linker-plugin.rs
@@ -0,0 +1,6 @@
+// compile-flags: -Clinker-plugin-lto
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+
+pub fn foo() {}
diff --git a/tests/ui/lto/auxiliary/msvc-imp-present.rs b/tests/ui/lto/auxiliary/msvc-imp-present.rs
new file mode 100644
index 000000000..933af050a
--- /dev/null
+++ b/tests/ui/lto/auxiliary/msvc-imp-present.rs
@@ -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;
+}
diff --git a/tests/ui/lto/auxiliary/thin-lto-inlines-aux.rs b/tests/ui/lto/auxiliary/thin-lto-inlines-aux.rs
new file mode 100644
index 000000000..5fd3f1996
--- /dev/null
+++ b/tests/ui/lto/auxiliary/thin-lto-inlines-aux.rs
@@ -0,0 +1,7 @@
+// no-prefer-dynamic
+
+#![crate_type = "rlib"]
+
+pub fn bar() -> u32 {
+ 3
+}
diff --git a/tests/ui/lto/auxiliary/thinlto-dylib.rs b/tests/ui/lto/auxiliary/thinlto-dylib.rs
new file mode 100644
index 000000000..9d17c35da
--- /dev/null
+++ b/tests/ui/lto/auxiliary/thinlto-dylib.rs
@@ -0,0 +1,23 @@
+// Auxiliary crate for test issue-105637: the LTOed dylib which had duplicate symbols from libstd,
+// breaking the panic hook feature.
+//
+// This simulates the `rustc_driver` crate, and the main crate simulates rustc's main binary hooking
+// into this driver.
+
+// compile-flags: -Zdylib-lto -C lto=thin
+
+use std::panic;
+
+pub fn main() {
+ // Install the hook we want to see executed
+ panic::set_hook(Box::new(|_| {
+ eprintln!("LTOed auxiliary crate panic hook");
+ }));
+
+ // Trigger the panic hook with an ICE
+ run_compiler();
+}
+
+fn run_compiler() {
+ panic!("ICEing");
+}