mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-02 18:27:37 +00:00
20 lines
560 B
Rust
20 lines
560 B
Rust
//! Ensure shift operations don't mutate their right operand.
|
|
//!
|
|
//! This test checks that expressions like `0 << b` don't accidentally
|
|
//! modify the variable `b` due to codegen issues with virtual registers.
|
|
//!
|
|
//! Regression test for <https://github.com/rust-lang/rust/issues/152>.
|
|
|
|
//@ run-pass
|
|
|
|
pub fn main() {
|
|
let mut b: usize = 1;
|
|
while b < size_of::<usize>() {
|
|
// This shift operation should not mutate `b`
|
|
let _ = 0_usize << b;
|
|
b <<= 1;
|
|
std::hint::black_box(b);
|
|
}
|
|
assert_eq!(size_of::<usize>(), b);
|
|
}
|