@@ -9,13 +9,13 @@ use crate::test_util::{
9
9
assert_checkers_match, assert_equal, assert_outputs_match, location_insensitive_checker_for,
10
10
naive_checker_for, opt_checker_for,
11
11
} ;
12
- use polonius_engine:: Algorithm ;
12
+ use polonius_engine:: { Algorithm , Engine } ;
13
13
use rustc_hash:: FxHashMap ;
14
14
use std:: error:: Error ;
15
15
use std:: path:: Path ;
16
16
17
17
fn test_facts ( all_facts : & AllFacts , algorithms : & [ Algorithm ] ) {
18
- let naive = Output :: compute ( all_facts, Algorithm :: Naive , true ) ;
18
+ let naive = Output :: compute ( all_facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
19
19
20
20
// Check that the "naive errors" are a subset of the "insensitive
21
21
// ones".
@@ -111,7 +111,7 @@ macro_rules! tests {
111
111
112
112
#[ test]
113
113
fn datafrog_opt( ) -> Result <( ) , Box <dyn Error >> {
114
- test_fn( $dir, $fn, Algorithm :: DatafrogOpt )
114
+ test_fn( $dir, $fn, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) )
115
115
}
116
116
}
117
117
) *
@@ -168,7 +168,7 @@ fn test_sensitive_passes_issue_47680() -> Result<(), Box<dyn Error>> {
168
168
. join ( "main" ) ;
169
169
let tables = & mut intern:: InternerTables :: new ( ) ;
170
170
let all_facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) ?;
171
- let sensitive = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt , false ) ;
171
+ let sensitive = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , false ) ;
172
172
173
173
assert ! ( sensitive. errors. is_empty( ) ) ;
174
174
@@ -201,15 +201,15 @@ fn no_subset_symmetries_exist() -> Result<(), Box<dyn Error>> {
201
201
false
202
202
} ;
203
203
204
- let naive = Output :: compute ( & all_facts, Algorithm :: Naive , true ) ;
204
+ let naive = Output :: compute ( & all_facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
205
205
assert ! ( !subset_symmetries_exist( & naive) ) ;
206
206
207
207
// FIXME: the issue-47680 dataset is suboptimal here as DatafrogOpt does not
208
208
// produce subset symmetries for it. It does for clap, and it was used to manually verify
209
209
// that the assert in verbose mode didn't trigger. Therefore, switch to this dataset
210
210
// whenever it's fast enough to be enabled in tests, or somehow create a test facts program
211
211
// or reduce it from clap.
212
- let opt = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt , true ) ;
212
+ let opt = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
213
213
assert ! ( !subset_symmetries_exist( & opt) ) ;
214
214
Ok ( ( ) )
215
215
}
@@ -323,8 +323,8 @@ fn smoke_test_errors() {
323
323
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
324
324
325
325
let location_insensitive = Output :: compute ( & facts, Algorithm :: LocationInsensitive , true ) ;
326
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
327
- let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt , true ) ;
326
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
327
+ let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
328
328
329
329
// We have to find errors with every analysis
330
330
assert ! (
@@ -399,7 +399,8 @@ fn var_live_in_single_block() {
399
399
let mut tables = intern:: InternerTables :: new ( ) ;
400
400
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
401
401
402
- let liveness = Output :: compute ( & facts, Algorithm :: Naive , true ) . var_live_on_entry ;
402
+ let liveness =
403
+ Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) . var_live_on_entry ;
403
404
println ! ( "Registered liveness data: {:?}" , liveness) ;
404
405
for ( point, variables) in liveness. iter ( ) {
405
406
println ! ( "{:?} has live variables: {:?}" , point, variables) ;
@@ -433,7 +434,8 @@ fn var_live_in_successor_propagates_to_predecessor() {
433
434
let mut tables = intern:: InternerTables :: new ( ) ;
434
435
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
435
436
436
- let liveness = Output :: compute ( & facts, Algorithm :: Naive , true ) . var_live_on_entry ;
437
+ let liveness =
438
+ Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) . var_live_on_entry ;
437
439
println ! ( "Registered liveness data: {:?}" , liveness) ;
438
440
println ! ( "CFG: {:?}" , facts. cfg_edge) ;
439
441
for ( point, variables) in liveness. iter ( ) {
@@ -470,7 +472,7 @@ fn var_live_in_successor_killed_by_reassignment() {
470
472
let mut tables = intern:: InternerTables :: new ( ) ;
471
473
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
472
474
473
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
475
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
474
476
println ! ( "result: {:#?}" , result) ;
475
477
let liveness = result. var_live_on_entry ;
476
478
println ! ( "CFG: {:#?}" , facts. cfg_edge) ;
@@ -531,7 +533,7 @@ fn var_drop_used_simple() {
531
533
let mut tables = intern:: InternerTables :: new ( ) ;
532
534
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
533
535
534
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
536
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
535
537
println ! ( "result: {:#?}" , result) ;
536
538
let liveness = result. var_drop_live_on_entry ;
537
539
println ! ( "CFG: {:#?}" , facts. cfg_edge) ;
@@ -573,7 +575,7 @@ fn var_drop_used_simple() {
573
575
fn illegal_subset_error ( ) {
574
576
let program = r"
575
577
placeholders { 'a, 'b }
576
-
578
+
577
579
block B0 {
578
580
// creates a transitive `'b: 'a` subset
579
581
loan_issued_at('x, L0),
@@ -638,7 +640,7 @@ fn transitive_known_subset() {
638
640
let program = r"
639
641
placeholders { 'a, 'b, 'c }
640
642
known_subsets { 'a: 'b, 'b: 'c }
641
-
643
+
642
644
block B0 {
643
645
loan_issued_at('x, L0),
644
646
outlives('a: 'x),
@@ -670,7 +672,7 @@ fn transitive_illegal_subset_error() {
670
672
let program = r"
671
673
placeholders { 'a, 'b, 'c }
672
674
known_subsets { 'a: 'b }
673
-
675
+
674
676
block B0 {
675
677
// this transitive `'a: 'b` subset is already known
676
678
loan_issued_at('x, L0),
@@ -679,7 +681,7 @@ fn transitive_illegal_subset_error() {
679
681
680
682
// creates unknown transitive subsets:
681
683
// - `'b: 'c`
682
- // - and therefore `'a: 'c`
684
+ // - and therefore `'a: 'c`
683
685
loan_issued_at('y, L1),
684
686
outlives('b: 'y),
685
687
outlives('y: 'c);
@@ -721,15 +723,15 @@ fn successes_in_subset_relations_dataset() {
721
723
let tables = & mut intern:: InternerTables :: new ( ) ;
722
724
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
723
725
724
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
726
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
725
727
assert ! ( naive. errors. is_empty( ) ) ;
726
728
assert ! ( naive. subset_errors. is_empty( ) ) ;
727
729
728
730
let insensitive = Output :: compute ( & facts, Algorithm :: LocationInsensitive , true ) ;
729
731
assert ! ( insensitive. errors. is_empty( ) ) ;
730
732
assert ! ( insensitive. subset_errors. is_empty( ) ) ;
731
733
732
- let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt , true ) ;
734
+ let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
733
735
assert ! ( opt. errors. is_empty( ) ) ;
734
736
assert ! ( opt. subset_errors. is_empty( ) ) ;
735
737
}
@@ -746,7 +748,7 @@ fn errors_in_subset_relations_dataset() {
746
748
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
747
749
748
750
// this function has no illegal access errors, but one subset error, over 3 points
749
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
751
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
750
752
assert ! ( naive. errors. is_empty( ) ) ;
751
753
assert_eq ! ( naive. subset_errors. len( ) , 3 ) ;
752
754
@@ -782,7 +784,7 @@ fn errors_in_subset_relations_dataset() {
782
784
assert ! ( insensitive_subset_errors. contains( & expected_subset_error) ) ;
783
785
784
786
// And the optimized analysis results should be the same as the naive one's.
785
- let opt = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
787
+ let opt = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
786
788
assert_outputs_match ( & naive, & opt) ;
787
789
}
788
790
@@ -802,7 +804,7 @@ fn successes_in_move_errors_dataset() {
802
804
let tables = & mut intern:: InternerTables :: new ( ) ;
803
805
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
804
806
805
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
807
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
806
808
assert ! ( naive. errors. is_empty( ) ) ;
807
809
assert ! ( naive. subset_errors. is_empty( ) ) ;
808
810
assert ! ( naive. move_errors. is_empty( ) ) ;
@@ -812,7 +814,7 @@ fn successes_in_move_errors_dataset() {
812
814
assert ! ( insensitive. subset_errors. is_empty( ) ) ;
813
815
assert ! ( insensitive. move_errors. is_empty( ) ) ;
814
816
815
- let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt , true ) ;
817
+ let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
816
818
assert ! ( opt. errors. is_empty( ) ) ;
817
819
assert ! ( opt. subset_errors. is_empty( ) ) ;
818
820
assert ! ( opt. move_errors. is_empty( ) ) ;
@@ -829,7 +831,7 @@ fn basic_move_error() {
829
831
let tables = & mut intern:: InternerTables :: new ( ) ;
830
832
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
831
833
832
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
834
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
833
835
assert ! ( result. errors. is_empty( ) ) ;
834
836
assert ! ( result. subset_errors. is_empty( ) ) ;
835
837
@@ -853,7 +855,7 @@ fn conditional_init() {
853
855
let tables = & mut intern:: InternerTables :: new ( ) ;
854
856
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
855
857
856
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
858
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
857
859
assert ! ( result. errors. is_empty( ) ) ;
858
860
assert ! ( result. subset_errors. is_empty( ) ) ;
859
861
0 commit comments