about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-12-23 00:07:37 +0800
committerkennytm <kennytm@gmail.com>2018-12-23 02:11:51 +0800
commit54d4e26b217d1e483b66f18713149bff97d9bd71 (patch)
tree80873fb401c7c9a90d6243b77d815ea6b1756d34
parentbeaf07182253e8055b5b9abc5919bab6559d53f7 (diff)
parent50eb5f6137719a7e8fdd270e90af0d734d002c5d (diff)
downloadrust-54d4e26b217d1e483b66f18713149bff97d9bd71.tar.gz
rust-54d4e26b217d1e483b66f18713149bff97d9bd71.zip
Rollup merge of #56919 - oli-obk:null_ref_array_tuple, r=RalfJung
Remove a wrong multiplier on relocation offset computation

r? @RalfJung

fixes #56800
-rw-r--r--src/librustc_mir/interpret/memory.rs9
-rw-r--r--src/test/ui/consts/promoted_regression.rs9
2 files changed, 16 insertions, 2 deletions
diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs
index 420fe264263..77a5f5d7b3a 100644
--- a/src/librustc_mir/interpret/memory.rs
+++ b/src/librustc_mir/interpret/memory.rs
@@ -708,8 +708,13 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> Memory<'a, 'mir, 'tcx, M> {
                     relocations
                     .iter()
                     .map(|&(offset, reloc)| {
-                    (offset + dest.offset - src.offset + (i * size * relocations.len() as u64),
-                     reloc)
+                        // compute offset for current repetition
+                        let dest_offset = dest.offset + (i * size);
+                        (
+                            // shift offsets from source allocation to destination allocation
+                            offset + dest_offset - src.offset,
+                            reloc,
+                        )
                     })
                 );
             }
diff --git a/src/test/ui/consts/promoted_regression.rs b/src/test/ui/consts/promoted_regression.rs
new file mode 100644
index 00000000000..68b9a20ecf9
--- /dev/null
+++ b/src/test/ui/consts/promoted_regression.rs
@@ -0,0 +1,9 @@
+// compile-pass
+
+fn main() {
+    let _ = &[("", ""); 3];
+}
+
+const FOO: &[(&str, &str)] = &[("", ""); 3];
+const BAR: &[(&str, &str); 5] = &[("", ""); 5];
+const BAA: &[[&str; 12]; 11] = &[[""; 12]; 11];