#ice #rustc

app icemelter

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

3 releases (breaking)

new 0.3.0 Mar 18, 2023
0.2.0 Mar 17, 2023
0.1.0 Mar 17, 2023

#270 in Development tools

49 downloads per month

MIT license

26KB
620 lines

Icemelter

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

Features

  • Automatically minimizes files that cause the ICE (MCVEs) (it really works: Icemelter reduced a ~250 line file to just 4 lines in #107454)
  • Integrates with cargo-bisect-rustc
  • Formats MCVEs if doing so keeps the ICE
  • Generates copy-pasteable Markdown reports
  • Optionally downloads MCVEs from Github (no more copying and pasting!)

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, to install the reducer for the language <LANG>, 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

~10–20MB
~440K SLoC