Coder Social home page Coder Social logo

cargo-minimize's Introduction

cargo-minimize

Install with cargo install --git https://github.com/Nilstrieb/cargo-minimize cargo-minimize and use with cargo minimize.

For more info, see the cookbook.

Idea

When encountering problems like internal compiler errors, it's often desirable to have a minimal reproduction that can be used by the people fixing the issue. Usually, these problems are found in big codebases. Getting from a big codebase to a small (<50 LOC) reproduction is non-trivial and requires a lot of manual work. cargo-minimize assists you with doing some minimization steps that can be easily automated for you.

How to use

For minimizing an internal compiler error on a normal cargo project, cargo minimize works out of the box. There are many configuration options available though.

Usage: cargo minimize [OPTIONS] [PATH]

Arguments:
  [PATH]  The directory/file of the code to be minimized [default: src]

Options:
      --extra-args <EXTRA_ARGS>
          Additional arguments to pass to cargo/rustc, separated by whitespace
      --cargo-subcmd <CARGO_SUBCMD>
          The cargo subcommand used to find the reproduction, seperated by whitespace (for example `miri run`) [default: build]
      --cargo-subcmd-lints <CARGO_SUBCMD_LINTS>
          The cargo subcommand used to get diagnostics like the dead_code lint from the compiler, seperated by whitespace. Defaults to the value of `--cargo-subcmd`
      --no-color
          To disable colored output
      --rustc
          This option bypasses cargo and uses rustc directly. Only works when a single file is passed as an argument
      --no-verify
          Skips testing whether the regression reproduces and just does the most aggressive minimization. Mostly useful for testing and demonstration purposes
      --verify-fn <VERIFY_FN>
          A Rust closure returning a bool that checks whether a regression reproduces. Example: `--verify-fn='|output| output.contains("internal compiler error")'`
      --env <ENV>
          Additional environment variables to pass to cargo/rustc. Example: `--env NAME=VALUE --env ANOTHER_NAME=VALUE`
      --project-dir <PROJECT_DIR>
          The working directory where cargo/rustc are invoked in. By default, this is the current working directory
      --script-path <SCRIPT_PATH>
          A path to a script that is run to check whether code reproduces. When it exits with code 0, the problem reproduces. If `--script-path-lints` isn't set, this script is also run to get lints. For lints, the `MINIMIZE_LINTS` environment variable will be set to `1`. The first line of the lint stdout or stderr can be `minimize-fmt-rustc` or `minimize-fmt-cargo` to show whether the rustc or wrapper cargo lint format and which output stream is used. Defaults to cargo and stdout
      --script-path-lints <SCRIPT_PATH_LINTS>
          A path to a script that is run to get lints. The first line of stdout or stderr must be `minimize-fmt-rustc` or `minimize-fmt-cargo` to show whether the rustc or wrapper cargo lint format and which output stream is used. Defaults to cargo and stdout
  -h, --help
          Print help information

Note: You can safely press Ctrl-C when running cargo-minimize. It will rollback the current minimization attempt and give you the latest known-reproducing state.

What it does

cargo-minimize is currently fairly simple. It does several passes over the source code. It treats each file in isolation. First, it applies the pass to everything in the file. If that stops the reproduction, it goes down the tree, eventually trying each candidate in isolation. It then repeats the pass until no more changes are made by it.

The currently implemented passes are the following:

  • pub is replaced by pub(crate). This does not have a real minimization effect on its own.
  • Bodies are replaced by loop {}. This greatly cuts down on the amount of things and makes many functions unused
  • Unused imports are removed
  • Unused functions are removed (this relies on the first step, as pub items are not marked as dead_code by rustc)

Possible improvements:

  • Delete more kinds of unused items
  • Inline small modules
  • Deal with dependencies (there is experimental code in the repo that inlines them)
  • Somehow deal with traits
  • Integrate more fine-grained minimization tools such as DustMite or perses

Cookbook

Normal project with ICE on cargo build

cargo minimize

An environment variable is required

cargo minimize --env RUSTFLAGS=-Zpolymorphize

Operate on a single file

cargo minimize --rustc file.rs

Other cargo subcommand

cargo minimize --cargo-subcmd clippy --extra-args "-- -Dclippy::needless_mut"

