#![feature(coverage_attribute, let_chains)] //@ edition: 2021 //@ compile-flags: -Zcoverage-options=branch //@ llvm-cov-flags: --show-branches=count macro_rules! no_merge { () => { for _ in 0..1 {} }; } fn if_let(input: Option<&str>) { no_merge!(); if let Some(x) = input { say(x); } else { say("none"); } say("done"); } fn if_let_chain(a: Option<&str>, b: Option<&str>) { if let Some(x) = a && let Some(y) = b { say(x); say(y); } else { say("not both"); } say("done"); } #[coverage(off)] fn say(message: &str) { core::hint::black_box(message); } #[coverage(off)] fn main() { if_let(Some("x")); if_let(Some("x")); if_let(None); for _ in 0..8 { if_let_chain(Some("a"), Some("b")); } for _ in 0..4 { if_let_chain(Some("a"), None); } for _ in 0..2 { if_let_chain(None, Some("b")); } if_let_chain(None, None); } // FIXME(#124118) Actually instrument if-let and let-chains for branch coverage.