//! Test that opt-level=z produces correct code on Windows MSVC targets. //! //! A previously outdated version of LLVM caused compilation failures and //! generated invalid code on Windows specifically with optimization level `z`. //! The bug manifested as corrupted base pointers due to incorrect register //! usage in the generated assembly (e.g., `popl %esi` corrupting local variables). //! After updating to a more recent LLVM version, this test ensures that //! compilation and execution both succeed with opt-level=z. //! //! Regression test for . //@ ignore-cross-compile // Reason: the compiled binary is executed //@ only-windows // Reason: the observed bug only occurred on Windows MSVC targets //@ 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 due to incorrect register allocation let y: fn(i32, i32) -> i64 = test::black_box(foo); test::black_box(y(1, 2)); } fn main() { bar(); }