Permit casting region pointers to unsafe ones.
This commit is contained in:
parent
2bc301fd68
commit
50277ec555
8 changed files with 142 additions and 3 deletions
14
src/test/compile-fail/cast-vector-to-unsafe-nonstatic.rs
Normal file
14
src/test/compile-fail/cast-vector-to-unsafe-nonstatic.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright 2012 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.
|
||||
|
||||
fn main() {
|
||||
let foo = ['h' as u8, 'i' as u8, 0 as u8];
|
||||
let bar = &foo as *u8; //~ ERROR mismatched types
|
||||
}
|
||||
16
src/test/compile-fail/const-cast-different-types.rs
Normal file
16
src/test/compile-fail/const-cast-different-types.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright 2012 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.
|
||||
|
||||
const a: &static/str = &"foo";
|
||||
const b: *u8 = a as *u8; //~ ERROR non-scalar cast
|
||||
const c: *u8 = &a as *u8; //~ ERROR mismatched types
|
||||
|
||||
fn main() {
|
||||
}
|
||||
15
src/test/compile-fail/const-cast-wrong-type.rs
Normal file
15
src/test/compile-fail/const-cast-wrong-type.rs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// Copyright 2012 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.
|
||||
|
||||
const a: [u8 * 3] = ['h' as u8, 'i' as u8, 0 as u8];
|
||||
const b: *i8 = &a as *i8; //~ ERROR mismatched types
|
||||
|
||||
fn main() {
|
||||
}
|
||||
21
src/test/run-pass/const-cast.rs
Normal file
21
src/test/run-pass/const-cast.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2012 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.
|
||||
|
||||
extern fn foo() {}
|
||||
|
||||
const x: *u8 = foo;
|
||||
const y: *libc::c_void = x as *libc::c_void;
|
||||
const a: &static/int = &10;
|
||||
const b: *int = a as *int;
|
||||
|
||||
fn main() {
|
||||
assert x as *libc::c_void == y;
|
||||
assert a as *int == b;
|
||||
}
|
||||
22
src/test/run-pass/const-str-ptr.rs
Normal file
22
src/test/run-pass/const-str-ptr.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright 2012 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.
|
||||
|
||||
const a: [u8 * 3] = ['h' as u8, 'i' as u8, 0 as u8];
|
||||
const c: &static/[u8 * 3] = &a;
|
||||
const b: *u8 = c as *u8;
|
||||
|
||||
fn main() {
|
||||
let foo = &a as *u8;
|
||||
assert unsafe { str::raw::from_bytes(a) } == ~"hi\x00";
|
||||
assert unsafe { str::raw::from_buf(foo) } == ~"hi";
|
||||
assert unsafe { str::raw::from_buf(b) } == ~"hi";
|
||||
assert unsafe { *b == a[0] };
|
||||
assert unsafe { *(&c[0] as *u8) == a[0] };
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue