Rollup merge of #72879 - RalfJung:miri-tctx-at, r=oli-obk
Miri: avoid tracking current location three times Miri tracks the current instruction to execute in the call stack, but it also additionally has two `TyCtxtAt` that carry a `Span` that also tracks the current instruction. That is quite silly, so this PR uses `TyCtxt` instead, and then uses a method for computing the current span when a `TyCtxtAt` is needed. Having less redundant (semi-)global state seems like a good improvement to me. :D To keep the ConstProp errors the same, I had to add the option to `error_to_const_error` to overwrite the span. Also for some reason this changes cycle errors a bit -- not sure if we are now better or worse as giving those queries the right span. (It is unfortunately quite easy to accidentally use `DUMMY_SP` by calling the query on a `TyCtxt` instead of a `TyCtxtAt`.) r? @oli-obk @eddyb
This commit is contained in:
commit
f9c8a67593
23 changed files with 141 additions and 123 deletions
|
|
@ -23,10 +23,10 @@ LL | n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
|
|||
= help: add `#![feature(const_if_match)]` to the crate attributes to enable
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/infinite_loop.rs:8:20
|
||||
--> $DIR/infinite_loop.rs:8:17
|
||||
|
|
||||
LL | n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
|
||||
| ^^^^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ LL | bytes: [u8; std::mem::size_of::<Foo>()]
|
|||
note: ...which requires const-evaluating `std::mem::size_of`...
|
||||
--> $SRC_DIR/libcore/mem/mod.rs:LL:COL
|
||||
|
|
||||
LL | intrinsics::size_of::<T>()
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | pub const fn size_of<T>() -> usize {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: ...which requires const-evaluating + checking `std::intrinsics::size_of`...
|
||||
--> $SRC_DIR/libcore/intrinsics.rs:LL:COL
|
||||
|
|
||||
|
|
|
|||
|
|
@ -1,15 +1,18 @@
|
|||
error: any use of this value will cause an error
|
||||
--> $DIR/const_eval_limit_reached.rs:8:11
|
||||
--> $DIR/const_eval_limit_reached.rs:8:5
|
||||
|
|
||||
LL | / const X: usize = {
|
||||
LL | | let mut x = 0;
|
||||
LL | | while x != 1000 {
|
||||
| | ^^^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
|
||||
LL | |
|
||||
... |
|
||||
LL | | x
|
||||
LL | | };
|
||||
| |__-
|
||||
LL | / const X: usize = {
|
||||
LL | | let mut x = 0;
|
||||
LL | | while x != 1000 {
|
||||
| |_____^
|
||||
LL | ||
|
||||
LL | || x += 1;
|
||||
LL | || }
|
||||
| ||_____^ exceeded interpreter step limit (see `#[const_eval_limit]`)
|
||||
LL | |
|
||||
LL | | x
|
||||
LL | | };
|
||||
| |__-
|
||||
|
|
||||
= note: `#[deny(const_err)]` on by default
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
error[E0391]: cycle detected when const-evaluating `FOO`
|
||||
--> $DIR/recursive-zst-static.rs:10:18
|
||||
--> $DIR/recursive-zst-static.rs:10:1
|
||||
|
|
||||
LL | static FOO: () = FOO;
|
||||
| ^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires const-evaluating `FOO`...
|
||||
--> $DIR/recursive-zst-static.rs:10:1
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
error[E0391]: cycle detected when const-evaluating `FOO`
|
||||
--> $DIR/recursive-zst-static.rs:10:18
|
||||
--> $DIR/recursive-zst-static.rs:10:1
|
||||
|
|
||||
LL | static FOO: () = FOO;
|
||||
| ^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires const-evaluating `FOO`...
|
||||
--> $DIR/recursive-zst-static.rs:10:1
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
// build-fail
|
||||
|
||||
pub const unsafe fn fake_type<T>() -> T {
|
||||
hint_unreachable()
|
||||
hint_unreachable() //~ ERROR evaluation of constant value failed
|
||||
}
|
||||
|
||||
pub const unsafe fn hint_unreachable() -> ! {
|
||||
fake_type() //~ ERROR evaluation of constant value failed
|
||||
fake_type()
|
||||
}
|
||||
|
||||
trait Const {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/uninhabited-const-issue-61744.rs:8:5
|
||||
--> $DIR/uninhabited-const-issue-61744.rs:4:5
|
||||
|
|
||||
LL | hint_unreachable()
|
||||
| ------------------
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| reached the configured maximum number of stack frames
|
||||
| inside `fake_type::<!>` at $DIR/uninhabited-const-issue-61744.rs:4:5
|
||||
| inside `fake_type::<!>` at $DIR/uninhabited-const-issue-61744.rs:4:5
|
||||
| inside `fake_type::<!>` at $DIR/uninhabited-const-issue-61744.rs:4:5
|
||||
|
|
@ -71,9 +72,8 @@ LL | hint_unreachable()
|
|||
| inside `fake_type::<i32>` at $DIR/uninhabited-const-issue-61744.rs:4:5
|
||||
...
|
||||
LL | fake_type()
|
||||
| ^^^^^^^^^^^
|
||||
| -----------
|
||||
| |
|
||||
| reached the configured maximum number of stack frames
|
||||
| inside `hint_unreachable` at $DIR/uninhabited-const-issue-61744.rs:8:5
|
||||
| inside `hint_unreachable` at $DIR/uninhabited-const-issue-61744.rs:8:5
|
||||
| inside `hint_unreachable` at $DIR/uninhabited-const-issue-61744.rs:8:5
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
error[E0391]: cycle detected when const-evaluating `a`
|
||||
--> $DIR/infinite-recursion-const-fn.rs:3:25
|
||||
--> $DIR/infinite-recursion-const-fn.rs:3:1
|
||||
|
|
||||
LL | const fn a() -> usize { b() }
|
||||
| ^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires const-evaluating `b`...
|
||||
--> $DIR/infinite-recursion-const-fn.rs:4:25
|
||||
--> $DIR/infinite-recursion-const-fn.rs:4:1
|
||||
|
|
||||
LL | const fn b() -> usize { a() }
|
||||
| ^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which again requires const-evaluating `a`, completing the cycle
|
||||
note: cycle used when const-evaluating `ARR::{{constant}}#0`
|
||||
--> $DIR/infinite-recursion-const-fn.rs:5:18
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
error[E0391]: cycle detected when const-evaluating `FOO`
|
||||
--> $DIR/recursive-static-definition.rs:1:23
|
||||
--> $DIR/recursive-static-definition.rs:1:1
|
||||
|
|
||||
LL | pub static FOO: u32 = FOO;
|
||||
| ^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires const-evaluating `FOO`...
|
||||
--> $DIR/recursive-static-definition.rs:1:1
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ LL | pub static mut B: () = unsafe { A = 1; };
|
|||
| ^^^^^ modifying a static's initial value from another static's initializer
|
||||
|
||||
error[E0391]: cycle detected when const-evaluating `C`
|
||||
--> $DIR/write-to-static-mut-in-static.rs:5:34
|
||||
--> $DIR/write-to-static-mut-in-static.rs:5:1
|
||||
|
|
||||
LL | pub static mut C: u32 = unsafe { C = 1; 0 };
|
||||
| ^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires const-evaluating `C`...
|
||||
--> $DIR/write-to-static-mut-in-static.rs:5:1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue