@@ -734,3 +734,58 @@ void test_does_not_write_source_to_dereference()
734
734
does_not_write_source_to_dereference (&x);
735
735
sink (x); // $ ast,ir=733:7 SPURIOUS: ast,ir=726:11
736
736
}
737
+
738
+ void sometimes_calls_sink_eq (int x, int n) {
739
+ if (n == 0 ) {
740
+ sink (x); // $ ast,ir=751:27 ast,ir=755:32 SPURIOUS: ast,ir=749:27 ast,ir=753:32
741
+ }
742
+ }
743
+
744
+ void call_sometimes_calls_sink_eq (int x, int n) {
745
+ sometimes_calls_sink_eq (x, n);
746
+ }
747
+
748
+ void test_sometimes_calls_sink_eq_1 () {
749
+ sometimes_calls_sink_eq (source (), 1 );
750
+ sometimes_calls_sink_eq (0 , 0 );
751
+ sometimes_calls_sink_eq (source (), 0 );
752
+
753
+ call_sometimes_calls_sink_eq (source (), 1 );
754
+ call_sometimes_calls_sink_eq (0 , 0 );
755
+ call_sometimes_calls_sink_eq (source (), 0 );
756
+ }
757
+
758
+ void sometimes_calls_sink_lt (int x, int n) {
759
+ if (n < 10 ) {
760
+ sink (x); // $ ast,ir=771:27 ast,ir=775:32 SPURIOUS: ast,ir=769:27 ast,ir=773:32
761
+ }
762
+ }
763
+
764
+ void call_sometimes_calls_sink_lt (int x, int n) {
765
+ sometimes_calls_sink_lt (x, n);
766
+ }
767
+
768
+ void test_sometimes_calls_sink_lt () {
769
+ sometimes_calls_sink_lt (source (), 10 );
770
+ sometimes_calls_sink_lt (0 , 0 );
771
+ sometimes_calls_sink_lt (source (), 2 );
772
+
773
+ call_sometimes_calls_sink_lt (source (), 10 );
774
+ call_sometimes_calls_sink_lt (0 , 0 );
775
+ call_sometimes_calls_sink_lt (source (), 2 );
776
+
777
+ }
778
+
779
+ void sometimes_calls_sink_switch (int x, int n) {
780
+ switch (n) {
781
+ case 0 :
782
+ sink (x); // $ ast,ir=790:31 SPURIOUS: ast,ir=788:31
783
+ break ;
784
+ }
785
+ }
786
+
787
+ void test_sometimes_calls_sink_switch () {
788
+ sometimes_calls_sink_switch (source (), 1 );
789
+ sometimes_calls_sink_switch (0 , 0 );
790
+ sometimes_calls_sink_switch (source (), 0 );
791
+ }
0 commit comments