Skip to content

Another UB found using rustlantis #691

@FractalFir

Description

@FractalFir

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions