mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			223 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
    1|       |#![allow(unused_assignments, unused_variables)]
 | 
						|
    2|       |// compile-flags: -C opt-level=2
 | 
						|
    3|      1|fn main() { // ^^ fix described in rustc_middle/mir/mono.rs
 | 
						|
    4|      1|    // Initialize test constants in a way that cannot be determined at compile time, to ensure
 | 
						|
    5|      1|    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
 | 
						|
    6|      1|    // dependent conditions.
 | 
						|
    7|      1|    let is_true = std::env::args().len() == 1;
 | 
						|
    8|      1|    let is_false = ! is_true;
 | 
						|
    9|      1|
 | 
						|
   10|      1|    let mut some_string = Some(String::from("the string content"));
 | 
						|
   11|      1|    println!(
 | 
						|
   12|      1|        "The string or alt: {}"
 | 
						|
   13|      1|        ,
 | 
						|
   14|      1|        some_string
 | 
						|
   15|      1|            .
 | 
						|
   16|      1|            unwrap_or_else
 | 
						|
   17|      1|        (
 | 
						|
   18|      1|            ||
 | 
						|
   19|      0|            {
 | 
						|
   20|      0|                let mut countdown = 0;
 | 
						|
   21|      0|                if is_false {
 | 
						|
   22|      0|                    countdown = 10;
 | 
						|
   23|      0|                }
 | 
						|
   24|      0|                "alt string 1".to_owned()
 | 
						|
   25|      1|            }
 | 
						|
   26|      1|        )
 | 
						|
   27|      1|    );
 | 
						|
   28|      1|
 | 
						|
   29|      1|    some_string = Some(String::from("the string content"));
 | 
						|
   30|      1|    let
 | 
						|
   31|      1|        a
 | 
						|
   32|       |    =
 | 
						|
   33|       |        ||
 | 
						|
   34|      0|    {
 | 
						|
   35|      0|        let mut countdown = 0;
 | 
						|
   36|      0|        if is_false {
 | 
						|
   37|      0|            countdown = 10;
 | 
						|
   38|      0|        }
 | 
						|
   39|      0|        "alt string 2".to_owned()
 | 
						|
   40|      0|    };
 | 
						|
   41|      1|    println!(
 | 
						|
   42|      1|        "The string or alt: {}"
 | 
						|
   43|      1|        ,
 | 
						|
   44|      1|        some_string
 | 
						|
   45|      1|            .
 | 
						|
   46|      1|            unwrap_or_else
 | 
						|
   47|      1|        (
 | 
						|
   48|      1|            a
 | 
						|
   49|      1|        )
 | 
						|
   50|      1|    );
 | 
						|
   51|      1|
 | 
						|
   52|      1|    some_string = None;
 | 
						|
   53|      1|    println!(
 | 
						|
   54|      1|        "The string or alt: {}"
 | 
						|
   55|      1|        ,
 | 
						|
   56|      1|        some_string
 | 
						|
   57|      1|            .
 | 
						|
   58|      1|            unwrap_or_else
 | 
						|
   59|      1|        (
 | 
						|
   60|      1|            ||
 | 
						|
   61|      1|            {
 | 
						|
   62|      1|                let mut countdown = 0;
 | 
						|
   63|      1|                if is_false {
 | 
						|
   64|      0|                    countdown = 10;
 | 
						|
   65|      1|                }
 | 
						|
   66|      1|                "alt string 3".to_owned()
 | 
						|
   67|      1|            }
 | 
						|
   68|      1|        )
 | 
						|
   69|      1|    );
 | 
						|
   70|      1|
 | 
						|
   71|      1|    some_string = None;
 | 
						|
   72|      1|    let
 | 
						|
   73|      1|        a
 | 
						|
   74|      1|    =
 | 
						|
   75|      1|        ||
 | 
						|
   76|      1|    {
 | 
						|
   77|      1|        let mut countdown = 0;
 | 
						|
   78|      1|        if is_false {
 | 
						|
   79|      0|            countdown = 10;
 | 
						|
   80|      1|        }
 | 
						|
   81|      1|        "alt string 4".to_owned()
 | 
						|
   82|      1|    };
 | 
						|
   83|      1|    println!(
 | 
						|
   84|      1|        "The string or alt: {}"
 | 
						|
   85|      1|        ,
 | 
						|
   86|      1|        some_string
 | 
						|
   87|      1|            .
 | 
						|
   88|      1|            unwrap_or_else
 | 
						|
   89|      1|        (
 | 
						|
   90|      1|            a
 | 
						|
   91|      1|        )
 | 
						|
   92|      1|    );
 | 
						|
   93|      1|
 | 
						|
   94|      1|    let
 | 
						|
   95|      1|        quote_closure
 | 
						|
   96|      1|    =
 | 
						|
   97|      1|        |val|
 | 
						|
   98|      5|    {
 | 
						|
   99|      5|        let mut countdown = 0;
 | 
						|
  100|      5|        if is_false {
 | 
						|
  101|      0|            countdown = 10;
 | 
						|
  102|      5|        }
 | 
						|
  103|      5|        format!("'{}'", val)
 | 
						|
  104|      5|    };
 | 
						|
  105|      1|    println!(
 | 
						|
  106|      1|        "Repeated, quoted string: {:?}"
 | 
						|
  107|      1|        ,
 | 
						|
  108|      1|        std::iter::repeat("repeat me")
 | 
						|
  109|      1|            .take(5)
 | 
						|
  110|      1|            .map
 | 
						|
  111|      1|        (
 | 
						|
  112|      1|            quote_closure
 | 
						|
  113|      1|        )
 | 
						|
  114|      1|            .collect::<Vec<_>>()
 | 
						|
  115|      1|    );
 | 
						|
  116|      1|
 | 
						|
  117|      1|    let
 | 
						|
  118|      1|        _unused_closure
 | 
						|
  119|       |    =
 | 
						|
  120|       |        |
 | 
						|
  121|       |            mut countdown
 | 
						|
  122|       |        |
 | 
						|
  123|      0|    {
 | 
						|
  124|      0|        if is_false {
 | 
						|
  125|      0|            countdown = 10;
 | 
						|
  126|      0|        }
 | 
						|
  127|      0|        "closure should be unused".to_owned()
 | 
						|
  128|      0|    };
 | 
						|
  129|       |
 | 
						|
  130|      1|    let mut countdown = 10;
 | 
						|
  131|      1|    let _short_unused_closure = | _unused_arg: u8 | countdown += 1;
 | 
						|
                                                                  ^0
 | 
						|
  132|       |
 | 
						|
  133|       |
 | 
						|
  134|      1|    let short_used_covered_closure_macro = | used_arg: u8 | println!("called");
 | 
						|
  135|      1|    let short_used_not_covered_closure_macro = | used_arg: u8 | println!("not called");
 | 
						|
                                                                              ^0
 | 
						|
  136|      1|    let _short_unused_closure_macro = | _unused_arg: u8 | println!("not called");
 | 
						|
                                                                        ^0
 | 
						|
  137|       |
 | 
						|
  138|       |
 | 
						|
  139|       |
 | 
						|
  140|       |
 | 
						|
  141|      1|    let _short_unused_closure_block = | _unused_arg: u8 | { println!("not called") };
 | 
						|
                                                                        ^0
 | 
						|
  142|       |
 | 
						|
  143|      1|    let _shortish_unused_closure = | _unused_arg: u8 | {
 | 
						|
  144|      0|        println!("not called")
 | 
						|
  145|      0|    };
 | 
						|
  146|       |
 | 
						|
  147|      1|    let _as_short_unused_closure = |
 | 
						|
  148|       |        _unused_arg: u8
 | 
						|
  149|      0|    | { println!("not called") };
 | 
						|
  150|       |
 | 
						|
  151|      1|    let _almost_as_short_unused_closure = |
 | 
						|
  152|       |        _unused_arg: u8
 | 
						|
  153|      0|    | { println!("not called") }
 | 
						|
  154|       |    ;
 | 
						|
  155|       |
 | 
						|
  156|       |
 | 
						|
  157|       |
 | 
						|
  158|       |
 | 
						|
  159|       |
 | 
						|
  160|      1|    let _short_unused_closure_line_break_no_block = | _unused_arg: u8 |
 | 
						|
  161|      0|println!("not called")
 | 
						|
  162|       |    ;
 | 
						|
  163|       |
 | 
						|
  164|      1|    let _short_unused_closure_line_break_no_block2 =
 | 
						|
  165|       |        | _unused_arg: u8 |
 | 
						|
  166|      0|            println!(
 | 
						|
  167|      0|                "not called"
 | 
						|
  168|      0|            )
 | 
						|
  169|       |    ;
 | 
						|
  170|       |
 | 
						|
  171|      1|    let short_used_not_covered_closure_line_break_no_block_embedded_branch =
 | 
						|
  172|       |        | _unused_arg: u8 |
 | 
						|
  173|      0|            println!(
 | 
						|
  174|      0|                "not called: {}",
 | 
						|
  175|      0|                if is_true { "check" } else { "me" }
 | 
						|
  176|      0|            )
 | 
						|
  177|       |    ;
 | 
						|
  178|       |
 | 
						|
  179|      1|    let short_used_not_covered_closure_line_break_block_embedded_branch =
 | 
						|
  180|      1|        | _unused_arg: u8 |
 | 
						|
  181|      0|        {
 | 
						|
  182|      0|            println!(
 | 
						|
  183|      0|                "not called: {}",
 | 
						|
  184|      0|                if is_true { "check" } else { "me" }
 | 
						|
  185|       |            )
 | 
						|
  186|      0|        }
 | 
						|
  187|       |    ;
 | 
						|
  188|       |
 | 
						|
  189|      1|    let short_used_covered_closure_line_break_no_block_embedded_branch =
 | 
						|
  190|      1|        | _unused_arg: u8 |
 | 
						|
  191|      1|            println!(
 | 
						|
  192|      1|                "not called: {}",
 | 
						|
  193|      1|                if is_true { "check" } else { "me" }
 | 
						|
                                                            ^0
 | 
						|
  194|      1|            )
 | 
						|
  195|       |    ;
 | 
						|
  196|       |
 | 
						|
  197|      1|    let short_used_covered_closure_line_break_block_embedded_branch =
 | 
						|
  198|      1|        | _unused_arg: u8 |
 | 
						|
  199|      1|        {
 | 
						|
  200|      1|            println!(
 | 
						|
  201|      1|                "not called: {}",
 | 
						|
  202|      1|                if is_true { "check" } else { "me" }
 | 
						|
                                                            ^0
 | 
						|
  203|       |            )
 | 
						|
  204|      1|        }
 | 
						|
  205|       |    ;
 | 
						|
  206|       |
 | 
						|
  207|      1|    if is_false {
 | 
						|
  208|      0|        short_used_not_covered_closure_macro(0);
 | 
						|
  209|      0|        short_used_not_covered_closure_line_break_no_block_embedded_branch(0);
 | 
						|
  210|      0|        short_used_not_covered_closure_line_break_block_embedded_branch(0);
 | 
						|
  211|      1|    }
 | 
						|
  212|      1|    short_used_covered_closure_macro(0);
 | 
						|
  213|      1|    short_used_covered_closure_line_break_no_block_embedded_branch(0);
 | 
						|
  214|      1|    short_used_covered_closure_line_break_block_embedded_branch(0);
 | 
						|
  215|      1|}
 | 
						|
 |