mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			229 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			229 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|    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|}
 | |
| 
 | 
