about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Regueiro <alexreg@me.com>2018-05-30 19:27:45 +0100
committerAlexander Regueiro <alexreg@me.com>2018-06-30 23:52:33 +0100
commita2cd95fd9ea3eb698dc9f8ae7dd29321e5345e96 (patch)
tree13d9ec9ad20c59041fdea36e0f46c95529c3bae5 /src
parent349d53c2a90e7adc45b2c07bdb038cfb03669b37 (diff)
downloadrust-a2cd95fd9ea3eb698dc9f8ae7dd29321e5345e96.tar.gz
rust-a2cd95fd9ea3eb698dc9f8ae7dd29321e5345e96.zip
Fixed bug with miri const evaluation where allocation is recursively borrowed.
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/interpret/memory.rs3
-rw-r--r--src/test/compile-fail/issue-28324.rs1
-rw-r--r--src/test/run-pass/auxiliary/pub_static_array.rs (renamed from src/test/compile-fail/auxiliary/pub_static_array.rs)0
-rw-r--r--src/test/run-pass/static-array-across-crate.rs (renamed from src/test/compile-fail/static-array-across-crate.rs)6
4 files changed, 3 insertions, 7 deletions
diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs
index daa30fb187c..8e1f24c3f01 100644
--- a/src/librustc_mir/interpret/memory.rs
+++ b/src/librustc_mir/interpret/memory.rs
@@ -305,7 +305,8 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'a, 'mir, 'tcx, M> {
                 Some(alloc) => Ok(alloc),
                 None => {
                     // static alloc?
-                    match self.tcx.alloc_map.lock().get(id) {
+                    let alloc = self.tcx.alloc_map.lock().get(id);
+                    match alloc {
                         Some(AllocType::Memory(mem)) => Ok(mem),
                         Some(AllocType::Function(..)) => {
                             Err(EvalErrorKind::DerefFunctionPointer.into())
diff --git a/src/test/compile-fail/issue-28324.rs b/src/test/compile-fail/issue-28324.rs
index 4179048b461..369f919471c 100644
--- a/src/test/compile-fail/issue-28324.rs
+++ b/src/test/compile-fail/issue-28324.rs
@@ -16,5 +16,6 @@ extern {
 
 pub static BAZ: u32 = *&error_message_count;
 //~^ ERROR constant evaluation error
+//~| tried to read foreign (extern) static
 
 fn main() {}
diff --git a/src/test/compile-fail/auxiliary/pub_static_array.rs b/src/test/run-pass/auxiliary/pub_static_array.rs
index 7248d0e543b..7248d0e543b 100644
--- a/src/test/compile-fail/auxiliary/pub_static_array.rs
+++ b/src/test/run-pass/auxiliary/pub_static_array.rs
diff --git a/src/test/compile-fail/static-array-across-crate.rs b/src/test/run-pass/static-array-across-crate.rs
index d101432f6d1..732d94cee8e 100644
--- a/src/test/compile-fail/static-array-across-crate.rs
+++ b/src/test/run-pass/static-array-across-crate.rs
@@ -15,13 +15,7 @@ extern crate pub_static_array as array;
 use array::ARRAY;
 
 static X: &'static u8 = &ARRAY[0];
-//~^ ERROR: cannot refer to the interior of another static, use a constant
-
 static Y: &'static u8 = &(&ARRAY)[0];
-//~^ ERROR: cannot refer to the interior of another static, use a constant
-
 static Z: u8 = (&ARRAY)[0];
-//~^ ERROR: cannot refer to the interior of another static, use a constant
-//~^^ ERROR: cannot refer to other statics by value
 
 pub fn main() {}