Skip to content

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

License

Notifications You must be signed in to change notification settings

langston-barrett/icemelter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.