facebookexperimental / MIRAI

Rust mid-level IR Abstract Interpreter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MIRAI installation error

ya0guang opened this issue · comments

Issue

Error occurs while running cargo install --path ./checker.

Steps to Reproduce

Install MIRAI normally on Ubuntu 20.04 following the document.

Expected Behavior

Successful installation.

Actual Results

Error message:

   Compiling parking_lot v0.11.2
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
   --> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/crossbeam-epoch-0.9.8/src/atomic.rs:314:6
    |
314 | impl<T: ?Sized + Pointable> Atomic<T> {
    |      ^
...
346 |     pub const fn null() -> Atomic<T> {
    |     -------------------------------- function declared as const here
    |
    = note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
    = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable

   Compiling petgraph v0.6.0
   Compiling clap v3.1.6
For more information about this error, try `rustc --explain E0658`.
error: could not compile `crossbeam-epoch` due to previous error
warning: build failed, waiting for other jobs to finish...
error: failed to compile `mirai v1.1.0 (/MIRAI/checker)`, intermediate artifacts can be found at `/MIRAI/target`

Root Cause

In Cargo install, Cargo fetches the latest versions of the components, which means the locked components (in Cargo.lock) will not be used, and therefore the updates in dependent components may lead to malfunction or error.

In this error, crossbeam-epoch just update to 0.9.8 today, where a recent commit requires up-to-date rust nightly toolchain.

Quick Fix

use cargo install --locked --path ./checker instead.

Fix

Fixing this error can be easy: updating Rust toolchain. However, when I update it, rusts complains because of changes in ``rustc_target::abi::Layout`. I'll also try to fix them.

Nevertheless, I believe it would be better to manage the dependencies in a more elegant way. Currently the working versions are all in the lock file, however the toml file records nearly all dependencies versions as *. Maybe we can stabilize the compatible versions in that toml file.

I suspect that the "quick fix" is actually also the right fix. I'm more than a little bit surprised that it is not the default. I'll update the documentation accordingly.