1| |#![allow(unused_assignments, unused_variables, while_true)] | |
2| | | |
3| |// This test confirms that (1) unexecuted infinite loops are handled correctly by the | |
4| |// InstrumentCoverage MIR pass; and (2) Counter Expressions that subtract from zero can be dropped. | |
5| | | |
6| |struct DebugTest; | |
7| | | |
8| |impl std::fmt::Debug for DebugTest { | |
9| 1| fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { | |
10| 1| if true { | |
11| 1| if false { | |
12| 0| while true { | |
13| 0| } | |
14| 1| } | |
15| 1| write!(f, "cool")?; | |
^0 | |
16| 0| } else { | |
17| 0| } | |
18| | | |
19| 10| for i in 0..10 { | |
20| 10| if true { | |
21| 10| if false { | |
22| 0| while true {} | |
23| 10| } | |
24| 10| write!(f, "cool")?; | |
^0 | |
25| 0| } else { | |
26| 0| } | |
27| | } | |
28| 1| Ok(()) | |
29| 1| } | |
30| |} | |
31| | | |
32| |struct DisplayTest; | |
33| | | |
34| |impl std::fmt::Display for DisplayTest { | |
35| 1| fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { | |
36| 1| if false { | |
37| 0| } else { | |
38| 1| if false { | |
39| 0| while true {} | |
40| 1| } | |
41| 1| write!(f, "cool")?; | |
^0 | |
42| | } | |
43| 10| for i in 0..10 { | |
44| 10| if false { | |
45| 0| } else { | |
46| 10| if false { | |
47| 0| while true {} | |
48| 10| } | |
49| 10| write!(f, "cool")?; | |
^0 | |
50| | } | |
51| | } | |
52| 1| Ok(()) | |
53| 1| } | |
54| |} | |
55| | | |
56| 1|fn main() { | |
57| 1| let debug_test = DebugTest; | |
58| 1| println!("{:?}", debug_test); | |
59| 1| let display_test = DisplayTest; | |
60| 1| println!("{}", display_test); | |
61| 1|} | |