#compiler-error #ice #rustc #debugging #minimize #internal #step

app icemelter

Tool to minimize files that trigger internal compiler errors (ICEs)

6 releases

0.3.2 Jul 17, 2023
0.3.1 Apr 1, 2023
0.3.0 Mar 18, 2023
0.2.0 Mar 17, 2023
0.1.0 Mar 17, 2023

#1013 in Development tools

MIT license

27KB
621 lines

Icemelter

Icemelter automates steps in debugging rustc internal compiler errors (ICEs).

Features

  • Automatically minimizes files that cause the ICE (MCVEs)*
  • Runs cargo-bisect-rustc
  • rustfmts MCVEs if doing so keeps the ICE
  • Generates copy-pasteable Markdown reports
  • Optionally downloads MCVEs from Github

*It really works: Icemelter reduced a ~250 line file to just 4 lines in #107454.

More features are planned.

Usage

Icemelter works on standalone Rust files. If your file is named ice.rs, use it like so:

icemelter ice.rs

By default, the result is stored to melted.rs. A few helpful flags:

  • --output: Change where the output file is written
  • --bisect: Bisect the regression with cargo-bisect-rustc
  • --markdown: Output a copy-pasteable report

Here's an example that uses a different compiler and adds a flag:

icemelter ice.rs -- rustc +nightly --crate-type=lib

For more options, see --help.

Installation

From a release

Statically-linked Linux binaries are available on the releases page.

From crates.io

You can build a released version from crates.io. You'll need the Rust compiler and the Cargo build tool. rustup makes it very easy to obtain these. Then run:

cargo install icemelter

This will install binaries in ~/.cargo/bin by default.

Build

To build from source, you'll need the Rust compiler and the Cargo build tool. rustup makes it very easy to obtain these. Then, get the source:

git clone https://github.com/langston-barrett/icemelter
cd icemelter

Finally, build everything:

cargo build --release

You can find binaries in target/release. Run tests with cargo test.

How it works

Icemelter's minimization capabilities are built on treereduce-rust.

Dependencies

~14–29MB
~543K SLoC