Open
Description
This program has a different result under GCC debug and GCC release.
2 1 //debug
2 -1 // release
fn dump_var(var2: usize, val2: usize, var3: usize) {
println!("val2:{val2}")
}
#[inline(never)]
fn dump_var2(var2: usize, val2: usize, var3: usize) {
println!("val2:{val2}")
}
fn fn6(arg: bool, arg2: usize) -> bool {
dump_var(0, arg2, 0);
dump_var2(0, !arg as usize, 0);
true
}
fn main() {
let mut _1 = false;
let mut _3 = 2;
let mut _4 = (&1, 1);
loop {
if _4.1 == 0 {
if _4.1 == 1 {
_1 = true;
} else {
_1 = false;
}
} else if fn6(_1, _3) {
loop {
_3 = _4.1;
let mut _6 = 0;
_6 = 0;
let tmp2 = _6;
if tmp2 == 1 {
_4.0 = &_4.1
} else if tmp2 == 0 {
return;
} else {
break;
}
}
}
}
}
It looks like the cast of val as i128
is nonsensical. Since val
is a boolean value, one would expect it to be either 1 or 0, and not -1.