Use a full script

script.sh

#!/usr/bin/env bash

# output minimize-fmt-cargo to stdout to indicate that cargo lints will be output to stdout
# this is the default
echo "minimize-fmt-cargo"

# The script needs to emit the output here for lints
cargo build --release
if [ $? = 128 ];
then
    echo "The ICE reproduces"
    exit 0
else
    echo "No reproduction"
    exit 1
fi

cargo minimize --script-path ./script.sh

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

cargo-minimize's People

Contributors

albertlarsan68 avatar fee1-dead avatar nilstrieb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cargo-minimize's Issues

install cmd from readme is weird

readme says cargo install --git https://github.com/Nilstrieb/cargo-minimize but when I run that I get an error

error: multiple packages with binaries found: cargo-minimize, hello-world. When installing a git repository, cargo will always search the entire repo for any Cargo.toml. Please specify which to install.

cargo install --git https://github.com/Nilstrieb/cargo-minimize -- --package cargo-minimize kind of worked, I guess

Autocommit

During minimization, it's important to commit working reproductions so that failing reproductions can be restored. Right now the user has to do that manually, but nothing is stopping cargo-minimize from doing that itself when it sees a working reproduction once in a while (for example after each pass has been completed).

`--cargo-args miri` does not work

cargo minimize --cargo-args "miri run" --verify-fn='|output| output.contains("dest.layout.ty.is_integral()")'

 INFO cargo_minimize::processor Collecting file: src/main.rs
 INFO cargo_minimize::processor Initial build: no
ERROR cargo_minimize An error occured:
Initial build must reproduce issue. Output:
error: Found argument 'miri' which wasn't expected, or isn't valid in this context

wishlist: ability to point at specific rust/cargo builds with arbitrary command line flags

I'm super excited to see work in this space. If nothing else, it looks like it brings back my beloved "everybody_loops" minimization step. :)

I tried using it today to cut down on 25 kloc source file, but unfortunately the ICE in question is connected to a locally built rustc, along with a slew of environment variables.

