Because Rust will not prove that these two conditionals cover all cases. From the compiler's point of view, there are three cases: arr.len() != l, arr.len() == l, and the third one where neither is true, and you don't provide any value to va in the third case.
If the first conditions don't cover all cases, this will silently produce unexpected results. I'd prefer to use unreachable!() here, which will panic if the code ever reaches it:
let va = if 2 != 3 {
7
} else if 2 == 2 {
2
} else {
unreachable!()
};