You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
3.4 KiB
182 lines
3.4 KiB
#[macro_use]
|
|
mod compiletest;
|
|
|
|
assert_no_panic! {
|
|
mod test_readme {
|
|
#[no_panic]
|
|
fn demo(s: &str) -> &str {
|
|
&s[1..]
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", demo("input string"));
|
|
}
|
|
}
|
|
|
|
mod test_method_in_impl {
|
|
struct S;
|
|
|
|
impl S {
|
|
#[no_panic]
|
|
fn demo(self) -> &'static str {
|
|
"test"
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", S.demo());
|
|
}
|
|
}
|
|
|
|
mod test_lifetime_elision {
|
|
struct Buffer {
|
|
bytes: [u8; 24],
|
|
}
|
|
|
|
#[no_panic]
|
|
fn demo(buffer: &mut Buffer) -> &[u8] {
|
|
&buffer.bytes[..]
|
|
}
|
|
|
|
fn main() {
|
|
let mut buffer = Buffer {
|
|
bytes: [0u8; 24],
|
|
};
|
|
println!("{:?}", demo(&mut buffer));
|
|
}
|
|
}
|
|
|
|
mod test_receiver_lifetime_elision {
|
|
struct Buffer {
|
|
bytes: [u8; 24],
|
|
}
|
|
|
|
impl Buffer {
|
|
#[no_panic]
|
|
fn demo(&mut self, _s: &str) -> &[u8] {
|
|
&self.bytes[..]
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let mut buffer = Buffer {
|
|
bytes: [0u8; 24],
|
|
};
|
|
println!("{:?}", buffer.demo(""));
|
|
}
|
|
}
|
|
|
|
mod test_ref_argument {
|
|
#[no_panic]
|
|
fn demo(ref i: i32) -> i32 {
|
|
*i
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", demo(0));
|
|
}
|
|
}
|
|
|
|
mod test_mut_argument {
|
|
#[no_panic]
|
|
fn demo(mut i: i32) -> i32 {
|
|
i += 1;
|
|
i
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", demo(0));
|
|
}
|
|
}
|
|
|
|
mod test_ref_mut_argument {
|
|
#[no_panic]
|
|
fn demo(ref mut i: i32) -> i32 {
|
|
*i += 1;
|
|
*i
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", demo(0));
|
|
}
|
|
}
|
|
|
|
mod test_borrow_from_mut_self {
|
|
struct S {
|
|
data: usize,
|
|
}
|
|
|
|
impl S {
|
|
#[no_panic]
|
|
fn get_mut(&mut self) -> &mut usize {
|
|
&mut self.data
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let mut s = S { data: 0 };
|
|
println!("{}", s.get_mut());
|
|
}
|
|
}
|
|
|
|
mod test_self_in_vec {
|
|
struct S {
|
|
data: usize,
|
|
}
|
|
|
|
impl S {
|
|
#[no_panic]
|
|
fn get_mut(&mut self) -> Vec<usize> {
|
|
vec![self.data]
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let mut s = S { data: 0 };
|
|
println!("{}", s.get_mut()[0]);
|
|
}
|
|
}
|
|
|
|
mod test_self_in_macro_containing_fn {
|
|
pub struct S {
|
|
data: usize,
|
|
}
|
|
|
|
macro_rules! emit {
|
|
($($tt:tt)*) => {
|
|
$($tt)*
|
|
};
|
|
}
|
|
|
|
impl S {
|
|
#[no_panic]
|
|
fn get_mut(&mut self) -> usize {
|
|
let _ = emit!({
|
|
impl S {
|
|
pub fn f(self) {}
|
|
}
|
|
});
|
|
self.data
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let mut s = S { data: 0 };
|
|
println!("{}", s.get_mut());
|
|
}
|
|
}
|
|
}
|
|
|
|
assert_link_error! {
|
|
mod test_readme {
|
|
#[no_panic]
|
|
fn demo(s: &str) -> &str {
|
|
&s[1..]
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", demo("\u{1f980}input string"));
|
|
}
|
|
}
|
|
}
|