rust/src/test/mir-opt
Niko Matsakis 46b342fbc0 simplify the MirPass traits and passes dramatically
Overall goal: reduce the amount of context a mir pass needs so that it
resembles a query.

- The hooks are no longer "threaded down" to the pass, but rather run
  automatically from the top-level (we also thread down the current pass
  number, so that the files are sorted better).
  - The hook now receives a *single* callback, rather than a callback per-MIR.
- The traits are no longer lifetime parameters, which moved to the
  methods -- given that we required
  `for<'tcx>` objecs, there wasn't much point to that.
- Several passes now store a `String` instead of a `&'l str` (again, no
  point).
2017-05-02 14:01:01 -04:00
..
basic_assignment.rs simplify the MirPass traits and passes dramatically 2017-05-02 14:01:01 -04:00
copy_propagation.rs mir: Allow copy-propagation of function arguments 2016-12-11 22:12:41 +01:00
deaggregator_test.rs update tests 2016-10-04 20:43:43 +03:00
deaggregator_test_enum.rs update tests 2016-10-04 20:43:43 +03:00
deaggregator_test_enum_2.rs mir: Reinstate while loop in deaggregator pass 2016-12-09 18:16:38 +01:00
deaggregator_test_multiple.rs mir: Reinstate while loop in deaggregator pass 2016-12-09 18:16:38 +01:00
issue-38669.rs simplify the MirPass traits and passes dramatically 2017-05-02 14:01:01 -04:00
issue-41110.rs borrowck::mir::dataflow: ignore unwind edges of empty drops 2017-04-08 22:46:50 +03:00
README.md add mir optimization tests, dump-mir-dir option 2016-07-20 19:41:39 -07:00
return_an_array.rs add mir optimization tests, dump-mir-dir option 2016-07-20 19:41:39 -07:00
simplify_if.rs simplify the MirPass traits and passes dramatically 2017-05-02 14:01:01 -04:00
storage_ranges.rs make operands live to the end of their containing expression 2017-03-03 13:54:18 +02:00

This folder contains tests for MIR optimizations.

The test format is:

(arbitrary rust code)
// END RUST SOURCE
// START $file_name_of_some_mir_dump_0
//  $expected_line_0
// ...
// $expected_line_N
// END $file_name_of_some_mir_dump_0
// ...
// START $file_name_of_some_mir_dump_N
//  $expected_line_0
// ...
// $expected_line_N
// END $file_name_of_some_mir_dump_N

All the test information is in comments so the test is runnable.

For each $file_name, compiletest expects [$expected_line_0, ..., $expected_line_N] to appear in the dumped MIR in order. Currently it allows other non-matched lines before, after and in-between.

Lines match ignoring whitespace, and the prefix "//" is removed.

It also currently strips trailing comments -- partly because the full file path in "scope comments" is unpredictable and partly because tidy complains about the lines being too long.

compiletest handles dumping the MIR before and after every pass for you. The test writer only has to specify the file names of the dumped files (not the full path to the file) and what lines to expect. I added an option to rustc that tells it to dump the mir into some directly (rather then always dumping to the current directory).

Lines match ignoring whitespace, and the prefix "//" is removed of course.

It also currently strips trailing comments -- partly because the full file path in "scope comments" is unpredictable and partly because tidy complains about the lines being too long.