| // A previously outdated version of LLVM caused compilation failures on Windows |
| // specifically with optimization level `z`. After the update to a more recent LLVM |
| // version, this test checks that compilation and execution both succeed. |
| // See https://github.com/rust-lang/rust/issues/45034 |
| |
| //@ ignore-cross-compile |
| // Reason: the compiled binary is executed |
| //@ only-windows |
| // Reason: the observed bug only occurs on Windows |
| //@ run-pass |
| //@ compile-flags: -C opt-level=z |
| |
| #![feature(test)] |
| extern crate test; |
| |
| fn foo(x: i32, y: i32) -> i64 { |
| (x + y) as i64 |
| } |
| |
| #[inline(never)] |
| fn bar() { |
| let _f = Box::new(0); |
| // This call used to trigger an LLVM bug in opt-level z where the base |
| // pointer gets corrupted, see issue #45034 |
| let y: fn(i32, i32) -> i64 = test::black_box(foo); |
| test::black_box(y(1, 2)); |
| } |
| |
| fn main() { |
| bar(); |
| } |