about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorSean McArthur <sean.monstar@gmail.com>2015-04-13 14:49:10 -0700
committerSean McArthur <sean.monstar@gmail.com>2015-05-05 22:26:23 -0700
commitd131f335579b8c080a2416a65ca703169fae560b (patch)
tree7a26c19593694618ccd7d3c903b5818260212935 /src/test
parent6cd748611346dec3181f81ca3aa551cce0529343 (diff)
downloadrust-d131f335579b8c080a2416a65ca703169fae560b.tar.gz
rust-d131f335579b8c080a2416a65ca703169fae560b.zip
lint: deny transmuting from immutable to mutable, since it's undefined behavior
[breaking-change] Technically breaking, since code that had been using
these transmutes before will no longer compile. However, it was
undefined behavior, so really, it's a good thing. Fixing your code would
require some re-working to use an UnsafeCell instead.

Closes #13146
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/transmute-imut-to-mut.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/test/compile-fail/transmute-imut-to-mut.rs b/src/test/compile-fail/transmute-imut-to-mut.rs
new file mode 100644
index 00000000000..2e076337f53
--- /dev/null
+++ b/src/test/compile-fail/transmute-imut-to-mut.rs
@@ -0,0 +1,20 @@
+// Copyright 2015 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.
+
+// Tests that transmuting from &T to &mut T is Undefined Behavior.
+
+use std::mem::transmute;
+
+fn main() {
+    let _a: &mut u8 = unsafe { transmute(&1u8) };
+    //~^ ERROR mutating transmuted &mut T from &T may cause undefined behavior
+}
+
+