diff options
| author | Sean McArthur <sean.monstar@gmail.com> | 2015-04-13 14:49:10 -0700 |
|---|---|---|
| committer | Sean McArthur <sean.monstar@gmail.com> | 2015-05-05 22:26:23 -0700 |
| commit | d131f335579b8c080a2416a65ca703169fae560b (patch) | |
| tree | 7a26c19593694618ccd7d3c903b5818260212935 /src/test | |
| parent | 6cd748611346dec3181f81ca3aa551cce0529343 (diff) | |
| download | rust-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.rs | 20 |
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 +} + + |
