#![allow(unused)] fn test_if() -> i32 { let x = if true { eprintln!("hello"); 3; } else { 4; }; x //~ ERROR mismatched types } fn test_if_without_binding() -> i32 { if true { //~ ERROR mismatched types eprintln!("hello"); 3; } else { //~ ERROR mismatched types 4; } } fn test_match() -> i32 { let v = 1; let res = match v { 1 => { 1; } _ => { 2; } }; res //~ ERROR mismatched types } fn test_match_match_without_binding() -> i32 { let v = 1; match v { 1 => { 1; } //~ ERROR mismatched types _ => { 2; } //~ ERROR mismatched types } } fn test_match_arm_different_types() -> i32 { let v = 1; let res = match v { 1 => { if 1 < 2 { 1 } else { 2 } } _ => { 2; } //~ ERROR `match` arms have incompatible types }; res } fn test_if_match_mixed() -> i32 { let x = if true { 3; } else { match 1 { 1 => { 1 } _ => { 2 } }; }; x //~ ERROR mismatched types } fn test_if_match_mixed_failed() -> i32 { let x = if true { 3; } else { // because this is a tailed expr, so we won't check deeper match 1 { 1 => { 33; } _ => { 44; } } }; x //~ ERROR mismatched types } fn main() {}