diff options
| author | kennytm <kennytm@gmail.com> | 2018-02-06 02:13:46 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-06 02:13:46 +0800 |
| commit | 9dab73773a017d7a560dc677bc55526593145835 (patch) | |
| tree | ee3bd0d8a0f8249dd38e1c820ff61e4e35cd4d9a | |
| parent | cde119db8e27da1b8e8be376449e71e62cc80e11 (diff) | |
| parent | 3d114c7f61c5994633196a378e5eed4ee3e58841 (diff) | |
| download | rust-9dab73773a017d7a560dc677bc55526593145835.tar.gz rust-9dab73773a017d7a560dc677bc55526593145835.zip | |
Rollup merge of #47543 - topecongiro:issue-42344, r=nikomatsakis
Disallow mutable borrow to non-mut statics Closes #42344.
| -rw-r--r-- | src/librustc_borrowck/borrowck/mod.rs | 12 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-42344.rs | 17 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-46604.rs | 3 |
3 files changed, 20 insertions, 12 deletions
diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs index 84ca2a9318a..738c0d82ee1 100644 --- a/src/librustc_borrowck/borrowck/mod.rs +++ b/src/librustc_borrowck/borrowck/mod.rs @@ -1068,22 +1068,12 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> { }; match cause { - mc::AliasableStatic => { - // This happens when we have an `&mut` or assignment to a - // static. We should have already reported a mutability - // violation first, but may have continued compiling. - self.tcx.sess.delay_span_bug( - span, - &format!("aliasability violation for static `{}`", prefix) - ); - return; - } mc::AliasableStaticMut => { // This path cannot occur. `static mut X` is not checked // for aliasability violations. span_bug!(span, "aliasability violation for static mut `{}`", prefix) } - mc::AliasableBorrowed => {} + mc::AliasableStatic | mc::AliasableBorrowed => {} }; let blame = cmt.immutability_blame(); let mut err = match blame { diff --git a/src/test/compile-fail/issue-42344.rs b/src/test/compile-fail/issue-42344.rs new file mode 100644 index 00000000000..2f11ff402be --- /dev/null +++ b/src/test/compile-fail/issue-42344.rs @@ -0,0 +1,17 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +static TAB: [&mut [u8]; 0] = []; + +pub unsafe fn test() { + TAB[0].iter_mut(); //~ ERROR cannot borrow data mutably in a `&` reference [E0389] +} + +pub fn main() {} diff --git a/src/test/compile-fail/issue-46604.rs b/src/test/compile-fail/issue-46604.rs index 06aa4c343fe..dc14eca1e67 100644 --- a/src/test/compile-fail/issue-46604.rs +++ b/src/test/compile-fail/issue-46604.rs @@ -17,5 +17,6 @@ fn write<T: AsRef<[u8]>>(buffer: T) { } fn main() { write(&buf); - buf[0]=2; //[mir]~ ERROR E0594 + buf[0]=2; //[ast]~ ERROR E0389 + //[mir]~^ ERROR E0594 } |
