|  | 
| 6 | 6 |     6|       |    println!("called but not covered"); | 
| 7 | 7 |     7|       |} | 
| 8 | 8 |     8|       | | 
| 9 |  | -    9|       |#[no_coverage] | 
| 10 |  | -   10|       |fn do_not_add_coverage_2() { | 
|  | 9 | +    9|       |fn do_not_add_coverage_2() { | 
|  | 10 | +   10|       |    #![no_coverage] | 
| 11 | 11 |    11|       |    println!("called but not covered"); | 
| 12 | 12 |    12|       |} | 
| 13 | 13 |    13|       | | 
|  | 
| 28 | 28 |    28|      0|    println!("not called but covered"); | 
| 29 | 29 |    29|      0|} | 
| 30 | 30 |    30|       | | 
| 31 |  | -   31|      1|fn main() { | 
| 32 |  | -   32|      1|    do_not_add_coverage_1(); | 
| 33 |  | -   33|      1|    do_not_add_coverage_2(); | 
| 34 |  | -   34|      1|    add_coverage_1(); | 
| 35 |  | -   35|      1|    add_coverage_2(); | 
| 36 |  | -   36|      1|} | 
|  | 31 | +   31|       |// FIXME: These test-cases illustrate confusing results of nested functions. | 
|  | 32 | +   32|       |// See https://github.com/rust-lang/rust/issues/93319 | 
|  | 33 | +   33|       |mod nested_fns { | 
|  | 34 | +   34|       |    #[no_coverage] | 
|  | 35 | +   35|       |    pub fn outer_not_covered(is_true: bool) { | 
|  | 36 | +   36|      1|        fn inner(is_true: bool) { | 
|  | 37 | +   37|      1|            if is_true { | 
|  | 38 | +   38|      1|                println!("called and covered"); | 
|  | 39 | +   39|      1|            } else { | 
|  | 40 | +   40|      0|                println!("absolutely not covered"); | 
|  | 41 | +   41|      0|            } | 
|  | 42 | +   42|      1|        } | 
|  | 43 | +   43|       |        println!("called but not covered"); | 
|  | 44 | +   44|       |        inner(is_true); | 
|  | 45 | +   45|       |    } | 
|  | 46 | +   46|       | | 
|  | 47 | +   47|      1|    pub fn outer(is_true: bool) { | 
|  | 48 | +   48|      1|        println!("called and covered"); | 
|  | 49 | +   49|      1|        inner_not_covered(is_true); | 
|  | 50 | +   50|      1| | 
|  | 51 | +   51|      1|        #[no_coverage] | 
|  | 52 | +   52|      1|        fn inner_not_covered(is_true: bool) { | 
|  | 53 | +   53|      1|            if is_true { | 
|  | 54 | +   54|      1|                println!("called but not covered"); | 
|  | 55 | +   55|      1|            } else { | 
|  | 56 | +   56|      1|                println!("absolutely not covered"); | 
|  | 57 | +   57|      1|            } | 
|  | 58 | +   58|      1|        } | 
|  | 59 | +   59|      1|    } | 
|  | 60 | +   60|       | | 
|  | 61 | +   61|      1|    pub fn outer_both_covered(is_true: bool) { | 
|  | 62 | +   62|      1|        println!("called and covered"); | 
|  | 63 | +   63|      1|        inner(is_true); | 
|  | 64 | +   64|      1| | 
|  | 65 | +   65|      1|        fn inner(is_true: bool) { | 
|  | 66 | +   66|      1|            if is_true { | 
|  | 67 | +   67|      1|                println!("called and covered"); | 
|  | 68 | +   68|      1|            } else { | 
|  | 69 | +   69|      0|                println!("absolutely not covered"); | 
|  | 70 | +   70|      0|            } | 
|  | 71 | +   71|      1|        } | 
|  | 72 | +   72|      1|    } | 
|  | 73 | +   73|       |} | 
|  | 74 | +   74|       | | 
|  | 75 | +   75|      1|fn main() { | 
|  | 76 | +   76|      1|    let is_true = std::env::args().len() == 1; | 
|  | 77 | +   77|      1| | 
|  | 78 | +   78|      1|    do_not_add_coverage_1(); | 
|  | 79 | +   79|      1|    do_not_add_coverage_2(); | 
|  | 80 | +   80|      1|    add_coverage_1(); | 
|  | 81 | +   81|      1|    add_coverage_2(); | 
|  | 82 | +   82|      1| | 
|  | 83 | +   83|      1|    nested_fns::outer_not_covered(is_true); | 
|  | 84 | +   84|      1|    nested_fns::outer(is_true); | 
|  | 85 | +   85|      1|    nested_fns::outer_both_covered(is_true); | 
|  | 86 | +   86|      1|} | 
| 37 | 87 | 
 | 
0 commit comments