LL|       |#![allow(unused_assignments, unused_variables)]
   LL|       |//@ compile-flags: -C opt-level=2
   LL|       |
   LL|       |// This test used to be sensitive to certain coverage-specific hacks in
   LL|       |// `rustc_middle/mir/mono.rs`, but those hacks were later cleaned up by
   LL|       |// <https://github.com/rust-lang/rust/pull/83666>.
   LL|       |
   LL|       |#[rustfmt::skip]
   LL|      1|fn main() {
   LL|      1|    // Initialize test constants in a way that cannot be determined at compile time, to ensure
   LL|      1|    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
   LL|      1|    // dependent conditions.
   LL|      1|    let is_true = std::env::args().len() == 1;
   LL|      1|    let is_false = !is_true;
   LL|      1|
   LL|      1|    let mut some_string = Some(String::from("the string content"));
   LL|      1|    println!(
   LL|      1|        "The string or alt: {}"
   LL|      1|        ,
   LL|      1|        some_string
   LL|      1|            .
   LL|      1|            unwrap_or_else
   LL|      1|        (
   LL|      1|            ||
   LL|      0|            {
   LL|      0|                let mut countdown = 0;
   LL|      0|                if is_false {
   LL|      0|                    countdown = 10;
   LL|      0|                }
   LL|      0|                "alt string 1".to_owned()
   LL|      1|            }
   LL|      1|        )
   LL|      1|    );
   LL|      1|
   LL|      1|    some_string = Some(String::from("the string content"));
   LL|      1|    let
   LL|      1|        a
   LL|       |    =
   LL|       |        ||
   LL|      0|    {
   LL|      0|        let mut countdown = 0;
   LL|      0|        if is_false {
   LL|      0|            countdown = 10;
   LL|      0|        }
   LL|      0|        "alt string 2".to_owned()
   LL|      0|    };
   LL|      1|    println!(
   LL|      1|        "The string or alt: {}"
   LL|      1|        ,
   LL|      1|        some_string
   LL|      1|            .
   LL|      1|            unwrap_or_else
   LL|      1|        (
   LL|      1|            a
   LL|      1|        )
   LL|      1|    );
   LL|      1|
   LL|      1|    some_string = None;
   LL|      1|    println!(
   LL|      1|        "The string or alt: {}"
   LL|      1|        ,
   LL|      1|        some_string
   LL|      1|            .
   LL|      1|            unwrap_or_else
   LL|      1|        (
   LL|      1|            ||
   LL|      1|            {
   LL|      1|                let mut countdown = 0;
   LL|      1|                if is_false {
   LL|      0|                    countdown = 10;
   LL|      1|                }
   LL|      1|                "alt string 3".to_owned()
   LL|      1|            }
   LL|      1|        )
   LL|      1|    );
   LL|      1|
   LL|      1|    some_string = None;
   LL|      1|    let
   LL|      1|        a
   LL|       |    =
   LL|       |        ||
   LL|      1|    {
   LL|      1|        let mut countdown = 0;
   LL|      1|        if is_false {
   LL|      0|            countdown = 10;
   LL|      1|        }
   LL|      1|        "alt string 4".to_owned()
   LL|      1|    };
   LL|      1|    println!(
   LL|      1|        "The string or alt: {}"
   LL|      1|        ,
   LL|      1|        some_string
   LL|      1|            .
   LL|      1|            unwrap_or_else
   LL|      1|        (
   LL|      1|            a
   LL|      1|        )
   LL|      1|    );
   LL|      1|
   LL|      1|    let
   LL|      1|        quote_closure
   LL|       |    =
   LL|       |        |val|
   LL|      5|    {
   LL|      5|        let mut countdown = 0;
   LL|      5|        if is_false {
   LL|      0|            countdown = 10;
   LL|      5|        }
   LL|      5|        format!("'{}'", val)
   LL|      5|    };
   LL|      1|    println!(
   LL|      1|        "Repeated, quoted string: {:?}"
   LL|      1|        ,
   LL|      1|        std::iter::repeat("repeat me")
   LL|      1|            .take(5)
   LL|      1|            .map
   LL|      1|        (
   LL|      1|            quote_closure
   LL|      1|        )
   LL|      1|            .collect::<Vec<_>>()
   LL|      1|    );
   LL|      1|
   LL|      1|    let
   LL|      1|        _unused_closure
   LL|       |    =
   LL|       |        |
   LL|       |            mut countdown
   LL|       |        |
   LL|      0|    {
   LL|      0|        if is_false {
   LL|      0|            countdown = 10;
   LL|      0|        }
   LL|      0|        "closure should be unused".to_owned()
   LL|      0|    };
   LL|       |
   LL|      1|    let mut countdown = 10;
   LL|      1|    let _short_unused_closure = | _unused_arg: u8 | countdown += 1;
                                                                  ^0
   LL|       |
   LL|       |
   LL|      1|    let short_used_covered_closure_macro = | used_arg: u8 | println!("called");
   LL|      1|    let short_used_not_covered_closure_macro = | used_arg: u8 | println!("not called");
                                                                              ^0
   LL|      1|    let _short_unused_closure_macro = | _unused_arg: u8 | println!("not called");
                                                                        ^0
   LL|       |
   LL|       |
   LL|       |
   LL|       |
   LL|      1|    let _short_unused_closure_block = | _unused_arg: u8 | { println!("not called") };
                                                                        ^0
   LL|       |
   LL|      1|    let _shortish_unused_closure = | _unused_arg: u8 | {
   LL|      0|        println!("not called")
   LL|      0|    };
   LL|       |
   LL|      1|    let _as_short_unused_closure = |
   LL|       |        _unused_arg: u8
   LL|      0|    | { println!("not called") };
   LL|       |
   LL|      1|    let _almost_as_short_unused_closure = |
   LL|       |        _unused_arg: u8
   LL|      0|    | { println!("not called") }
   LL|       |    ;
   LL|       |
   LL|       |
   LL|       |
   LL|       |
   LL|       |
   LL|      1|    let _short_unused_closure_line_break_no_block = | _unused_arg: u8 |
   LL|      0|println!("not called")
   LL|       |    ;
   LL|       |
   LL|      1|    let _short_unused_closure_line_break_no_block2 =
   LL|       |        | _unused_arg: u8 |
   LL|      0|            println!(
   LL|      0|                "not called"
   LL|      0|            )
   LL|       |    ;
   LL|       |
   LL|      1|    let short_used_not_covered_closure_line_break_no_block_embedded_branch =
   LL|       |        | _unused_arg: u8 |
   LL|      0|            println!(
   LL|      0|                "not called: {}",
   LL|      0|                if is_true { "check" } else { "me" }
   LL|      0|            )
   LL|       |    ;
   LL|       |
   LL|      1|    let short_used_not_covered_closure_line_break_block_embedded_branch =
   LL|       |        | _unused_arg: u8 |
   LL|      0|        {
   LL|      0|            println!(
   LL|      0|                "not called: {}",
   LL|      0|                if is_true { "check" } else { "me" }
   LL|       |            )
   LL|      0|        }
   LL|       |    ;
   LL|       |
   LL|      1|    let short_used_covered_closure_line_break_no_block_embedded_branch =
   LL|       |        | _unused_arg: u8 |
   LL|      1|            println!(
   LL|      1|                "not called: {}",
   LL|      1|                if is_true { "check" } else { "me" }
                                                            ^0
   LL|      1|            )
   LL|       |    ;
   LL|       |
   LL|      1|    let short_used_covered_closure_line_break_block_embedded_branch =
   LL|       |        | _unused_arg: u8 |
   LL|      1|        {
   LL|      1|            println!(
   LL|      1|                "not called: {}",
   LL|      1|                if is_true { "check" } else { "me" }
                                                            ^0
   LL|       |            )
   LL|      1|        }
   LL|       |    ;
   LL|       |
   LL|      1|    if is_false {
   LL|      0|        short_used_not_covered_closure_macro(0);
   LL|      0|        short_used_not_covered_closure_line_break_no_block_embedded_branch(0);
   LL|      0|        short_used_not_covered_closure_line_break_block_embedded_branch(0);
   LL|      1|    }
   LL|      1|    short_used_covered_closure_macro(0);
   LL|      1|    short_used_covered_closure_line_break_no_block_embedded_branch(0);
   LL|      1|    short_used_covered_closure_line_break_block_embedded_branch(0);
   LL|      1|}