1+ // NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
2+ // CHANGES SHOULD BE REFLECTED THERE AS WELL.
3+ #include <stdbool.h>
4+
5+ int may_have_side_effects ();
6+ int no_side_effects (int x ) { return 1 + 2 ; }
7+ int no_side_effects_nondeterministic ();
8+
9+ int test_dead_code (int x ) {
10+ int live1 = may_have_side_effects (),
11+ live2 = may_have_side_effects (); // COMPLIANT
12+ int live3 = 0 ,
13+ live4 = may_have_side_effects (); // COMPLIANT
14+ int live5 = 0 , live6 = 0 ; // COMPLIANT
15+ live5 = 1 ; // COMPLIANT
16+ live6 = 2 ; // COMPLIANT
17+
18+ int dead1 = 0 , dead2 = 0 ; // NON_COMPLIANT
19+ dead1 = 1 ; // NON_COMPLIANT - useless assignment
20+ dead2 = 1 ; // NON_COMPLIANT - useless assignment
21+
22+ if (false) { // NON_COMPLIANT
23+ dead2 = 10 ; // Only used in dead or unreachable code
24+ }
25+
26+ if (true) { // COMPLIANT
27+ may_have_side_effects ();
28+ }
29+
30+ if (may_have_side_effects ()) { // COMPLIANT
31+ may_have_side_effects ();
32+ }
33+
34+ if (true) { // NON_COMPLIANT
35+ }
36+
37+ {} // NON_COMPLIANT
38+ { // NON_COMPLIANT
39+ 1 + 2 ;
40+ }
41+
42+ { // COMPLIANT
43+ may_have_side_effects ();
44+ }
45+
46+ do { // COMPLIANT
47+ may_have_side_effects ();
48+ } while (may_have_side_effects ());
49+
50+ do { // COMPLIANT
51+ may_have_side_effects ();
52+ } while (may_have_side_effects ());
53+
54+ do { // NON_COMPLIANT
55+ } while (no_side_effects_nondeterministic ());
56+
57+ while (may_have_side_effects ()) { // COMPLIANT
58+ may_have_side_effects ();
59+ }
60+
61+ while (may_have_side_effects ()) { // COMPLIANT
62+ may_have_side_effects ();
63+ }
64+
65+ while (no_side_effects_nondeterministic ()) { // NON_COMPLIANT
66+ }
67+
68+ may_have_side_effects (); // COMPLIANT
69+ 1 + 2 ; // NON_COMPLIANT
70+
71+ no_side_effects (x ); // NON_COMPLIANT
72+
73+ return live5 + live6 ; // COMPLIANT
74+ }
0 commit comments