};
match cause {
- mc::AliasableStatic |
+ 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. It happens when we have an
- // `&mut` or assignment to a static. But in the case
- // of `static X`, we get a mutability violation first,
- // and never get here. In the case of `static mut X`,
- // that is unsafe and hence the aliasability error is
- // ignored.
- span_bug!(span, "aliasability violation for static `{}`", prefix)
+ // This path cannot occur. `static mut X` is not checked
+ // for aliasability violations.
+ span_bug!(span, "aliasability violation for static mut `{}`", prefix)
}
mc::AliasableBorrowed => {}
};
--- /dev/null
+// Copyright 2017 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.
+
+// revisions: ast mir
+//[mir]compile-flags: -Z borrowck=mir
+
+static buf: &mut [u8] = &mut [1u8,2,3,4,5,7]; //[ast]~ ERROR E0017
+ //[mir]~^ ERROR E0017
+fn write<T: AsRef<[u8]>>(buffer: T) { }
+
+fn main() {
+ write(&buf);
+ buf[0]=2; //[mir]~ ERROR E0594
+}