(In particular, the problem originates from the rust bootstrapping process, so the command line invocation looks like this:

RUSTC_BOOTSTRAP=1 \
RUSTC_FORCE_UNSTABLE=1  \
RUSTC_BREAK_ON_ICE=1 \
RUSTC_LIBDIR="/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1/lib" \
RUSTC_REAL="/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" \
RUSTC_SNAPSHOT="/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" \
RUSTC_SNAPSHOT_LIBDIR="/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1/lib" \
RUSTC_STAGE="1" RUSTC_SYSROOT="/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1" \
/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/bootstrap/debug/rustc \
  /tmp/syn-1.0.102/src/lib.rs \
  --crate-name syn --edition=2018 \
  --crate-type lib \
  --cfg 'feature="full"' --cfg 'feature="parsing"' --cfg 'feature="printing"'  \
  -L dependency=/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1-rustc/release/deps \
  --extern proc_macro2=/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1-rustc/release/deps/libproc_macro2-c375fd22c2a75927.rmeta \
  --extern quote=/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1-rustc/release/deps/libquote-da84683634313048.rmeta \
  --extern unicode_ident=/media/pnkfelix/Rust/rust.git/objdir-dbgopt/build/x86_64-unknown-linux-gnu/stage1-rustc/release/deps/libunicode_ident-5a2e42a7c2d6a19e.rmeta \
  --cap-lints allow -Z binary-dep-depinfo --cfg syn_disable_nightly_tests

(Note that the above has essentially four parts: 1. environment variables, 2. the "rustc" path (which in this case is the bootstrap rustc that dispatches to another rustc it grabs from the env vars), 3. the input file (/tmp/syn-1.0.102/src/lib.rs), and 4. all the other command line flags.)

It would be really slick if this tool could just input something like a shell-script invocation of the above and turn it into whatever it needs for its own purposes.

So far, my attempts to emulate this by using the existing --env, --extra-args, and --rustc flags (and overriding PATH in the hopes that would work to point at a different rustc build) have not worked out.

No change while bisecting, current was empty somehow

  213349ms  INFO cargo_minimize::processor src/query/mod.rs: After privatize: no
  215275ms  INFO cargo_minimize::processor src/query/mod.rs: After privatize: no
  217217ms  INFO cargo_minimize::processor src/query/mod.rs: After privatize: no
  222527ms  INFO cargo_minimize::processor src/query/mod.rs: After privatize: yes
  222527ms  INFO cargo_minimize::processor src/query/mod.rs: After privatize: no changes
thread 'main' panicked at 'internal error: entered unreachable code: No change while bisecting, current was empty somehow: {AstPath([])}', src/processor/checker.rs:173:17

while running the privatize pass on [email protected]

thread 'main' panicked at 'processing with invalid state', src/processor/reaper.rs:132:9

I crashed the crash finder ๐ŸŽ‰ ๐Ÿ˜†

cargo minimize @ a7881a4

I was working on rust-lang/rust#110682

git clone https://github.com/ferrilab/bitvec/
cd bitvec
git checkout 20e2d68
cargo minimize --cargo-subcmd "build --release"

and cargo-minimize crashed ๐Ÿ˜…

 ...
  5136ms  INFO cargo_minimize::processor src/mem.rs: After field-deleter: no changes
  5136ms  INFO cargo_minimize::processor src/macros.rs: After field-deleter: no changes
  5137ms  INFO cargo_minimize::processor src/lib.rs: After field-deleter: no changes
  5528ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  5920ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  6291ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  6935ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  7320ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  7720ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  8362ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  8742ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  9121ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  9512ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  9890ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  10546ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  10929ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  11313ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  11693ms  INFO cargo_minimize::processor src/index.rs: After field-deleter: no
  11695ms  INFO cargo_minimize::processor src/field.rs: After field-deleter: no changes
  11695ms  INFO cargo_minimize::processor src/domain.rs: After field-deleter: no changes
  11696ms  INFO cargo_minimize::processor src/devel.rs: After field-deleter: no changes
  12136ms  INFO cargo_minimize::processor src/boxed.rs: After field-deleter: no
  12583ms  INFO cargo_minimize::processor src/boxed.rs: After field-deleter: no
  13005ms  INFO cargo_minimize::processor src/array.rs: After field-deleter: no
  13384ms  INFO cargo_minimize::processor src/array.rs: After field-deleter: no
  13767ms  INFO cargo_minimize::processor src/array.rs: After field-deleter: no
  13767ms  INFO cargo_minimize::processor src/access.rs: After field-deleter: no changes
  13768ms  INFO cargo_minimize::processor src/vec/traits.rs: After field-deleter: no changes
  13769ms  INFO cargo_minimize::processor src/vec/tests.rs: After field-deleter: no changes
  13769ms  INFO cargo_minimize::processor src/vec/ops.rs: After field-deleter: no changes
  14144ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  14523ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  14907ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  15295ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  15677ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  16057ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  16440ms  INFO cargo_minimize::processor src/vec/iter.rs: After field-deleter: no
  16442ms  INFO cargo_minimize::processor src/vec/api.rs: After field-deleter: no changes
  16443ms  INFO cargo_minimize::processor src/slice/traits.rs: After field-deleter: no changes
  16443ms  INFO cargo_minimize::processor src/slice/tests.rs: After field-deleter: no changes
  16816ms  INFO cargo_minimize::processor src/slice/proxy.rs: After field-deleter: no
  17197ms  INFO cargo_minimize::processor src/slice/proxy.rs: After field-deleter: no
  17197ms  INFO cargo_minimize::processor src/slice/ops.rs: After field-deleter: no changes
  17597ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  17980ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  18364ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  18749ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  19140ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  19784ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  20160ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  20571ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  21244ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  21645ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  22038ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  22422ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  23075ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  23463ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  23856ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  24519ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  25164ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  25818ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  26449ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  27121ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  27511ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  28154ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  28537ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  28923ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  29581ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  29968ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  30362ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  31011ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  31652ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  32290ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  32937ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  33580ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  33982ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  34366ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  34749ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  35411ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  35813ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  36200ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  36585ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  37231ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  37636ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  38018ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  38664ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  39046ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  39453ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  39842ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  40508ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  40890ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  41280ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  41690ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  42081ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  42477ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  42916ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  43308ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  43962ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  44351ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  44751ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  45381ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  45800ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  46190ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  46581ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  46964ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  47347ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  48012ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  48397ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  48793ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  49171ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  49562ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  50256ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  50666ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  51049ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  51687ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  52071ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  52462ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  52850ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  53252ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  53660ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  54303ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  54694ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  55090ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  55467ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  55864ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  56508ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  56888ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  57283ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  57666ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  58043ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  58704ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  59342ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  59990ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  60373ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  60757ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  61137ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  61784ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  62162ms  INFO cargo_minimize::processor src/slice/iter.rs: After field-deleter: no
  62167ms  INFO cargo_minimize::processor src/slice/api.rs: After field-deleter: no changes
  62168ms  INFO cargo_minimize::processor src/macros/internal.rs: After field-deleter: no changes
  62168ms  INFO cargo_minimize::processor src/field/tests.rs: After field-deleter: no changes
  62168ms  INFO cargo_minimize::processor src/field/permutation_tests.rs: After field-deleter: no changes
  62168ms  INFO cargo_minimize::processor src/field/io.rs: After field-deleter: no changes
  62169ms  INFO cargo_minimize::processor src/boxed/traits.rs: After field-deleter: no changes
  62169ms  INFO cargo_minimize::processor src/boxed/tests.rs: After field-deleter: no changes
  62170ms  INFO cargo_minimize::processor src/boxed/ops.rs: After field-deleter: no changes
  62170ms  INFO cargo_minimize::processor src/boxed/api.rs: After field-deleter: no changes
  62171ms  INFO cargo_minimize::processor src/array/traits.rs: After field-deleter: no changes
  62171ms  INFO cargo_minimize::processor src/array/ops.rs: After field-deleter: no changes
  62171ms  INFO cargo_minimize::processor Finished field-deleter

cargo_minimize::processor::Starting round of pass{name="privatize"}
  151ms  INFO cargo_minimize::processor src/view.rs: After privatize: no
  304ms  INFO cargo_minimize::processor src/view.rs: After privatize: no
  464ms  INFO cargo_minimize::processor src/view.rs: After privatize: no
  1382ms  INFO cargo_minimize::processor src/view.rs: After privatize: yes
  2292ms  INFO cargo_minimize::processor src/view.rs: After privatize: yes
  2446ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  2605ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  3516ms  INFO cargo_minimize::processor src/vec.rs: After privatize: yes
  3669ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  4571ms  INFO cargo_minimize::processor src/vec.rs: After privatize: yes
  4724ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  5631ms  INFO cargo_minimize::processor src/vec.rs: After privatize: yes
  5787ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  6691ms  INFO cargo_minimize::processor src/vec.rs: After privatize: yes
  6845ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  7757ms  INFO cargo_minimize::processor src/vec.rs: After privatize: yes
  7910ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  8059ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  8935ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  9087ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  9245ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  10150ms  INFO cargo_minimize::processor src/slice.rs: After privatize: yes
  10304ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  11255ms  INFO cargo_minimize::processor src/slice.rs: After privatize: yes
  11413ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  12333ms  INFO cargo_minimize::processor src/slice.rs: After privatize: yes
  12509ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  13432ms  INFO cargo_minimize::processor src/slice.rs: After privatize: yes
  13584ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  14495ms  INFO cargo_minimize::processor src/slice.rs: After privatize: yes
  14651ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  15545ms  INFO cargo_minimize::processor src/slice.rs: After privatize: yes
  15546ms  INFO cargo_minimize::processor src/serdes.rs: After privatize: no changes
  16461ms  INFO cargo_minimize::processor src/prelude.rs: After privatize: yes
  17375ms  INFO cargo_minimize::processor src/pointer.rs: After privatize: no
  18424ms  INFO cargo_minimize::processor src/pointer.rs: After privatize: yes
  19316ms  INFO cargo_minimize::processor src/pointer.rs: After privatize: no
  20225ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  21273ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  22265ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  23226ms  INFO cargo_minimize::processor src/order.rs: After privatize: yes
  24120ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  25036ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  26090ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  27041ms  INFO cargo_minimize::processor src/order.rs: After privatize: yes
  28024ms  INFO cargo_minimize::processor src/order.rs: After privatize: yes
  28897ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  29814ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  30746ms  INFO cargo_minimize::processor src/mem.rs: After privatize: yes
  31793ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  32799ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  33823ms  INFO cargo_minimize::processor src/macros.rs: After privatize: yes
  34823ms  INFO cargo_minimize::processor src/lib.rs: After privatize: yes
  35782ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  36694ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  37679ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  38592ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  39462ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  40442ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  41301ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  42207ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  43058ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  44018ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  44892ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  45813ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  46675ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  47580ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  48473ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  49338ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  50273ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  51179ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  52221ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  53143ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  54060ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  54939ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  55818ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  56679ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  57599ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  58464ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  59396ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  60264ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  61151ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  62080ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  62943ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  63899ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  64763ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  65693ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  66542ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  67477ms  INFO cargo_minimize::processor src/index.rs: After privatize: yes
  68333ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  69258ms  INFO cargo_minimize::processor src/field.rs: After privatize: yes
  69259ms  INFO cargo_minimize::processor src/domain.rs: After privatize: no changes
  70183ms  INFO cargo_minimize::processor src/devel.rs: After privatize: yes
  71102ms  INFO cargo_minimize::processor src/boxed.rs: After privatize: yes
  72022ms  INFO cargo_minimize::processor src/array.rs: After privatize: yes
  72890ms  INFO cargo_minimize::processor src/access.rs: After privatize: no
  73783ms  INFO cargo_minimize::processor src/access.rs: After privatize: no
  73784ms  INFO cargo_minimize::processor src/vec/traits.rs: After privatize: no changes
  73785ms  INFO cargo_minimize::processor src/vec/tests.rs: After privatize: no changes
  73785ms  INFO cargo_minimize::processor src/vec/ops.rs: After privatize: no changes
  74648ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  75515ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  76421ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: yes
  77277ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  78192ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: yes
  79064ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  79932ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  80788ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  81650ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  82586ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: yes
  83544ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  84488ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: yes
  85367ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  86283ms  INFO cargo_minimize::processor src/vec/api.rs: After privatize: yes
  86285ms  INFO cargo_minimize::processor src/slice/traits.rs: After privatize: no changes
  86285ms  INFO cargo_minimize::processor src/slice/tests.rs: After privatize: no changes
  87141ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: no
  88024ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: no
  88926ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: yes
  88926ms  INFO cargo_minimize::processor src/slice/ops.rs: After privatize: no changes
  89810ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  90678ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  91556ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  92419ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  93274ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  94178ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  95050ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  95973ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  96834ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  97695ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  98621ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  99502ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  100443ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  101334ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  102204ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  103054ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  103948ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  104836ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  105747ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  106649ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  107513ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  108392ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  109300ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  110212ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  111076ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  111946ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  112822ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  113726ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  114588ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  115459ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  116311ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  117173ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  118050ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  118917ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  119788ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  120677ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  121577ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  122443ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  123308ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  124187ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  125083ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  125940ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  126828ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  127696ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  128579ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  129441ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  130360ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  131222ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  132089ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  133007ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  133876ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  134745ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  135659ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: yes
  136524ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  137405ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  138275ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  139205ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: yes
  140160ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  141080ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  142009ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: yes
  142905ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  143828ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: yes
  144766ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: yes
  145734ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: yes
  146716ms  INFO cargo_minimize::processor src/macros/internal.rs: After privatize: yes
  146716ms  INFO cargo_minimize::processor src/field/tests.rs: After privatize: no changes
  146716ms  INFO cargo_minimize::processor src/field/permutation_tests.rs: After privatize: no changes
  146717ms  INFO cargo_minimize::processor src/field/io.rs: After privatize: no changes
  146718ms  INFO cargo_minimize::processor src/boxed/traits.rs: After privatize: no changes
  146718ms  INFO cargo_minimize::processor src/boxed/tests.rs: After privatize: no changes
  146718ms  INFO cargo_minimize::processor src/boxed/ops.rs: After privatize: no changes
  147765ms  INFO cargo_minimize::processor src/boxed/api.rs: After privatize: yes
  148716ms  INFO cargo_minimize::processor src/array/traits.rs: After privatize: yes
  148717ms  INFO cargo_minimize::processor src/array/ops.rs: After privatize: no changes

cargo_minimize::processor::Starting round of pass{name="privatize"}
  1054ms  INFO cargo_minimize::processor src/view.rs: After privatize: yes
  1913ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  2805ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  3680ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  4652ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  5507ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  6408ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  7276ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  7278ms  INFO cargo_minimize::processor src/serdes.rs: After privatize: no changes
  7278ms  INFO cargo_minimize::processor src/prelude.rs: After privatize: no changes
  8258ms  INFO cargo_minimize::processor src/pointer.rs: After privatize: yes
  9205ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  10099ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  10962ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  11862ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  12737ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  13599ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  13600ms  INFO cargo_minimize::processor src/macros.rs: After privatize: no changes
  13600ms  INFO cargo_minimize::processor src/lib.rs: After privatize: no changes
  14461ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  15349ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  16290ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  17197ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  18097ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  19001ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  19887ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  20737ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  21621ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  22535ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  23450ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  23452ms  INFO cargo_minimize::processor src/field.rs: After privatize: no changes
  23453ms  INFO cargo_minimize::processor src/domain.rs: After privatize: no changes
  23453ms  INFO cargo_minimize::processor src/devel.rs: After privatize: no changes
  23454ms  INFO cargo_minimize::processor src/boxed.rs: After privatize: no changes
  23454ms  INFO cargo_minimize::processor src/array.rs: After privatize: no changes
  24345ms  INFO cargo_minimize::processor src/access.rs: After privatize: no
  25239ms  INFO cargo_minimize::processor src/access.rs: After privatize: no
  25240ms  INFO cargo_minimize::processor src/vec/traits.rs: After privatize: no changes
  25240ms  INFO cargo_minimize::processor src/vec/tests.rs: After privatize: no changes
  25240ms  INFO cargo_minimize::processor src/vec/ops.rs: After privatize: no changes
  26102ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  27049ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  27956ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  28933ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: yes
  29865ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: yes
  29867ms  INFO cargo_minimize::processor src/vec/api.rs: After privatize: no changes
  29868ms  INFO cargo_minimize::processor src/slice/traits.rs: After privatize: no changes
  29868ms  INFO cargo_minimize::processor src/slice/tests.rs: After privatize: no changes
  30728ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: no
  31584ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: no
  31585ms  INFO cargo_minimize::processor src/slice/ops.rs: After privatize: no changes
  32448ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  33360ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  34258ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  35264ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  36174ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  37201ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  38144ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  39155ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  40263ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  41253ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  42131ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  43000ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  43941ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  44892ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  45849ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: yes
  46883ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  47806ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  47807ms  INFO cargo_minimize::processor src/macros/internal.rs: After privatize: no changes
  47807ms  INFO cargo_minimize::processor src/field/tests.rs: After privatize: no changes
  47807ms  INFO cargo_minimize::processor src/field/permutation_tests.rs: After privatize: no changes
  47807ms  INFO cargo_minimize::processor src/field/io.rs: After privatize: no changes
  47808ms  INFO cargo_minimize::processor src/boxed/traits.rs: After privatize: no changes
  47808ms  INFO cargo_minimize::processor src/boxed/tests.rs: After privatize: no changes
  47809ms  INFO cargo_minimize::processor src/boxed/ops.rs: After privatize: no changes
  47809ms  INFO cargo_minimize::processor src/boxed/api.rs: After privatize: no changes
  47810ms  INFO cargo_minimize::processor src/array/traits.rs: After privatize: no changes
  47811ms  INFO cargo_minimize::processor src/array/ops.rs: After privatize: no changes

cargo_minimize::processor::Starting round of pass{name="privatize"}
  0ms  INFO cargo_minimize::processor src/view.rs: After privatize: no changes
  995ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  1886ms  INFO cargo_minimize::processor src/vec.rs: After privatize: no
  2751ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  3661ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  4541ms  INFO cargo_minimize::processor src/store.rs: After privatize: no
  5457ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  6404ms  INFO cargo_minimize::processor src/slice.rs: After privatize: no
  6406ms  INFO cargo_minimize::processor src/serdes.rs: After privatize: no changes
  6406ms  INFO cargo_minimize::processor src/prelude.rs: After privatize: no changes
  6409ms  INFO cargo_minimize::processor src/pointer.rs: After privatize: no changes
  7350ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  8392ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  9289ms  INFO cargo_minimize::processor src/order.rs: After privatize: no
  10273ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  11236ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  12154ms  INFO cargo_minimize::processor src/mem.rs: After privatize: no
  12155ms  INFO cargo_minimize::processor src/macros.rs: After privatize: no changes
  12155ms  INFO cargo_minimize::processor src/lib.rs: After privatize: no changes
  13029ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  13903ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  14774ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  15645ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  16512ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  17403ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  18269ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  19122ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  20028ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  20885ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  21757ms  INFO cargo_minimize::processor src/index.rs: After privatize: no
  21758ms  INFO cargo_minimize::processor src/field.rs: After privatize: no changes
  21759ms  INFO cargo_minimize::processor src/domain.rs: After privatize: no changes
  21760ms  INFO cargo_minimize::processor src/devel.rs: After privatize: no changes
  21761ms  INFO cargo_minimize::processor src/boxed.rs: After privatize: no changes
  21761ms  INFO cargo_minimize::processor src/array.rs: After privatize: no changes
  22690ms  INFO cargo_minimize::processor src/access.rs: After privatize: no
  23643ms  INFO cargo_minimize::processor src/access.rs: After privatize: no
  23645ms  INFO cargo_minimize::processor src/vec/traits.rs: After privatize: no changes
  23645ms  INFO cargo_minimize::processor src/vec/tests.rs: After privatize: no changes
  23645ms  INFO cargo_minimize::processor src/vec/ops.rs: After privatize: no changes
  24561ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  25445ms  INFO cargo_minimize::processor src/vec/iter.rs: After privatize: no
  25447ms  INFO cargo_minimize::processor src/vec/api.rs: After privatize: no changes
  25448ms  INFO cargo_minimize::processor src/slice/traits.rs: After privatize: no changes
  25449ms  INFO cargo_minimize::processor src/slice/tests.rs: After privatize: no changes
  26315ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: no
  27181ms  INFO cargo_minimize::processor src/slice/proxy.rs: After privatize: no
  27182ms  INFO cargo_minimize::processor src/slice/ops.rs: After privatize: no changes
  28059ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  28949ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  29819ms  INFO cargo_minimize::processor src/slice/iter.rs: After privatize: no
  30667ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  31525ms  INFO cargo_minimize::processor src/slice/api.rs: After privatize: no
  31527ms  INFO cargo_minimize::processor src/macros/internal.rs: After privatize: no changes
  31527ms  INFO cargo_minimize::processor src/field/tests.rs: After privatize: no changes
  31527ms  INFO cargo_minimize::processor src/field/permutation_tests.rs: After privatize: no changes
  31527ms  INFO cargo_minimize::processor src/field/io.rs: After privatize: no changes
  31528ms  INFO cargo_minimize::processor src/boxed/traits.rs: After privatize: no changes
  31528ms  INFO cargo_minimize::processor src/boxed/tests.rs: After privatize: no changes
  31529ms  INFO cargo_minimize::processor src/boxed/ops.rs: After privatize: no changes
  31529ms  INFO cargo_minimize::processor src/boxed/api.rs: After privatize: no changes
  31530ms  INFO cargo_minimize::processor src/array/traits.rs: After privatize: no changes
  31530ms  INFO cargo_minimize::processor src/array/ops.rs: After privatize: no changes
  31530ms  INFO cargo_minimize::processor Finished privatize

 INFO cargo_minimize::processor::reaper Before reaper: yes
 INFO cargo_minimize::processor::reaper src/access.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/vec/api.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/slice/traits.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/mem.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/array/traits.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/field.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/slice/api.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/boxed/ops.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/index.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/devel.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/prelude.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/slice/ops.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/vec/iter.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/vec.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/boxed.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/order.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/vec/ops.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/pointer.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/boxed/traits.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/domain.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/field/io.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/slice/proxy.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/macros/internal.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/store.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/slice/iter.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/array/ops.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/vec/traits.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/slice.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/array.rs: After reaper: yes
 INFO cargo_minimize::processor::reaper src/boxed/api.rs: After reaper: yes
 INFO cargo_minimize::processor Initial build: yes
cargo_minimize::processor::Starting round of pass{name="delete-unused-functions"}
  1ms  INFO cargo_minimize::processor src/view.rs: After delete-unused-functions: no changes
  2ms  INFO cargo_minimize::processor src/vec.rs: After delete-unused-functions: no changes
  3ms  INFO cargo_minimize::processor src/store.rs: After delete-unused-functions: no changes
  7ms  INFO cargo_minimize::processor src/slice.rs: After delete-unused-functions: no changes
  8ms  INFO cargo_minimize::processor src/serdes.rs: After delete-unused-functions: no changes
  9ms  INFO cargo_minimize::processor src/prelude.rs: After delete-unused-functions: no changes
  10ms  INFO cargo_minimize::processor src/pointer.rs: After delete-unused-functions: no changes
  11ms  INFO cargo_minimize::processor src/order.rs: After delete-unused-functions: no changes
  167ms  INFO cargo_minimize::processor src/mem.rs: After delete-unused-functions: no
thread 'main' panicked at 'processing with invalid state', src/processor/reaper.rs:132:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Simplify types

There are many potential rules for type simplifications.

The simplest and most beneficial ones should be

T -> ()
X<A, B> -> (A, B)

Batch files

Some passes like privatize are highly likely to succeed. It would be more efficient if we batched those and applied to it several files at once at first.

We can just bail out to normal per-file mode if it fails or reduce the batch size.

walkdir tries to parse nonexisting arg

in the shell: cargo minimize

 WARN cargo_minimize::processor Error during walkdir: IO error for operation on src: No such file or directory (os error 2)
ERROR cargo_minimize An error occured:
Did not find any files for path src

Need to check if we actually pass any args or try cwd perhaps?

Work in parallel

cargo-minimize is pretty embarassingly parallel. It could copy the soruce to a bunch of tempdirs and run in parallel there, then atomically committing the minimized results into the real dir (this would be little tricky to get right but entirely possible).

Parallelization would be a great speedup as most performance is lost when bisecting through large "mostly no" files. As few things get committed during that work, it would be very easy to parallelize.

Pass randomization

Sometimes it's just best to randomize the passes and let them have fun. The current linear ordering is probably the best way to order them in a way that only runs all of them once, but a real minimization needs lots of repetition, which is currently not provided. The end goal is that you can just let cargo-minimize run over the night and get less code the next day.

typo in --help

--verify-fn <VERIFY_FN> A Rust closure returning a bool that checks whether a regression reproduces. Example:--verify_fn='|output| output.contains("internal compiler error")'``

the second verify_fn should be verify-fn

Find a good solution for pretty-printing

This currently uses a forked prettyplease with verbatim printing modifed to just dump the tokens. This sucks to maintain and is just annoying and also kinda blocking this from being published as a crate.

Ideally we'd use something simpler and easier. Just dumping tokens might actually reasonably work? We can call rustfmt afterwards. Although that is not exactly beautiful to watch which I don't like. Calling rustfmt all the time also sounds like an option, it should be reasonably fast although I dont trust rustfmt enough to actually work properly on dumped tokens. Maybe some of these alternative formatters that I've seen would work?

Bypass rustup wrapper in testsuite

perf record --call-graph=dwarf cargo test && perf report

+   33.53%     0.00%  .rustup-wrapped  [unknown]                                  [.] 0xffffffffffffffff                                                                                                             โ—†
+   27.12%     0.03%  .rustup-wrapped  .rustup-wrapped                            [.] rustup::dist::manifest::Manifest::parse                                                                                        โ–’
+   26.40%     0.01%  .rustup-wrapped  .rustup-wrapped                            [.] rustup::config::Cfg::find_or_install_override_toolchain_or_default                                                             โ–’
+   26.12%     0.00%  .rustup-wrapped  .rustup-wrapped                            [.] rustup::dist::manifestation::Manifestation::load_manifest                                                                      โ–’
+   26.05%     0.00%  .rustup-wrapped  .rustup-wrapped                            [.] rustup::toolchain::DistributableToolchain::get_toolchain_desc_with_manifest                                                    โ–’
+   24.69%     0.00%  .rustup-wrapped  .rustup-wrapped                            [.] toml::de::from_str                                                                                                             โ–’
+   23.81%     0.01%  .rustup-wrapped  .rustup-wrapped                            [.] rustup::cli::proxy_mode::main                                                                                                  โ–’
+   22.82%     0.00%  regression_chec  [unknown]                                  [.] 0xffffffffffffffff                                                                                                             โ–’
+   17.57%     1.51%  .rustup-wrapped  .rustup-wrapped                            [.] toml::de::Deserializer::tables         

We should bypass the rustup wrapper by doing something like rustup which once (but also make sure that we can fallback to not-rustup cargo/rustc if cargo/rustc are not installed with rustup)

Delete empty files

item-deleter sometimes deletes mod statements.
After they have been deleted, the file is basically free to delete and it will quickly be empty.
We should have a pass that deletes empty files.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.