Skip to content

Miri does not get entirely unleashed #71630

@RalfJung

Description

@RalfJung
Member

I tried this code on nightly with -Zunleash-the-miri-inside-of-you:

#![allow(const_err)]
#![feature(const_raw_ptr_deref)]

use std::cell::UnsafeCell;


struct Meh {
    x: UnsafeCell<i32>,
}

unsafe impl Sync for Meh {}

static MEH: Meh = Meh {
    x: UnsafeCell::new(42),
};

const WRITE: () = unsafe {
    *MEH.x.get() = 12;
};


fn main() {
}

I expected that that should try to mutate a global, and show an error along those lines. But instead, const-checking gets in the way, even though "unleash Miri" should disable that:

warning: skipping const checks
  --> unleash.rs:18:6
   |
18 |     *MEH.x.get() = 12;
   |      ^^^

error[E0019]: constant contains unimplemented expression type
  --> unleash.rs:18:5
   |
18 |     *MEH.x.get() = 12;
   |     ^^^^^^^^^^^^^^^^^

error: aborting due to previous error; 1 warning emitted

For more information about this error, try `rustc --explain E0019`.

Activity

RalfJung

RalfJung commented on Apr 28, 2020

@RalfJung
MemberAuthor

Cc @rust-lang/wg-const-eval

RalfJung

RalfJung commented on Apr 28, 2020

@RalfJung
MemberAuthor

Ah, I need to add the const_mut_refs feature gate. But that's basically impossible to figure out without reading the rustc sources.

I think unleashing miri should ignore all those feature gates. IMO it makes little sense to let this unleash features that do not even have a feature gate yet, but not let it unleash features that do.

ecstatic-morse

ecstatic-morse commented on Apr 28, 2020

@ecstatic-morse
Contributor

Cross posting from #71631:

The goal of the current behavior is to prevent unnecessary use of -Zunleash in the test suite when feature gates would suffice. Requiring that test writers use feature gates makes it easy to see what tests no longer need -Zunleash when a new feature is implemented on nightly.

Without a diagnostics bug--we were not suggesting that nightly users enable #![feature(const_mut_refs)] when we saw a deref of a mutable reference--the solution to the problem you encountered would have been clear. We should fix this instead.

RalfJung

RalfJung commented on Apr 28, 2020

@RalfJung
MemberAuthor

(I responded there, summary: I disagree.)

added
A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)
A-miriArea: The miri tool
C-enhancementCategory: An issue proposing an enhancement or a PR with one.
on Apr 29, 2020
added a commit that references this issue on May 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)A-miriArea: The miri toolC-enhancementCategory: An issue proposing an enhancement or a PR with one.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @RalfJung@ecstatic-morse

      Issue actions

        Miri does not get entirely unleashed · Issue #71630 · rust-lang/rust